Ubuntu 20.04搭建IPSec IKEv2 VPN服务器与客户端连接完整攻略(一)
Ubuntu 20.04搭建IPSec IKEv2 VPN服务器与客户端连接完整攻略(一)
境内早已禁VPN多年,别说能用的,就是收费的都不多还不稳定。无论是工作或是游戏娱乐需求,那么自建一台是最划算的。随着全球云服务器平台技术的成熟,境外服务器或VPS价格也相对差不太多,我们考虑的是速度,推荐Vultr或Linode的新加坡节点。对于Linux系统我本身也是初哥,网上的资料又很有限(被删帖被禁访),尝试了N种软件,在研究了9个小时后,
用Strongswan成功实现Ubuntu 20.04搭建IPSec IKEv2 VPN服务器,IOS、电脑连接都没问题。
因为IOS10起不支持pptp,现在进入正题吧,一共4步完成搭建。
我用的Ubuntu 20.04,系统基础命令都不太熟,所以其他系统命令的差异,您自行对比吧。
第一步、编译安装Strongswan
1.我曾尝试了N次用命令下载,无法成功,原因不再赘述,所以从别处下载了strongswan5.9.0版,上传到目标服务器(文件也提供给大家,网盘密码woqg)。上传后,执行下面的解压命令与进入其目录下。
tar xzf strongswan.tar.gz
cd strongswan-5.9.0
cd strongswan-5.9.0
2.编译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”。(Xen、KVM、OpenVZ知识自行百度,这个简单有资料)4.安装Strongswan
make; make install
编译完成后如果没有报错,使用ipsec version指令能出现版本信息,则表示安装成功。
二、配置证书(需按顺序执行,私钥与证书有依赖关系存在)
1.生成CA证书的私钥ipsec pki --gen --outform pem > ca.pem
如果ipsec pki 出现类似 unknown IPsec command `pki' (`ipsec --help' for list) 错误,说明系统自带的/sbin/ipsec不支持pki选项,用下面的指令安装下pki,再重新生成CA证书的私钥。
apt-get install strongswan-pki
2.使用私钥,签名CA证书
ipsec pki --self --in ca.pem --dn "C=com, O=myvpn, CN=VPN CA" --ca --outform pem >ca.cert.pem
PS:多个vps使用同个CA根证书方法:如需要多个vps共用一个CA根证书,则以上两步只执行一次,将这个2个文件copy去其他vps执行后面步骤的私钥与证书生成。
最后把多台vps解析到同一域名的不同二级域名下,这样客户端连接各个服务器时,只需安装一次根证书ca.cert.pem即可。
3.生成服务器证书所需的私钥
ipsec pki --gen --outform pem > server.pem
4.用CA证书签发服务器证书
请先确认你的服务器公网IP地址或域名,以后客户端连接时只能使用证书中的地址连接(多服务器使用相同根证书CA的,请先做好服务器的域名解析),然后将下面命令中的120.120.120.120替换为自己服务器的IP地址或域名,一共需要替换两处。
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \ --cakey ca.pem --dn "C=com, O=myvpn, CN=120.120.120.120" \ --san="120.120.120.120" --flag serverAuth --flag ikeIntermediate \ --outform pem > server.cert.pem
注意以上命令中的”C=”和”O=”的值要与第2步CA证书中的C、O的值保持一致。5.生成客户端证书所需的私钥
ipsec pki --gen --outform pem > client.pem
6.用CA签名客户端证书(C、O的值要与上面第2步CA证书的值一致,CN的值随意)
ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=myvpn, CN=VPN Client" --outform pem > client.cert.pem
7.生成pkcs12证书(安卓与电脑连接VPN要安装这个证书)
openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "VPN CA" -out client.cert.p12
注意以上命令中的“-caname”后面的引号里的值必须要与第2步CA证书中的”CN=”的值保持一致。8.安装证书(即复制证书到服务目录下)
cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.pem /usr/local/etc/ipsec.d/private/
cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.pem /usr/local/etc/ipsec.d/private/
三、配置Strongswan
开始前先科普几个指令vim #编辑某文件
vi #查看某文件,按键盘上的insert键进入编辑模式,按Esc键退出编辑模式,再用:q就可以完全退出了
:q #退出
:q! #强制退出
:wq #保存并退出
1.编辑ipsec.conf文件
vim /usr/local/etc/ipsec.conf
修改为以下内容:
config setup
uniqueids=never
conn iOS_cert
keyexchange=ikev2
# strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
leftid=你的服务器IP
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 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
uniqueids=never
conn iOS_cert
keyexchange=ikev2
# strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
leftid=你的服务器IP
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 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
2.编辑strongswan.conf文件
vim /usr/local/etc/strongswan.conf
修改为以下内容:
charon {
load_modular = yes
send_vendor_id = yes
plugins {
include strongswan.d/charon/*.conf
attr {
dns = 8.8.8.8, 8.8.4.4
}
}
}
include strongswan.d/*.conf
load_modular = yes
send_vendor_id = yes
plugins {
include strongswan.d/charon/*.conf
attr {
dns = 8.8.8.8, 8.8.4.4
}
}
}
include strongswan.d/*.conf
3.编辑ipsec.secrets文件
vim /usr/local/etc/ipsec.secrets
配置VPN帐号、密码、密钥
: RSA server.pem
: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
kk : EAP "123"
将上面的myPSKkey单词更改为你需要的PSK认证方式的密钥;: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
kk : EAP "123"
将上面的myXAUTHPass单词更改为你需要的XAUTH认证方式的密码,该认证方式的用户名是随意的;
上面例子中kk为vpn连接的用户名,123为密码(本行自行修改),可以添加多行,格式如此行,一行一个用户与密码,这即是使用IKEv2的用户名+密码认证方式的登录凭据。
PS:写%any %any : EAP "密码",这样的格式是可以使用任意用户名+密码登录的。
四、配置防火墙(需要打开udp的500、1701、4500端口)
1.如果是云服务器,先去平台管理面板配置安全规则,入站规则,开放以上协议端口。2.开放服务器防火墙端口
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 eth0 -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE
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 eth0 -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE
PS:如果VPS有static IP,可将上述防火墙规则的最后3条NAT规则替换为以下3条来提升处理效率,并且将下面需3条规则的ELASTIC_IP替换为vps的静态ip。
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
PS:OpenVZ指令是将以上的eth0替换为venet0iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
3.开机自动载入iptables(执行以下指令)
iptables-save > /etc/iptables.rules
cat > /etc/network/if-up.d/iptables<<EOF
#!/bin/sh
iptables-restore < /etc/iptables.rules
EOF
chmod +x /etc/network/if-up.d/iptables
cat > /etc/network/if-up.d/iptables<<EOF
#!/bin/sh
iptables-restore < /etc/iptables.rules
EOF
chmod +x /etc/network/if-up.d/iptables
4.编辑sysctl.conf文件
vim /etc/sysctl.conf
找到net.ipv4.ip_forward=1这行,将前面的#号去掉,保存退出(否则Ikev2 vpn连接上后将无法访问外网)。OK!至此,IPSec/IKEv2 VPN便搭建好了!现在启用服务就可以啦。
ipsec start
开始去配客户端连接吧!ipsec常用指令:
ipsec start #启动服务
ipsec stop #关闭服务
ipsec restart #重启服务
ipsec reload #重新读取
ipsec status #查看状态
ipsec --help #查看帮助
相关文章:Ubuntu 20.04搭建IPSec IKEv2 VPN服务器与客户端连接完整攻略(二)
免责声明:
本站提供的一切内容信息、软件、教程、影音仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
直接填图片链接地址 或 到免费图床网站上传后,复制粘贴图片链接到这里。