跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

IKEv2/IPSec VPN 完整部署指南:从概念到容器化实践

前言

在远程办公和移动办公日益普及的今天,自建VPN已成为保障网络安全通信的重要手段。IKEv2/IPSec组合因其安全性高、移动性支持好的特点,成为当前主流的VPN方案之一。本文将从概念解析到实际操作,系统性地介绍如何在Linux服务器上使用StrongSwan搭建支持多种认证方式的IKEv2/IPSec VPN服务,并提供包括传统安装和Docker容器化部署在内的完整方案,以及手机端的配置指南。

第一部分:核心概念分层解析

VPN配置中常见的IKEv2、IPSec、MSCHAPv2、PSK、RSA等术语,实际上分属不同的技术层级。理解这一层级关系,是正确配置VPN服务的基础。

一、IPSec——安全加密框架

IPSec(Internet Protocol Security)是一套由IETF制定的安全框架,而非单一协议。它定义了一系列在IP层对数据进行加密和认证的协议簇,旨在确保数据在公共网络(如互联网)上传输时的机密性、完整性和真实性。

IPSec框架主要包含三大核心组件:

  • AH(认证头) :提供数据完整性校验和数据源认证,但不提供加密。由于AH协议会被NAT设备修改IP头部而失效,实际部署中极少使用。
  • ESP(封装安全载荷) :提供加密、数据完整性和认证。这是当前VPN中使用最广泛的协议。
  • SA(安全关联) :定义了对特定流量使用的加密算法(如AES-256)、哈希算法(SHA-2)及密钥交换机制等参数。

IPSec支持两种工作模式:传输模式仅加密IP载荷,适用于端到端通信;隧道模式则加密整个原始IP报文并封装在新IP头部中,适用于远程访问场景。

二、IKEv2——高效的隧道建立协议

IKEv2(Internet Key Exchange version 2)是专为IPSec设计的密钥交换协议,其核心职责是协商并维护IPSec加密隧道。可以这样理解:IPSec定义了”隧道应该建成什么样”,而IKEv2负责”具体怎么把隧道建起来”。

IKEv2相比早期版本(IKEv1)的主要改进包括:

  1. 简化协商过程:将原来复杂的多阶段协商压缩为更简洁的两步交换(IKE_SA_INIT和IKE_AUTH),减少了网络往返次数。
  2. MOBIKE特性:允许VPN连接在网络接口切换时(如Wi-Fi切换到蜂窝数据)自动维持隧道状态,无需重新建立完整连接。
  3. 内置NAT穿透:通过UDP封装ESP报文,解决了IPSec协议无法穿越NAT设备的问题。

小结:当手机VPN类型中选择”IKEv2/IPSec”时,其技术含义是:使用IKEv2协议作为控制通道来管理,使用IPSec协议簇作为数据通道来加密。

三、三种基础认证方式详解

在IKEv2/IPSec隧道建立过程中,身份认证是必不可少的环节。手机设置中提供的MSCHAPv2、PSK、RSA三种选项,正是三种不同的身份认证机制。

1. PSK(预共享密钥)

PSK是最简单直接的认证方式:服务器和每个客户端预先配置一个相同的密钥字符串,连接时双方通过数学运算验证是否拥有这个相同的密钥。

  • 优势:配置极其简单,无需部署证书体系。
  • 劣势:安全性相对较低。所有客户端共享同一个密钥,一旦泄露则所有人都能接入。
  • 适用场景:个人测试、对安全性要求不高的环境。

2. RSA(数字证书认证)

RSA认证基于公钥基础设施(PKI)体系。服务器持有私钥,为每个合法客户端签发包含公钥的数字证书。认证时双方通过非对称加密算法验证对方证书的真实性。

  • 优势:安全性最高,能有效防止中间人攻击。
  • 劣势:部署与维护复杂,需要自行搭建并维护证书颁发机构(CA)。
  • 适用场景:企业级应用、对安全性有严格要求的网络环境。

3. MSCHAPv2(用户名密码认证)

MSCHAPv2(Microsoft Challenge-Handshake Authentication Protocol version 2)是基于用户名和密码的认证协议,通过”质询-响应”机制验证身份,密码不会明文传输。

  • 优势:配置和用户管理方便,仅需维护账户密码列表。
  • 劣势:安全性依赖于密码强度,历史上曾暴露出一些漏洞。
  • 适用场景:通常与证书认证组合使用,作为”第二把锁”。

