简介
IKEv2,是一款全新的IPSec VPN协议,相较之前的版本,支持终端在不同的网络之间切换,连接也更加稳定可靠。目前主流操作系统,包括Windows 7及以后的版本,MAC OS, iOS等,都已经预装的官方的VPN客户端。
本文介绍如何在CentOS 7服务器上安装配置Strongswan VPN服务器软件。
安装StrongSwan
Strongswan是一款开源的IPSec软件,我们用它来配置我们的VPN服务器。在终端里执行以下命令,安装Strongswan套件。
sudo yum -y install epel-release sudo yum install -y strongswan
自签发证书
拨入VPN服务器需要使用证书来认证。我们可以使用Strongswan自带的PKI工具来生成CA证书,服务器证书及密钥。所有这些证书文件都保存在 /etc/strongswan/ipsec.d/目录下。
第一步是生成CA密钥。
sudo strongswan pki --gen --type rsa --size 4096 --outform pem > \ /etc/strongswan/ipsec.d/private/ca-key.pem
接下来使用CA密钥生成CA证书,下面命令行中“VPN root CA”是签发机构名称,可以替换成任何字符串。
sudo strongswan pki --ca --lifetime 3650 \ --in /etc/strongswan/ipsec.d/private/ca-key.pem \ --type rsa --dn "CN=VPN root CA" --outform pem > \ /etc/strongswan/ipsec.d/cacerts/ca-cert.cer
同样的方式,我们再生成服务器密钥。
sudo strongswan pki --gen --type rsa --size 4096 --outform pem > \ /etc/strongswan/ipsec.d/private/server-key.pem
然后用刚才生成的服务器密钥,CA密钥和证书,签发服务器证书。你需要替换下面段落中服务器的域名。
sudo strongswan pki --pub --type rsa \ --in /etc/strongswan/ipsec.d/private/server-key.pem \ | sudo strongswan pki --issue --lifetime 3600 \ --cacert /etc/strongswan/ipsec.d/cacerts/ca-cert.cer \ --cakey /etc/strongswan/ipsec.d/private/ca-key.pem \ --dn "CN=vpn.mydomain.com" --san vpn.mydomain.com \ --flag serverAuth --flag ikeIntermediate --outform pem \ > /etc/strongswan/ipsec.d/certs/server-cert.cer
配置VPN服务器
Strongswan有两个文件,一个是配置文件/etc/strongswan/ipsec.conf, 另一个是密钥文件 /etc/strongswan/ipsec.secrets。使用你熟悉的编辑器对这些文件直接修改。
# ipsec.conf - strongSwan IPsec configuration file # basic configuration config setup charondebug="ike 1, knl 1, cfg 1" uniqueids=no conn %default left=%any # Windows requires aes256-sha1-modp1024 to be placed in the 1st position # these lines end without '!' to append default crypto suites automatically ike=aes256-sha1-modp1024 esp=aes256-sha1 compress=no type=tunnel fragmentation=yes forceencaps=yes dpddelay=300s dpdtimeout=30s dpdaction=restart forceencaps=yes ikelifetime=4h lifetime=2h conn ras-winlinux eap_identity=%identity auto=add rekey=no dpdaction=clear leftid=%any leftcert=server-cert.cer leftsendcert=always leftsubnet=0.0.0.0/0 right=%any rightid=%any rightauth=eap-mschapv2 rightsourceip=10.255.255.1/24 rightdns=8.8.8.8,8.8.4.4 rightsendcert=never conn ras-apple also=ras-winlinux [email protected]
- ike, esp: 这两个参数是设置密码算法的,由于Windows的bug原因,必须把上述范例里的这两个算法放在最前面。
- leftsubnet: IKEv2支持split tunnel,也就是本地流量走本地,远端流量走服务器。如果要让所有互联网流量走服务器,就要配置为0.0.0.0/0,否则配置为远端目标网段,例如192.168.100.0/24。
- rightsourceip,VPN客户端动态分配的地址池。
- rightdns,VPN客户端使用的DNS服务器地址,只在leftsubnet为0.0.0.0/0才有意义。
- leftid,对应苹果客户端要求设置的remote id,一般都配置为服务器的域名,也可以是任何字符串。
# ipsec.secrets - strongSwan IPsec secrets file # roadwarrior user accounts : RSA server-key.pem user1 : EAP "userpassword1"
配置防火墙
我们需要配置防火墙策略实现以下目的:
- 允许IPSec相关流量进入;
- 允许转发客户端流量,并对客户端IP进行地址转换;
- 对TCP包设置最大包大小,避免大包碎片化造成性能下降;
首先修改/etc/sysctl.conf,允许转发。
sudo echo "# VPN forwarding setup net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf sudo sysctl -p
接下来设置防火墙策略,允许IPSec流量进入。
sudo firewall-cmd --zone=public --add-service=ipsec sudo firewall-cmd --zone=public --add-port=4500/udp
设置出口地址转换,让远端客户端可以使用服务器IP访问相关资源。
sudo firewall-cmd --zone=public --add-masquerade
增加一条防火墙策略,允许转发客户端流量,注意下面的网段需要和ipsec.conf里的设置一致。
sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -s 10.255.255.0/24 -j ACCEPT
设置TCP MSS(最大报文段长度),避免过多的碎片包影响性能。一般我们可以设置TCP大小在360字节左右,如果再考虑某些使用GRE隧道的情况,建议设置在1300字节更保险。
sudo firewall-cmd --direct --add-passthrough ipv4 -t mangle \ -I FORWARD -p tcp --syn -j TCPMSS --set-mss 1300
最后,将新配置的策略永久保存,下次重启时firewalld会自动装载。
sudo firewall-cmd --runtime-to-permanent
测试
接下来我们开始测试,先启用StrongSwan服务。
sudo systemctl enable strongswan sudo systemctl start strongswan
查看证书是否正确装载。
sudo strongswan listcerts
显示所有连接状态。
sudo strongswan statusall
如果无法正常建立连接,日志是一个非常有用的工具。
sudo tail -f -n 200 /var/log/messages