CentOS 7 使用 Strongswan 配置 IKEv2 VPN

CentOS 8 安装请移步 《CentOS 8 使用 Strongswan IPsec IKEv2 搭梯》

 

本文介绍使用 StrongSwan 搭建 VPN 的过程,适合有一定 linux 基础的用户。

本文使用的服务器

  • 1CPU,1G,  优惠码
  • CentOS 7.5
  • StrongSwan 5.6.3

 

StrongSwan 简介

StrongSwan 是基于 OpenSource IPsec 的 VPN 解决方案,官方网站:https://www.strongswan.org/ ,如果无法访问请使用科学上网,原因你懂的。

StrongSwan 运行于 Linux 系统上,本文使用 CentOS 7 系统。

安装StrongSwan

由于基于源码自行编译安装过于繁琐,这里只介绍使用 yum 的安装方式。

首先,配置 StrongSwan 的源,此软件已包含在 EPEL 源中,关于配置 yum 源,请参考 《CentOS 7 配置 LNMP + FTP 环境》文中的 “添加常用软件源” 部分。

安装 StrongSwan

启用开机启动

申请 ssl 证书

StrongSwan IPsec IKEv2 连接需要用到服务器证书,用于验证服务器身份。由于自签发证书不受操作系统信任,我们需要申请 Let’s Encrypt 免费证书。

申请方式参考《CentOS 7 Nginx Let’ s Encrypt SSL 证书安装配置》, 申请的域名必须是明确的,不能用通配符证书代替。例如,vpn.xxx.com, 申请证书时,必须带上 -d vpn.xxx.com 参数。

配置 StrongSwan

安装证书

假设上一步我们申请的证书保存在 /etc/letsencrypt/live/xxx.com 中,xxx.com 是你申请证书使用的域名。

我们使用创建软连接的方式使用证书

证书安装完成

 

修改 ipsec.conf 主配置文件

删除原有内容,写入已下内容

 

修改 charon.conf, 配置日志输出文件。

日志不是必要项,建议只用在调试配置时使用,配置正常后注释掉 filelog 节部分。

 

修改 ipsec.secrets , 增加 vpn 账户。

添加服务端证书私钥,新建用户账号。

 

开启内核转发

增加下面的内容

重新加载规则

 

配置防火墙

CentOS 7 默认使用 firewalld 防火墙, 有关 firewalld 的介绍请看这里

允许 ‘AH’ 和 ‘ESP’ 身份验证协议和加密协议通过防火墙

开放 ipsec 和相关端口

允许 ip 伪装

然后重新加载防火墙

 

如果 vps 配置较低,内存有限,可以使用 iptables 替换 firewalld 防火墙。

首先禁用 firewalld

然后安装 iptables

配置 iptables

在默认内容基础上,添加几条规则(下面高亮的部分)。

重新加载 iptables 规则

 

启动 StrongSwan 服务

 

配置客户端

windows 10

开始->设置->网络和Internet->vpn->添加vpn连接

添加完成后点击“更改适配器选项”

在vpn连接项点右键,属性->网络

双击 ipv4 ,点击“高级”

勾选“在远程网络上使用默认网关”, 取消“自动跃点”,手动填写跃点数为“10”(当自动跃点无法上网时才设置手动跃点)。如何确定跃点数,请看下面内容。

确定后连接 vpn 即可。

确定跃点数

因为 win10 系统的问题,经常会出现vpn连接能连上,就是打不开网页的情况,这是因为“本地连接”的优先级高于“vpn”的优先级,导致所有的请求优先使用“本地连接”的dns去解析域名,由于我们国家坚持推行使用社会主义特色的dns,所以某些域名解析会返回无效或错误的ip地址,这就导致我们无法正常访问网站!跃点数就是设定优先级用的。

我们需要做的就是让 “vpn 连接” 的跃点数小于 “本地连接” 的跃点数。

断开vpn, 打开 PowerShell 窗口,输入下面命令。

第一列表示当前接口的索引号,第二列是名称,InterfaceMetric 列即接口的跃点,我的本地连接名是 WLAN, 跃点是35。

查看“本地连接”网卡的跃点数为 35,因此上一步中设置的跃点数只要小于35即可(跃点数越小优先级越高),所以我们设置为10。

IOS

“设置->VPN->添加配置”, 选 IKEv2

描述: 随便填
服务器: 填url或ip
远程ID: ipsec.conf 中的 leftid, 如 “xxx.com”
用户鉴定: 用户名
用户名: EAP 项用户名, 如 “user1”
密码: EAP 项密码, 如 “password1”

MAC

原理同 ios, 我没有 mac 做验证。

Android

需下载安装客户端程序,前往官网下载最新版 apk 程序

