Centos7 使用strongSwan搭建IKEv2
· 技术积累 · Centos7 IKEv2

使用Centos7系统,yum安装strongSwan5.7版本的方式配置IKEv2 VPN,依旧使用iptables做转发(IKEv2和L2TP/IPsec不能共存,因为ipsec的端口存在冲突,使用其中一个需要停止另外一个) ,此文章仅供参考 我也没玩熟

参考文档:
在 CentOS 7 中使用 strongSwan 搭建 IKEv2 VPN
Building IKEv1 and IKEv2 on CentOS 7
CentOS 7 配置 IPSec-IKEv2 VPN, 适用于 ios, mac os, windows, linux.
在-Centos-7-上搭建-strongSwan-VPN-IKEv2-整合-FreeRadius-用户认证系统
配置 IPsec/L2TP 客户端

基础安装

yum -y install epel-release
yum -y install strongswan iptables-services

# 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

# 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

创建证书过程中的参数说明

--ca        创建ca
--lifetime  证书有效期,默认天
--type      类型
--size      长度
--dn        提取 X.509 证书的主题 DN
--gen       生成一个新的私钥
--issue     使用 CA 证书和密钥颁发证书
--pub       从私钥/证书中提取公钥
--self      创建自签名证书

#######
--cakey     CA的秘钥     
--cacert    CA的证书
--san       包含在证书中ubjectAltName的扩展
--flag      添加extendedKeyUsage标志
--outform   生成的证书编码

使用strongswan创需要的证书文件(文件名自己定义就好)

# 先创建一个临时目录,放证书文件
mkdir cert && cd cert

# 创建ca秘钥
strongswan pki --gen --type rsa --size 4096 --outform pem > ca.ql-key.pem

# 创建ca证书("C=,O=,CN=",这里面内容自定义就好)
strongswan pki --self --ca --lifetime 3650 --in ca.ql-key.pem --type rsa --dn "C=CN,O=JC,CN=QL server" --outform pem > ca.ql.cer

# 创建服务端秘钥
strongswan pki --gen --type rsa --size 4096 --outform pem > server.ql-key.pem

# 创建服务端公钥
strongswan pki --pub --in server.ql-key.pem --outform pem > server.ql-pub.pem

# 创建服务端证书(注意:这里--dn参数内容要和上面的对应,--san 要修改为你的服务器域名或者公网ip,我这里使用域名)
strongswan pki --pub --in server.ql-key.pem | strongswan pki \
--issue \
--lifetime 3650 \
--cakey ca.ql-key.pem \
--cacert ca.ql.cer \
--dn "C=CN,O=JC,CN=QL server" \
--san="xxx.com" \
--flag serverAuth \
--flag ikeIntermediate \
--outform pem > server.ql-cert.pem

复制生成的证书文件到对应的目录中

cp ca.ql.cer /etc/strongswan/ipsec.d/cacerts/
cp ca.ql-key.pem /etc/strongswan/ipsec.d/private/
cp server.ql-key.pem /etc/strongswan/ipsec.d/private/
cp server.ql-cert.pem /etc/strongswan/ipsec.d/certs/
cp server.ql-pub.pem /etc/strongswan/ipsec.d/certs/

修改配置/etc/strongswan/ipsec.conf文件,经测试win10和ios系统都可以正常连接使用

配置中的文件名要和你创建的一致
协商协议可自定义
分配的客户端的虚拟ip网段可以自定义
dns看情况自定义)

config setup
    # 是否严格执行证书吊销规则
    #strictcrlpolicy=yes

    # 如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知;never 同 no,但不发送通知。
    uniqueids = no