四、EAP(可扩展身份验证协议)及其与MSCHAPv2的关系

EAP是什么?

EAP(Extensible Authentication Protocol,可扩展身份验证协议)是一个认证框架,而非单一的认证方法。它定义了一套标准的认证消息交换格式,允许在其内部封装多种不同的认证方式。可以这样理解:EAP是”快递包裹”,而具体的认证方式(如MSCHAPv2、TLS、TTLS等)是包裹里的”货物”。

EAP在IKEv2中的作用:IKEv2协议原生支持EAP。在IKE_AUTH阶段,服务器可以将认证过程交给EAP框架处理,由EAP协议完成客户端与服务器之间”质询-响应”的多次往返交互,最终由服务器判断认证是否成功(返回EAP-Success或EAP-Failure)。这种设计的优势在于,IKEv2无需关心具体的认证逻辑,只需将EAP消息在加密隧道中封装传输即可。

EAP-MSCHAPv2详解

EAP-MSCHAPv2就是将MSCHAPv2协议封装在EAP框架内使用。它的认证流程如下:

  1. 服务器发起质询(Challenge) :服务器生成一个16字节的随机数,通过EAP-Request消息发送给客户端。
  2. 客户端计算响应(Response) :客户端使用用户密码的MD4哈希值(即NTLM哈希)和质询值,按照MSCHAPv2算法计算出一个24字节的响应值,通过EAP-Response消息发回。
  3. 服务器验证:服务器同样根据数据库中存储的用户密码哈希值独立计算一次响应值,与客户端返回的响应进行比对。
  4. 双向验证:EAP-MSCHAPv2还包含一个服务器端验证步骤(认证者质询),用于客户端验证服务器身份,防止假冒服务器攻击。

为什么在IKEv2中采用EAP-MSCHAPv2而非原生MSCHAPv2?

  • 统一封装:IKEv2协议规范中定义的认证载荷有限,EAP作为通用框架可以承载各种认证方式,扩展性更好。
  • 安全性增强:所有EAP认证消息都在IKEv2的加密隧道(IKE_AUTH阶段)中传输,即使MSCHAPv2本身存在弱点,也难以被中间人截获和离线分析。
  • 与RADIUS集成:EAP-MSCHAPv2可以轻松与RADIUS服务器对接,实现集中认证和账号管理。

四种认证方式的关系对比

认证方式认证凭证是否封装在EAP内安全性是否验证服务器身份典型应用
PSK共享密钥否低否(共享密钥)个人测试
RSA证书数字证书否(原生pubkey)高是企业设备认证
MSCHAPv2(原生)用户名+密码否(极少使用)中否已淘汰
EAP-MSCHAPv2用户名+密码是中-高否内网测试
RSA + EAP-MSCHAPv2证书 + 密码是极高是金融、政务

第二部分:StrongSwan安装与基础配置

方式一:传统裸机安装(Ubuntu/Debian)

以下操作以Ubuntu/Debian系Linux服务器为例,CentOS/RHEL系可相应调整包管理命令。

步骤1:安装StrongSwan及必要插件

# Ubuntu/Debian
sudo apt update
sudo apt install strongswan libcharon-extra-plugins

# EAP-MSCHAPv2认证所需插件
sudo apt install strongswan-plugin-eap-mschapv2

# 如使用证书方案,安装证书生成工具
sudo apt install strongswan-pki openssl

安装完成后,检查服务状态:

sudo systemctl status strongswan-starter.service
sudo systemctl is-enabled strongswan-starter.service

步骤2:开启IP转发

编辑/etc/sysctl.conf文件:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

使配置生效:

sudo sysctl -p

步骤3:配置防火墙

# 开放UDP端口
sudo ufw allow 500/udp
sudo ufw allow 4500/udp

# 添加NAT规则(假设物理网卡为eth0)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400

# 永久保存规则(Ubuntu)
sudo apt install iptables-persistent
sudo netfilter-persistent save

方式二:Docker容器化部署(推荐)

