在OpenVZ的VPS上安装CentOS-7-minimal镜像,默认没有安装对于VPS来说消耗资源巨大的firewalld防火墙,安装的是我们熟悉的iptables,但没有激活任何规则。因此,网上流行的一键脚本(one-key-ikev2.sh)在OpenVZ+CentOS7minimal下无法正常工作(能连通VPN但是不能访问内外网资源)。
其实手动安装strongswan服务器并配置IKEv2 VPN也并不复杂,五步就能搞掂!
(一)下载Strongswan最新版
文件下载到root目录并解压:
cd ~
wget --no-check-certificate https://download.strongswan.org/strongswan-5.6.2.tar.gz
tar -xzvf strongswan-5.6.2.tar.gz
(二)配置并安装Strongswan
2.1 配置
基于OpenVZ的VPS主机需加入--enable-kernal-libipsec
的配置项,进入~/strongswan-5.6.2
目录,如下执行配置命令:
./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
安装完毕。
这样编译安装默认的安装位置是/usr/local,因此程序会在/usr/local/sbin,而配置项则在/usr/local/etc之下。
(三)生成证书
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
文件(<u>注意leftid=$VPS_Domain_IP
要根据3.1步骤里填写的内容修改</u>):
config setup uniqueids=no 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
添加转发规则:
注:<u>$interface是VPS的网卡接口名(OpenVZ的CentOS一般是venet0,KVM的则一般是eth0用ip addr
查询)</u>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<u>如果有固定IP</u>,则添加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<u>若没有固定IP</u>,则添加以下规则:
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规则
OpenVZ的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
KVM的iptables
很简单:
service iptables save
至此,strongswan VPN安装配置完毕。
(六)客户端设置
6.1 Windows 10的VPN连接设置
由于Windows 10的Agile VPN客户端默认只支持AES-128-CBC, AES-192-CBC, AES-256-CBC, 3DES, SHA-1,SHA-256, SHA-384 and MODP-1024加密协议,而strongSwan 5.6.0版本以后已经不接受MODP-1024协议(需要MODP-2048或以上的加密协议)了,因此即使在服务器的ipsec.conf文件中配置MODP-1024的DH组服务器也不会生效,这会由于没有支持的协议导致匹配不到合适的SA策略而造成连接失败。解决办法是要么将服务器退回5.5.3或更低的版本,要么调整Windows的设置让客户端支持MODP-2048的协议。
Windows 10是支持MODP-2048协议的,但是微软很奇葩地默认禁用了AES-256-CBS和MODP-2048,打开这两个协议需要在注册表中建立以下的DWORD键(用注册表编辑器regedit.exe
,你懂的):HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256
键值0、1、2分别代表:
键值 | 含义 |
---|---|
0 (默认) | 禁用AES-256-CBC和MODP-2048 |
1 | 启用AES-256-CBC和MODP-2048 |
2 | 强制使用AES-256-CBC和MODP-2048 |
折腾完注册表之后,Windows就可以正常和服务器建立IKEv2/IPSec的VPN连接了。
后记
strongSwan在5.2.0版本开始,引入了charon-systemd模式,目的是使用swanctl
后台取代ipsec
、starter
和stroke
后台。charon-systemd模式使用strongswan-swanctl.service
服务来管理strongSwan服务器。在编译时加入--enable-systemd --enable-swanctl
参数开启charon-systemd模式:
./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 --enable-xauth-noauth --enable-systemd --enable-swanctl
** 注:**
编译charon-systemd模式需要用到systemd-daemon的库文件,因此需要安装systemd-devel包(执行yum install systemd-devel
)。
--enable-xauth-noauth 开启xauth-noauth模式,它是个假的XAUTH认证,任何用户名和密码都能登陆。给没有XAUTH的设备用。
--enable-kernel-libipsec 使用strongSwan自带的用户IPSec空间需要使用内核libipsec库,因此编译时需加上。
systemd-daemon的模式使用swanctl.conf来配置服务器,跟ipsec.conf不一样,鄙人还没有空研究,反正ipsec starter还没有淘汰,暂时先凑合用吧。等有需求(比如说需要用strongMan图形化管理strongswan服务器的时候)或者迫不得已时(因为strongswan官方已经说starter方式已经停止开发了)再说吧。又或者哪天闲得蛋疼再去看看文档试一下。(^_?)?☆
作者:Wilson_Li
链接:https://www.jianshu.com/p/079abb4d9617
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
本文链接:https://www.kinber.cn/post/542.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: