在CentOS7-minimal的OpenVZ上安装Strongswan IKEv2 VPN
安装过程:
(一)下载Strongswan最新版
文件下载到root目录并解压:
cd ~
wget --no-check-certificate https://download.strongswan.org/strongswan-5.5.3.tar.gz
tar -xzvf strongswan-5.5.3.tar.gz
(二)配置并安装Strongswan
2.1 配置
基于OpenVZ的VPS主机需加入--enable-kernal-libipsec的配置项,进入~/strongswan-5.5.3目录,如下执行配置命令:
./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-swanctl --enable-openssl --disable-gmp \
--enable-kernel-libipsec
(如果是KVM之类的主机则省略最后一个配置参数)
2.2 安装
编译安装:
make
make install
安装完毕。
(三)生成证书
3.1 生成证书
回到/root目录,创建keys子目录,把证书放在这里。
注: 下列命令中$VPS_Domain_IP须用VPS的域名或者IP地址替换,且这里填的是什么,在下一步的ipsec.conf文件配置时leftid参数要填相同的内容。
cd ~
mkdir keys
cd keys ipsec pki --gen --outform pem > ca.pem
ipsec pki --self --in ca.pem --dn "C=com, O=MyVPS, CN=VPN CA" --ca --outform pem >ca.cert.pem
ipsec pki --gen --outform pem > server.pem
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \
--cakey ca.pem --dn "C=com, O=MyVPS, CN=$VPS_Domain_IP" \
--san="$VPS_Domain_IP" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
ipsec pki --gen --outform pem > client.pem
ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=MyVPS, CN=VPN Client" --outform pem > client.cert.pem
3.2 放置证书
须把ca.cert.pem、server.cert.pem、server.pem、client.cert.pem、client.pem五个证书文件放置在正确的目录:
cp -f ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
cp -f server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -f client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -f server.pem /usr/local/etc/ipsec.d/private/
cp -f client.pem /usr/local/etc/ipsec.d/private/
(四)配置Strongswan服务器
4.1 修改ipsec.conf
修改/usr/local/etc/ipsec.conf文件(注意leftid=$VPS_Domain_IP要根据3.1步骤里填写的内容修改):
config setup
uniqueids=never
conn iOS_cert
keyexchange=ikev1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightauth2=xauth
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn android_xauth_psk
keyexchange=ikev1
left=%defaultroute
leftauth=psk
leftsubnet=0.0.0.0/0
right=%any
rightauth=psk
rightauth2=xauth
rightsourceip=10.31.2.0/24
auto=add
conn networkmanager-strongswan
keyexchange=ikev2
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn ios_ikev2
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
esp=aes256-sha256,3des-sha1,aes256-sha1!
rekey=no
left=%defaultroute
leftid=$VPS_Domain_IP
leftsendcert=always
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add
conn windows7
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
auto=add
4.2 配置strongswan.conf
修改/usr/local/etc/strongswan.conf如下:
charon {
load_modular = yes
duplicheck.enable = no
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8
dns2 = 8.8.4.4
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf
4.3 修改登录用户名密码文件ipsec.secrets
修改/usr/local/etc/ipsec.secrets文件:
: RSA server.pem
: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
myUserName %any : EAP "myUserPass"
其中,myPSKkey是PSK方式的预共享密码,myUserName是VPN的登录用户名,myUserPass是登录密码,都可以按需修改。
4.5 重启strongswan服务器
ipsec restart
此时Strongswan服务器已经安装配置完毕,客户端下载/root/keys/ca.cert.pem证书并安装信任后,即可连接VPN。
注意: 由于未配置防火墙的端口转发规则,虽然能连上VPN,但仍不能正常访问内外网。
4.6 建立strongswan系统服务
在/etc/systemd/system目录下建立strongswan.service文件:
[Unit]
Description=StrongSwan VPN Server
After=network.target
Wants=network.target
[Service]
Type=forking
ExecStart=/usr/local/sbin/ipsec start
ExecStop=/usr/local/sbin/ipsec stop
ExecReload=/usr/local/sbin/ipsec restart
#KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
使之随系统启动:
systemctl enable strongswan.service
systemctl start strongswan
(五)配置转发规则
5.1 系统IPv4转发
建立/etc/sysctl.d/10-ipsec.conf文件:
net.ipv4.ip_forward=1
使配置生效:
sysctl --system
5.2 配置iptables规则
- CentOS-7-minimal安装了
iptables(小内存VPS不建议使用firewalld防火墙),因此使用iptables添加转发规则:
注:$interface是VPS的网卡接口名(OpenVZ的CentOS一般是venet0,用ip addr查询)
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.0.0/24 -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24 -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24 -j ACCEPT
iptables -A INPUT -i $interface -p esp -j ACCEPT
iptables -A INPUT -i $interface -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i $interface -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i $interface -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i $interface -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i $interface -p tcp --dport 1723 -j ACCEPT
- 如果有固定IP,则添加SNAT规则:
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o \$interface -j SNAT --to-source $static_ip
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o \$interface -j SNAT --to-source $static_ip
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o \$interface -j SNAT --to-source $static_ip
若没有固定IP,则添加以下规则:
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o $interface -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o $interface -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o $interface -j MASQUERADE
5.3 开机恢复iptables规则
- 先导出iptables的规则到
/etc/iptables.rules文件:
iptables-save > /etc/iptables.rules
- 添加恢复iptables规则的命令至系统启动脚本
/etc/rc.local,并激活:
echo "iptables-restore < /etc/iptables.rules" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
至此,strongswan VPN安装配置完毕。