CentOS 7 使用 Strongswan 配置 IKEv2 VPN》上有34个想法

  1. 你好,我使用自签名ca证书,在win10上导入ca证书可以正常连接没问题,但是换到win8上,导入ca证书连接总是提示13801:ike身份验证凭据不可接受,是什么原因导致呢,谢谢回复。

  2. 您好 我现在win链接访问上网都是正常的,ios手机链接 报错:The VPN server did not respond
    这是手机访问日志 如下:
    May 7 10:37:26 08[NET] received packet: from 223.104.211.191[44937] to 165.227.95.93[500] (604 bytes)
    May 7 10:37:26 08[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
    May 7 10:37:26 08[CFG] looking for an ike config for 165.227.95.93…223.104.211.191
    May 7 10:37:26 08[CFG] candidate: %any…%any, prio 24
    May 7 10:37:26 08[CFG] found matching ike config: %any…%any with prio 24
    May 7 10:37:26 08[IKE] 223.104.211.191 is initiating an IKE_SA
    May 7 10:37:26 08[IKE] IKE_SA (unnamed)[6] state change: CREATED => CONNECTING
    May 7 10:37:26 08[CFG] selecting proposal:
    May 7 10:37:26 08[CFG] proposal matches
    May 7 10:37:26 08[CFG] received proposals: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048, IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256, IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_1536, IKE:AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024, IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
    May 7 10:37:26 08[CFG] configured proposals: IKE:AES_CBC_256/HMAC_SHA2_256_128/HMAC_SHA1_96/PRF_HMAC_SHA2_256/PRF_HMAC_SHA1/MODP_2048/MODP_1024, IKE:3DES_CBC/HMAC_SHA2_256_128/HMAC_SHA1_96/PRF_HMAC_SHA2_256/PRF_HMAC_SHA1/MODP_2048/MODP_1024
    May 7 10:37:26 08[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
    May 7 10:37:26 08[LIB] size of DH secret exponent: 2047 bits
    May 7 10:37:26 08[IKE] remote host is behind NAT
    May 7 10:37:26 08[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(MULT_AUTH) ]
    May 7 10:37:26 08[NET] sending packet: from 165.227.95.93[500] to 223.104.211.191[44937] (448 bytes)
    May 7 10:37:29 07[NET] received packet: from 223.104.211.191[44937] to 165.227.95.93[500] (604 bytes)
    May 7 10:37:29 07[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
    May 7 10:37:29 07[IKE] received retransmit of request with ID 0, retransmitting response
    May 7 10:37:29 07[NET] sending packet: from 165.227.95.93[500] to 223.104.211.191[44937] (448 bytes)
    May 7 10:37:32 09[NET] received packet: from 223.104.211.191[44937] to 165.227.95.93[500] (604 bytes)
    May 7 10:37:32 09[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
    May 7 10:37:32 09[IKE] received retransmit of request with ID 0, retransmitting response
    May 7 10:37:32 09[NET] sending packet: from 165.227.95.93[500] to 223.104.211.191[44937] (448 bytes)
    May 7 10:37:35 10[NET] received packet: from 223.104.211.191[44937] to 165.227.95.93[500] (604 bytes)
    May 7 10:37:35 10[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
    May 7 10:37:35 10[IKE] received retransmit of request with ID 0, retransmitting response
    May 7 10:37:35 10[NET] sending packet: from 165.227.95.93[500] to 223.104.211.191[44937] (448 bytes)

    能麻烦您帮我看看是什么错误吗? 不胜感激 谢谢

  3. [root@centos-s-4vcpu-8gb-nyc3-01 strongswan.d]# vim charon.conf

    # Options for the charon IKE daemon.
    charon {

    filelog {
    charon-debug-log {
    charon-debug-log {
    path = /var/log/charon_debug.log
    time_format = %b %e %T
    default = 2
    mgr = 0
    net = 1
    enc = 1
    asn = 1
    job = 1
    ike_name = yes
    append = no
    flush_line = yes
    }
    }
    }

    # Accept unencrypted ID and HASH payloads in IKEv1 Main Mode.

    您好 请问下我这样配置为什么没有日志呢?

    • 是这样
      filelog {
      charon-debug-log {
      path = /var/log/charon_debug.log
      time_format = %b %e %T
      default = 2
      mgr = 0
      net = 1
      enc = 1
      asn = 1
      job = 1
      ike_name = yes
      append = no
      flush_line = yes
      }
      }

      上面多嵌套了一层 没有日志

  4. 请问下 在win可以正常链接访问,但是在ios链接不上,报错:The VPN server did not respond
    请问这可能是什么原因? 谢谢

    • 直接把防火墙卸载了,开放全端口,链接上之后,还是没有网络啊,设置过内核的ipv4转发了,ipv6目前不支持,就没有设置,还差什么设置才能有网络?

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

验证码