使用Docker部署StrongSwan具有以下优势:

  • 环境隔离:容器与宿主机环境隔离,避免依赖冲突。
  • 迁移方便:镜像和配置文件可一键迁移到其他服务器。
  • 快速回滚:版本更新失败时可快速恢复到之前版本。
  • 资源可控:可精确限制容器的CPU和内存使用。

步骤1:准备目录结构

project/
├── docker-compose.yml
├── config/
│   ├── ipsec.conf
│   ├── ipsec.secrets
│   └── certs/
│       ├── private/
│       │   └── ca.key
│       ├── cacerts/
│       │   └── ca.crt
│       └── certs/
│           └── server.crt

步骤2:docker-compose.yml

version: "3"

services:
  strongswan:
    image: joyfay/joyfay-strongswan:latest
    container_name: strongswan-eap
    restart: unless-stopped

    # 方式一:直接赋予特权模式(简单但权限较大)
    privileged: true

    # 方式二:使用细粒度权限(生产环境推荐)
    # cap_add:
    #   - NET_ADMIN
    #   - SYS_MODULE

    ports:
      - "500:500/udp"
      - "4500:4500/udp"

    volumes:
      - ./config/ipsec.conf:/etc/ipsec.conf:ro
      - ./config/ipsec.secrets:/etc/ipsec.secrets:ro
      - ./config/certs:/etc/ipsec.d:ro
      - /lib/modules:/lib/modules:ro

    sysctls:
      - net.ipv4.ip_forward=1

    environment:
      - TZ=Asia/Shanghai

参数说明:

  • privileged: true 或 cap_add:容器需要操作网络栈和iptables,必须授予相应权限。NET_ADMIN用于配置网络,SYS_MODULE用于加载内核模块。
  • 端口映射:500/udp用于IKE协商,4500/udp用于NAT穿透(NAT-T)。
  • 挂载/lib/modules:让容器使用宿主机的内核模块。
  • net.ipv4.ip_forward=1:开启IP转发,让VPN客户端流量可以被路由。

步骤3:配置文件准备

config/ipsec.conf

config setup
    charondebug="ike 2, knl 2, cfg 2"
    uniqueids=no

conn ikev2-eap
    keyexchange=ikev2
    ike=aes256-sha256-modp2048,aes128-sha256-modp2048,aes256-sha1-modp2048,aes256-sha256-ecp256!
    esp=aes256-sha256,aes128-sha256,aes256-sha1!

    left=%any                                    # Docker环境监听所有接口
    leftid=你的服务器公网IP或域名                  # 必须与证书CN一致
    leftcert=server.crt
    leftsendcert=always
    leftsubnet=0.0.0.0/0                         # 全流量走VPN

    right=%any
    rightid=%any
    rightauth=eap-mschapv2                       # 关键:EAP认证
    rightsourceip=10.10.10.0/24                  # 分配给客户端的虚拟IP池
    rightdns=223.5.5.5,114.114.114.114

    eap_identity=%identity
    auto=add

关键点:

  • left=%any:Docker环境下监听所有网络接口。
  • leftid:必须与证书中的CN(Common Name)一致,客户端用它来验证服务器身份。
  • leftsubnet:若设为0.0.0.0/0,所有流量走VPN;若设为内网段(如192.168.1.0/24),则只有内网访问走VPN,互联网流量走客户端本地网络(split tunneling)。

config/ipsec.secrets

# 服务器证书私钥
: RSA server.key

# EAP用户账号,格式:"用户名" : EAP "密码"
"alice" : EAP "你的强密码"
"bob"   : EAP "另一个强密码"

添加更多用户只需追加新行即可。

步骤4:Docker方式生成证书

EAP方案需要服务端证书来验证服务器身份。由于Docker容器是临时的,建议在宿主机上用临时容器生成证书,并确保证书的CN和SAN字段与服务器公网IP或域名完全一致。

# 创建证书存放目录
mkdir -p config/certs/{private,cacerts,certs}

# 使用临时容器生成证书(替换 YOUR_PUBLIC_IP 为实际值)
docker run --rm -v $(pwd)/config/certs:/certs joyfay/joyfay-strongswan:latest bash -c "
pki --gen --type rsa --size 4096 --outform pem > /certs/private/ca.key
pki --self --ca --lifetime 3650 \
    --in /certs/private/ca.key \
    --type rsa \
    --dn 'CN=VPN Root CA' \
    --outform pem > /certs/cacerts/ca.crt
