写在前面

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访问外部网络。
打开内核转发
路径:/etc/sysctl.conf

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

sysctl -p立即生效

配置iptables转发

真正的转发数据…

iptables -A FORWARD -s 10.0.0.0/24  -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

注意上面的eth0 是你的网卡,有些主机可能不是这个名字,通过ifconfigip addr 这两个命令查看

最后

重启ipsec

ipsec restart

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

tips

IKEV2使用到的端口:

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

协议 端口号
UDP 500
UDP 4500

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