Debian搭建IKEV2服务 on strongSwan --2019

写在前面

Q: 为什么有两篇文章
A: 上一次的文章基本基于民间的搭建教程 有很多地方实际上没搞清楚。本篇的教程大多参考的都是 strongSwan 的官方教程搭建。
因为服务器迁移到了 AWS 上面 迁移的内容只能是数据和配置,所以又重新安装了一遍

官方链接:https://www.strongswan.org/

Q:和上篇文章有什么区别吗
A:技术上没什么变化,版本更新到了最新。strongSwan 到了最新,以及更优雅的配置和去除无关的配置。

strongSwan 5.6.3 -> 5.7.2

请不要参考上篇文章 如果你有问题 可以在下面评论 或许我可以帮助你
上篇文章 : Debian 下配置 ikev2 服务

环境

Debian 9.5
Linux strongSwan U5.7.2/K4.9.0-8-amd64
可信任机构颁发的 SSL 证书 (DV 即可)

使用可信任机构办法的 SSL 证书是为了使用体验 就可以在绝大多数设备上直接使用账号密码登陆验证,无需手动导入证书。

安装 strongSwan

更新 apt 索引

apt update
编译安装

安装编译环境(请确保有以下组件)

apt-get install libpam0g-dev libssl-dev make gcc

下载并解压代码

cd /tmp
# 此处进入到临时目录中 或者其他目录

wget http://download.strongswan.org/strongswan.tar.gz
# 下载源码 

tar -zxf strongswan.tar.gz
# 解压

cd strongswan-*
# 进入strongswan的目录 注意后面是版本号 不要直接复制粘贴

配置编译
Xen,KVM 使用以下参数

./configure  --enable-eap-identity --enable-eap-md5 \
--enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap  \
--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap  \
--enable-xauth-pam  --enable-dhcp  --enable-openssl  --enable-addrblock --enable-unity  \
--enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp

OpenVZ 需额外增加一个 enable-kernel-libipsec

./configure  --enable-eap-identity --enable-eap-md5 \
--enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap  \
--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap  \
--enable-xauth-pam  --enable-dhcp  --enable-openssl  --enable-addrblock --enable-unity  \
--enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp --enable-kernel-lib

大部分的云主机都是采用的 KVM
请根据你的服务商提供的虚拟技术而使用不同的参数

编译和安装

make
make install

验证是否安装成功 (查看版本)

ipsec version

配置文件

SSL 证书可以直接使用颁发给域名的证书(Apache 和 Nginx 的所需证书)
默认安装的配置文件路径是/usr/local/etc/

拷贝证书

strongSwan 寻找证书的路径都在ipsec.d/

/usr/local/etc/ipsec.d

该目录下有几个文件夹 他们有着不同的作用

目录名 作用
private 包含 RSA 和 ECDSA 私钥文件
certs 包含 X.509 或 PGP 端实体证书
crls 包含证书撤销列表
cacerts 包含可信任的 CA 证书
ocspcerts 包含可信任的 OCSP 签名者证书
aacerts 包含可信任的授权授权证书
acerts 包含属性证书
reqs 包含 PKCS#10 证书请求

只需要把相应的证书拷贝进去就好了

修改 ipsec 配置文件

cd /usr/local/etc
vim ipsec.conf
# 默认的配置文件位置

修改成以下内容

# /etc/ipsec.conf - strongSwan IPsec configuration file

config setup  #定义一般的配置参数
       cachecrls=yes
       strictcrlpolicy=yes

ca rootca  ##定义CA证书颁发机构 可以不配 无关紧要
    cacert=1_root_bundle.crt

conn %default  #默认链接配置 其他的conn都会继承该配置
    keyingtries=1
    dpdaction=clear
    left=%any
    leftsubnet=0.0.0.0/0

    right=%any
    rightsourceip=10.0.0.0/24
    rightdns=1.1.1.1


conn ikev2-eap  #使用EAP认证的IKEV2的链接配置
    keyexchange=ikev2
    ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
    esp=aes256-sha256,3des-sha1,aes256-sha1!
    rekey=no
    eap_identity=%any
    fragmentation=yes
    auto=add

    leftauth=pubkey
    leftcert=inmind.ltd.crt  #服务器的公钥证书 默认路径是会从ipsec.d/cert中找
    leftsendcert=always
    leftid=inmind.ltd  #服务器公钥证书的域名(必须匹配)

    rightauth=eap-mschapv2
    rightsendcert=never

可配置参数 (官方)
config setup
ca
conn

配置 ipsec 的账号密码

同目录下

vim ipsec.secrets

配置模板

 : RSA inmind.ltd.key  # 与服务器证书对应的私钥文件 默认路径是会从ipsec.d/private中找
user1 : EAP "1234abcd"    # 用户名 : 验证方式 "密码明文"

私钥必须配置 否链接会认证失败 配置路径如果错了 strongSwan 是不会提示错误的

配置内核转发

在这个阶段 我们是已经可以连接上了,但是还不能通过 VPN 访问外部网络。
打开内核转发

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding=1  #ipv6 可用可不用,需要在conn配置ipv6的转发规则

sysctl -p立即生效

最后

重启 ipsec

ipsec restart

查看当前的链接可以使用ipsec status

tips

IKEV2 使用到的端口:

因为我直接使用了 AWS 的防火墙 就不在 iptables 里配置规则了
只需要开启这两个端口就可以完成链接

协议 端口号
UDP500
UDP4500

windows 链接之后无法访问 google
更改适配器设置 -> 属性 -> 网络 - ipv4 属性 -> 高级 ,勾选“在远程网络上使用默认网关”。

本文链接:https://blog.inmind.ltd/index.php/archives/30/
This blog is under a CC BY-NC-SA 3.0 Unported License

    zhanxian
    zhanxian  2019-06-10, 16:59

    ikev2可靠否?前几天我用ss连着让干了两个ip,恐怕是gfw提高了封禁级别,正在寻找替代品

      shenlan
      shenlan  2019-06-10, 17:03

      我目前的主机是日本的EC2(AWS) ikev2目前都是畅通无阻的。19年初的时候在vultr上搭建过ikev2 也没有封禁过,但是我不知道现在如何了 因为我没有在使用vultr的服务了。

    shenlan
    shenlan  2019-03-25, 22:37

    android端需要ipsec.conf 的ike,eap的默认配置否则无法匹配协议,并且使用strongSwan VPN Client

    meleuo
    meleuo  2019-03-11, 15:21

    博主,你好,我按照你这个文档安装的strongSwan 使用安卓strongSwan 客户端采用IKEv2 EAP用户名+密码的方式无法连接是怎么回事呢??

      shenlan
      shenlan  2019-03-11, 15:26

      安卓端提示什么呢?防火墙有配置好吗?

        meleuo
        meleuo  2019-03-11, 15:32

        请问一下,你这个文档做出来的效果是安卓那边连接vpn可以不用证书对吧

          shenlan
          shenlan  2019-03-13, 15:37

          安卓那边其实没测试过,我是用iOS和windows10测试的,目前来看都没什么问题

        meleuo
        meleuo  2019-03-11, 15:28

        安卓端直接提示的就是无法连接至服务器,服务器是vultr的,证书是在freessl申请的。

          shenlan
          shenlan  2019-03-13, 15:38

          建议在其他设备上测试一下,确定一下大概问题在哪,因为报错很模糊,不是很容易定位问题在哪。