pki --gen --type rsa --size 4096 --outform pem > /certs/private/server.key
pki --pub --in /certs/private/server.key --type rsa \
    | pki --issue --lifetime 1825 \
        --cacert /certs/cacerts/ca.crt \
        --cakey /certs/private/ca.key \
        --dn 'CN=你的服务器公网IP或域名' \
        --san '你的服务器公网IP或域名' \
        --outform pem > /certs/certs/server.crt
chmod 600 /certs/private/*.key
"

步骤5:启动Docker服务

# 启动容器(后台运行)
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

Docker部署注意事项

  1. privileged vs cap_add:privileged: true最简单,但权限较大。生产环境建议改用细粒度权限:
   cap_add:
     - NET_ADMIN
     - SYS_MODULE
  1. 防火墙兼容性:若宿主机使用nftables,StrongSwan的NAT规则可能不生效。可在镜像启动脚本中使用iptables-legacy替代iptables解决兼容性问题。
  2. 证书CN匹配:leftid、证书CN和客户端填写的服务器地址三者必须完全一致,否则会报证书验证失败。
  3. 持久化数据:配置文件目录通过volumes挂载,确保数据持久化,容器删除后配置不会丢失。

第三部分:/etc/ipsec.conf 详细配置解析

ipsec.conf是StrongSwan的核心配置文件,由config setup(全局配置)和conn(连接定义)两类段落组成。

一、config setup 全局配置段

config setup
    charondebug="ike 2, knl 2, cfg 2"   # 调试日志:ike=2(连接协商),knl=2(内核IPsec),cfg=2(配置加载)
    uniqueids=no                         # 是否允许同一ID多次连接:yes=踢旧连,no=允许多设备同时在线

二、conn %default 默认继承段

所有连接(conn)都会继承%default段中的参数,避免重复配置:

conn %default
    ikelifetime=60m                      # IKE_SA(控制通道)生命周期,到期后自动重新协商
    keylife=20m                          # CHILD_SA(数据通道)生命周期,到期后重新生成密钥
    rekeymargin=3m                       # 在生命周期到期前多少秒开始重新协商
    keyingtries=1                        # 协商失败后重试次数
    keyexchange=ikev2                    # 强制使用IKEv2协议
    mobike=yes                           # 启用MOBIKE,支持客户端IP变化时保持连接
    dpdaction=clear                      # Dead Peer Detection,检测到对端无响应时清除连接
    dpddelay=30s                         # 30秒发送一次DPD探测包

三、IKE与ESP加密算法配置

ike=aes256-sha256-modp2048!             # IKE_SA(控制通道)加密套件
esp=aes256-sha256!                      # CHILD_SA(数据通道)加密套件
  • ike参数:格式为加密算法-完整性算法-Diffie-Hellman组。建议用aes256-sha256-modp2048。
  • esp参数:格式为加密算法-完整性算法。数据通道无需DH交换,除非需要PFS。
  • 末尾的!:表示仅使用列表中指定的算法,不附加StrongSwan默认的扩展算法集。

四、连接段核心参数

left=你的服务器公网IP               # left端(本地)的IP地址
leftid=@vpn.yourdomain.com          # left端身份标识,@表示精确字符串
leftcert=server-cert.pem            # 服务端证书文件名(位于/etc/ipsec.d/certs/)
leftsubnet=0.0.0.0/0                # left端可访问的子网,0.0.0.0/0表示全流量走VPN
right=%any                          # right端(远程)IP,%any表示接受任意来源
rightsubnet=192.168.1.0/24          # 分配给客户端的虚拟IP池(语义参考,实际由rightsourceip决定)
rightsourceip=192.168.1.0/24        # 分配给客户端的实际IP池
rightauth=eap-mschapv2              # 客户端认证方式:EAP-MSCHAPv2
eap_identity=%any                   # 接受任意EAP标识符
auto=add                            # 启动行为:add=加载不自动连接

第四部分:四套完整方案配置

以下提供四套完整的服务端配置方案,覆盖从个人测试到企业高安全场景。

方案一:IKEv2 + PSK(预共享密钥)

适用场景:个人测试、临时连接,配置最简单。

配置文件:/etc/ipsec.conf

config setup
    charondebug="ike 2, knl 2, cfg 2"
    uniqueids=no

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    authby=secret                        # 认证方式:PSK
    mobike=yes
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!

conn vpn-psk
    left=你的服务器公网IP
    leftid=@你的服务器公网IP
    leftsubnet=0.0.0.0/0
    right=%any
    rightsubnet=192.168.1.0/24
    rightsourceip=192.168.1.0/24
    dpdaction=clear
    dpddelay=30s
    auto=add

认证凭证文件:/etc/ipsec.secrets

你的服务器公网IP : PSK "YourSuperSecretPSK123!"

手机端配置:

  • 类型:IKEv2
  • 服务器地址:服务器IP
  • 认证:预共享密钥(PSK)
  • 密钥:YourSuperSecretPSK123!
  • 用户名/密码:留空

方案二:IKEv2 + RSA证书认证(仅服务端证书)

适用场景:企业级应用,客户端仅需信任服务端证书。

配置文件:/etc/ipsec.conf

config setup
    charondebug="ike 2, knl 2, cfg 2"
    uniqueids=no

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    authby=pubkey                        # 证书认证
    mobike=yes
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!

conn vpn-rsa
    left=你的服务器公网IP
    leftid=@vpn.yourdomain.com           # 必须与证书CN/SAN一致
    leftcert=server-cert.pem             # 服务端证书路径
    leftsubnet=0.0.0.0/0
    right=%any
    rightsubnet=192.168.1.0/24
    rightsourceip=192.168.1.0/24
    rightauth=pubkey                     # 客户端也使用证书认证
    auto=add

认证凭证文件:/etc/ipsec.secrets

: RSA server-key.pem

手机端配置:

  • 类型:IKEv2
  • 服务器地址:vpn.yourdomain.com(必须与证书CN匹配)
  • 认证:证书(RSA)
  • CA证书:需导入并信任ca-cert.pem
  • 客户端证书:如仅服务端证书,客户端无需客户端证书

方案三:IKEv2 + EAP-MSCHAPv2(纯用户名密码认证)

适用场景:多用户场景,管理简单,无需分发证书,但安全性依赖密码强度。

配置文件:/etc/ipsec.conf

config setup
    charondebug="ike 2, knl 2, cfg 2"
    uniqueids=yes                        # 强制同一账户仅允许一个连接

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    mobike=yes
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!

conn vpn-eap-mschap
    left=你的服务器公网IP
    leftid=@vpn.yourdomain.com
    leftsubnet=0.0.0.0/0
    right=%any
    rightsubnet=192.168.1.0/24
    rightsourceip=192.168.1.0/24
    rightauth=eap-mschapv2               # 关键:EAP-MSCHAPv2认证
    eap_identity=%any                    # 接受任意标识
    dpdaction=clear
    dpddelay=30s
    auto=add

认证凭证文件:/etc/ipsec.secrets

# EAP-MSCHAPv2用户账号
alice : EAP "P@ssw0rdAlice2024"
bob   : EAP "Bob#Secure99"

手机端配置:

  • 类型:IKEv2
  • 服务器地址:vpn.yourdomain.com
  • 认证:EAP-MSCHAPv2 或 用户名/密码
  • 用户名:alice / bob
  • 密码:对应的密码
  • CA证书:不需要(因为未使用证书验证服务器身份,存在中间人攻击风险)

安全警告:纯EAP-MSCHAPv2方案没有验证服务器身份,易受中间人攻击。仅适用于内网测试或配合其他安全措施使用。

方案四:IKEv2 + RSA证书 + EAP-MSCHAPv2(双因素认证,最安全)

适用场景:多用户、高安全需求的生产环境,兼具设备认证和用户认证。

配置文件:/etc/ipsec.conf

config setup
    charondebug="ike 2, knl 2, cfg 2"
    uniqueids=yes

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    mobike=yes
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!

conn vpn-cert-mschap
    left=你的服务器公网IP
    leftid=@vpn.yourdomain.com
    leftcert=server-cert.pem             # 服务端证书(用于验证服务器身份)
    leftsubnet=0.0.0.0/0
    right=%any
    rightsubnet=192.168.1.0/24
    rightsourceip=192.168.1.0/24
    rightauth=eap-mschapv2               # 客户端使用EAP-MSCHAPv2(用户名+密码)
    eap_identity=%any
    dpdaction=clear
    dpddelay=30s
    auto=add

认证凭证文件:/etc/ipsec.secrets

: RSA server-key.pem

# EAP-MSCHAPv2用户账号
alice : EAP "P@ssw0rdAlice2024"
bob   : EAP "Bob#Secure99"

手机端配置:

  • 类型:IKEv2
  • 服务器地址:vpn.yourdomain.com
  • 认证:EAP-MSCHAPv2(用户名/密码)
  • 用户名:alice / bob
  • 密码:对应的密码
  • CA证书:必须导入并信任ca-cert.pem(用于验证服务端证书合法性)
  • 客户端证书:不需要(本方案仅服务端证书验证,客户端使用密码认证)

为什么这是最安全的方案?

  • 服务器证书(RSA) :客户端通过验证服务端证书的合法性,确认连接的不是假冒服务器,防止中间人攻击。
  • EAP-MSCHAPv2(用户名+密码) :实现用户级别的身份认证和访问控制。
  • 两者结合形成了双因素认证(设备因素 + 用户因素),即使密码泄露,攻击者也无法连接到假冒服务器;即使CA证书被盗,没有账号密码也无法登录。

第五部分:证书体系完整搭建流程

如果选择方案二或方案四(需要证书),需建立完整的PKI体系。以下是使用StrongSwan自带pki工具的完整流程。

1. 生成根CA证书

cd /etc/ipsec.d/

# 生成CA私钥
sudo ipsec pki --gen --type rsa --size 4096 --outform pem > private/ca-key.pem
sudo chmod 600 private/ca-key.pem

# 生成自签名CA证书(有效期10年)
sudo ipsec pki --self --ca --lifetime 3650 --outform pem \
    --in private/ca-key.pem --type rsa \
    --dn "C=CN, O=MyOrg, CN=VPN Root CA" \
    > cacerts/ca-cert.pem

2. 生成服务端证书

# 生成服务端私钥
sudo ipsec pki --gen --type rsa --size 2048 --outform pem > private/server-key.pem
sudo chmod 600 private/server-key.pem

# 签发服务端证书
sudo ipsec pki --pub --in private/server-key.pem --type rsa | \
    sudo ipsec pki --issue --lifetime 730 --outform pem \
        --cacert cacerts/ca-cert.pem \
        --cakey private/ca-key.pem \
        --dn "C=CN, O=MyOrg, CN=vpn.yourdomain.com" \
        --san vpn.yourdomain.com \
        --flag serverAuth --flag ikeIntermediate \
        > certs/server-cert.pem

3. 验证证书

# 查看证书内容
sudo ipsec pki --print --in certs/server-cert.pem

第六部分:手机端配置指南

iOS(iPhone/iPad)配置步骤

1. 安装CA证书(方案二/四需要)

  • 将ca-cert.pem通过邮件或AirDrop发送到iPhone
  • 打开邮件附件,点击”安装”
  • 进入 设置 > 通用 > VPN与设备管理,点击”安装”并输入锁屏密码
  • 进入 设置 > 通用 > 关于本机 > 证书信任设置,开启CA证书开关

2. 添加VPN配置

  • 打开 设置 > 通用 > VPN与设备管理 > 添加VPN配置
  • 类型:选择 IKEv2
  • 描述:输入任意名称(如”My VPN”)
  • 服务器:输入VPN服务器的IP或域名
  • 远程ID:填写服务器证书的CN(如vpn.yourdomain.com)
  • 本地ID:通常留空(如需证书认证,填写客户端证书的CN)
  • 用户认证:
  • PSK方案:选择 无,在”密钥”处填入PSK
  • RSA证书方案:选择 证书
  • EAP-MSCHAPv2方案:选择 用户名,填写账号密码
  • 代理:关闭
  • 点击 完成,启用VPN开关

Android配置步骤

1. 安装CA证书(方案二/四需要)

  • 将ca-cert.pem通过USB或邮件传输到手机
  • 打开 设置 > 安全 > 加密与凭据 > 从存储设备安装
  • 选择 CA证书 或 VPN与应用,按照提示安装

2. 添加VPN配置

  • 打开 设置 > 网络和互联网 > VPN > 添加VPN
  • 名称:输入任意名称
  • 类型:选择 IKEv2/IPSec PSK 或 IKEv2/IPSec RSA 或 IKEv2/IPSec EAP
  • 服务器地址:输入服务器IP或域名
  • IPSec标识符:PSK方案填写服务器ID
  • IPSec预共享密钥:PSK方案时填写
  • 用户名/密码:EAP-MSCHAPv2方案时填写
  • 点击 保存,点击连接

第七部分:常用运维与排错命令

服务管理(传统部署)

# 启动/停止/重启
sudo systemctl start strongswan-starter
sudo systemctl stop strongswan-starter
sudo systemctl restart strongswan-starter

# 或使用ipsec命令
sudo ipsec start
sudo ipsec stop
sudo ipsec restart

服务管理(Docker部署)

# 启动
docker-compose up -d

# 停止
docker-compose down

# 重启
docker-compose restart

# 查看日志
docker-compose logs -f

状态查看与排错

# 查看所有连接状态
sudo ipsec statusall

# 查看实时日志(传统)
sudo journalctl -u strongswan-starter -f
# 或前台运行
sudo ipsec start --nofork

# 验证配置
sudo ipsec verify

# Docker容器内执行命令
docker exec -it strongswan-eap ipsec statusall
docker exec -it strongswan-eap ipsec verify

常见错误及排查

错误信息含义解决方法
no acceptable proposal加密算法不匹配检查ike=和esp=参数,确保与手机端兼容
authentication failed认证失败检查ipsec.secrets中的PSK/密码是否正确
certificate validation failed证书验证失败检查手机是否信任CA证书,证书CN是否与服务器地址一致
no matching peer config found无匹配连接配置检查leftid和right参数
unable to install policy策略安装失败检查IP转发是否开启,防火墙是否阻塞IPSec流量

方案对比总结

方案安全性配置复杂度用户管理是否验证服务器身份推荐场景
PSK低极简无法区分用户否(共享密钥)个人测试、临时连接
RSA证书高中等需分发证书是企业设备统一管理
EAP-MSCHAPv2中低账号密码管理否内网测试
RSA + EAP-MSCHAPv2极高较高账号密码管理是多用户、高安全需求生产环境

结语

通过本文的系统性梳理,IKEv2/IPSec VPN的协议栈分层(IPSec框架→IKEv2协议→EAP框架→MSCHAPv2认证)已清晰呈现。四种认证方案各有适用场景,从简单的PSK到双因素的RSA+EAP-MSCHAPv2,可根据实际需求灵活选择。

在部署方式上,传统裸机安装适合需要深度定制和调试的场景;Docker容器化部署则具有环境隔离、迁移方便、快速回滚等优势,特别适合生产环境的标准化交付。

在实际部署中,强烈建议生产环境使用方案四(RSA证书 + EAP-MSCHAPv2) ,它兼顾了服务器身份验证和用户级访问控制,是目前最安全的IKEv2认证组合。如果只是个人测试,PSK或纯EAP-MSCHAPv2方案也能快速上手。

作者

老丹

关注我
其他文章
上一个

Linux nsswitch.conf 完全指南:深入 GNU C Library 的名称服务开关实现

下一个

HTTPS证书加密原理完全指南

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • Linux系统的安全基石:深入理解可插拔认证模块(PAM) 2026年7月27日
  • vsftpd 完全指南:从核心原理到Docker容器化部署 2026年7月27日
  • 互联网的”导航”安全卫士:深入解读DNSSEC 2026年7月27日
  • Ubuntu DNS 配置完全指南 2026年7月27日
  • 在 Ubuntu 中使用 Certbot 的操作指南 2026年7月27日

文章分类

  • C/C++开发 (13)
  • Docker容器 (3)
  • Linux工具包 (10)
  • Linux服务配置 (33)
  • Linux系统 (10)
  • OpenWrt路由 (2)
  • Shell脚本 (3)
  • 安防技术 (4)
  • 数据安全 (30)
  • 网络协议 (17)
  • 计算机理论 (22)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号