######################
#    公用配置        #
######################
conn %default
    # 是否启动压缩
    compress = yes
    
    # 数据传输协议加密算法列表,对于IKEv2,可以在包含相同类型的多个算法(这个我复制别人的)
    ike = aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!

    # 断开连接的操作,hold表示保持到重连直到超时,clear表示清除
    dpdaction = clear
    
    # 断开后重新连接时长
    dpddelay = 30s
    
    # 断开连接后超时时长,只对IKEv1有用
    dpdtimeout = 60s
    
    # 空闲时长,吵过后断开连接
    inactivity = 300s
    
    # 指定服务端与客户端的 DNS,多个用“,”分隔(看你服务器在哪,dns就修改为对应的)
    leftdns = 114.114.114.114,8.8.8.8
    rightdns = 114.114.114.114,8.8.8.8

    # 你服务端ip
    left = %any

    # 客户端ip
    right = %any


conn IKE-BASE
    # 服务器端根证书DN名称
    leftca = "C=CN, O=JC, CN=QL server"
    
    # 是否发送服务器证书到客户端
    leftsendcert = always
    
    # 客户端不发送证书
    rightsendcert = never

    # 服务器端证书
    leftcert = server.ql-cert.pem

    # 客户端分配的虚拟IP地址段
    rightsourceip=192.168.88.0/24

###########################################################
#    win10可用 | 苹果手机使用IKEv2模式(需要手机上安装证书)    #
###########################################################
conn IKEv2
    also = IKE-BASE

    # 密钥交换协议加密算法列表,可以包括多个算法和协议
    esp = aes256-sha256,3des-sha1,aes256-sha1!

    # 使用ikev2
    keyexchange = ikev2

    # 服务端ip,可以是%any,表示从本地ip中取
    left = %any

    # 服务器端虚拟ip子网,0.0.0.0/0表示通配
    leftsubnet = 0.0.0.0/0

    # 客户端ip,%any表示任意
    right = %any
    
    # 服务端校验方式,使用证书
    leftauth=pubkey
    
    # 客户端认证使用 EAP 扩展认证, EAP(Username/Password)
    rightauth=eap-mschapv2
    
    # 服务端ID (和上面创建服务端证书时一致(--san指定的内容),这里使用域名)
    leftid = xxx.com
    
    # 客户端 id,任意
    rightid = %any
    
    # 不自动重置密钥
    rekey = no
    
    # 指定客户端eap id
    eap_identity = %any
    
    # 当服务启动时, 应该如何处理这个连接项,add 添加到连接表中
    auto = add
    
    # 开启 IKE 消息分片
    fragmentation=yes


#############################################
#    Android ipsec xuauth psk | IOS ipsec   #
#############################################
conn IPSec-IKEv1-PSK
    also=IKE-BASE
    esp=aes256-sha256_96,3des-sha1,aes256-sha1!
    keyexchange=ikev1
    fragmentation=yes
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
    auto=add

修改/etc/strongswan/ipsec.secrets配置文件,配置认证秘钥和用户密码(这个配置我看别人的)

# ipsec.secrets - strongSwan IPsec secrets file
# 使用证书验证时的服务器端私钥
: RSA server.ql-key.pem

# 预设psk秘钥
: PSK "jc"

# XAUTH 方式, 只适用于 IKEv1
jc : XAUTH "1111"

# EAP 方式,用户和密码
jc : EAP "123456"

开启内核转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

配置iptables转发(连接后可以上网),云服务器记得安全组要放开相关的协议端口

# 放开upd 500,4500端口,和转发流量 (注意网段和上面配置文件中要一样,还有网卡名称,非eth0的改为你自己主机的网卡名称)
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A FORWARD -s 192.168.88.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o eth0 -j MASQUERADE

# 保存重启
service save iptables
systemctl restart iptables

启动strongswan服务

# 启动(如果参数配置有误,这里有提示的)
strongswan start

# 停止
strongswan stop

# 重启
strongswan restart

# 查看状态
strongswan status

使用安卓连接,使用ipsec xauth psk 方式

我手机自带的ikev2有bug用不了,只能用这个ipsec方式测试;而且还遇到 Android 设备有 MTU/MSS 问题,表现为使用 IPsec/XAuth ("Cisco IPsec") 模式可以连接到 VPN 但是无法打开网站。需要在服务器上加上iptables规则才能解决

# 解决安卓使用ipsec/xauth 方式连接后上不了网(这是看到别人的解决办法,经测试确实可以解决)
iptables -t mangle -A FORWARD -m policy --pol ipsec --dir in -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
iptables -t mangle -A FORWARD -m policy --pol ipsec --dir out -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360

# 该文件表示在全局范围内关闭路径MTU探测功能
echo "net.ipv4.ip_no_pmtu_disc = 1">> /etc/sysctl.conf
sysctl -p

Centos7 使用strongSwan搭建IKEv2

使用win10系统连接

需要先把ca证书(ca.ql.cer证书文件)下载下来,安装到系统里面

Centos7 使用strongSwan搭建IKEv2
Centos7 使用strongSwan搭建IKEv2
Centos7 使用strongSwan搭建IKEv2
Centos7 使用strongSwan搭建IKEv2
Centos7 使用strongSwan搭建IKEv2

新建一个vpn连接,选择IKEv2,写上用户和密码

Centos7 使用strongSwan搭建IKEv2

有个注意的地方,下面图中的红框文字的说明

Centos7 使用strongSwan搭建IKEv2

连接到服务器成功,查看出口ip(如果看到ip还是本地默认的,说明上图中的那个没勾选,勾选后看到的就是vpn的网络地址了)

Centos7 使用strongSwan搭建IKEv2


因为手机问题,没有做安卓ikev2测试,待验证

本文最后更新时间 2023-07-31
文章链接地址:
https://me.jinchuang.org/archives/1249.html
本站文章除注明[转载|引用],均为本站原创内容,转载前请注明出处

留言列表

  1. aaababab
    aaababab Windows 7 Firefox · 中国广西贵港市移动 · 回复

    Feb 18 00:34:32 test3 pluto[25291]: packet from 1.2.3.4:29684: initial parent SA message received on 10.0.0.60:500 but no suitable connection found with IKEv2 policy
    Feb 18 00:34:32 test3 pluto[25291]: packet from 1.2.3.4:29684: responding to SA_INIT message (ID 0) from 1.2.3.4:29684 with unencrypted notification NO_PROPOSAL_CHOSEN

    iphone手机装了证书后,还是连不上,服务器有这日志,大佬能帮看下?

    1. Jin
      Jin Windows 10 Google Chrome · 中国河南省驻马店市移动 · 回复

      看错误,应该是手机上使用的认证协议和服务端配置文件中认证协议没有匹配上,我这文章当时用的6s ios14版本测试的,其他的苹果没得测试,你这个网上对应的苹果手机连接配置参数,调整下配置文件参数再试试

  2. 码农
    码农 Windows 10 Google Chrome · 中国广东省珠海市电信 · 回复

    你好,按照你教程可以连接到vpn,但是无法上网,怎么处理呢?windowns

    1. Lazy
      Lazy Windows 10 Google Chrome · 中国上海市宝山区电信 · 回复

      不能上网的话,大概率是转发的问题,如果是复制我的命令,要看下网卡名称是否一致

  3. 六角梅
    六角梅 Windows 10 Microsoft Edge · 中国安徽省六安市电信 · 回复

    兄弟,我之前就是按照你写的方法成功部署了 L2TP/IPSec 的服务。手机是安卓的,更新到安卓 12 之后就没有 L2TP 类型的 VPN 了,就想着部署一个 IKEv2 版本的。使用你这个教程,PSK 方式手机连不上,还有一个 IPSec 标识符必须要设置,不知道该填什么。
    我 Win10 电脑可以连接上,也配置了路由转发,却 PING 不通 114.114.114.114。

    1. J.C
      J.C Windows 10 Google Chrome · 中国安徽省合肥市联通 · 回复

      我这测试win10是好的没问题,我没升安卓12,但是安卓的连接配置好像有问题,ios的是正常可以用,你可以先用openvpn

留言