从零开始的VPS生活 Vol2-2:科学上网——利用Let`s Encrypt证书搭建IKEv2/IPSec VPN
有着“虚拟专用网”这个名头的VPN已经很少被用于科学上网了,因为它有点小题大作的意味。而且因为其数据包的标识非常明显,也容易被ban。本文仅提供一个方案,让IKEv2方式的VPN能够运行起来,使用方面还请自行斟酌。
这种类型的企业VPN,麻烦就麻烦在要用证书,自行签发的证书安装到设备上之后一直会有风险提示非常讨厌。因此,这里就要用Let`s Encrypt的HTTPS证书做一个免安装证书的VPN。
没有域名的同学请跳过本篇。
首先,yum安装strongswan。
yum install strongswan
其次用lnmp一键安装包(1.5以上版本)或者acme.sh申请一个子域名的https证书。
执行以下命令,将证书连接进strongswan的配置文件:
# 假设域名为test.noobear.com
# 使用原版acme.sh的情况
acme.sh --deploy -d "test.noobear.com" --deploy-hook "strongswan"
# 使用lnmp一键安装包内置的acme.sh的情况
"/usr/local/acme.sh"/acme.sh --deploy --home "/usr/local/acme.sh" -d "test.noobear.com" --deploy-hook "strongswan"
在使用acme.sh部署一次之后,部署的过程会被记录下来,之后的acme.sh –cron在更新证书后就会自动把证书部署到strongswan了。当然,不放心的话重新执行部署语句也是可以的。
随后修改/etc/strongswan/ipsec.conf,整个粘进去就可以了,记住修改域名为自己的域名:
config setup
uniqueids=never
conn %default
dpdaction=clear
dpddelay=30s
dpdtimeout=60s
left=%defaultroute
leftsubnet=0.0.0.0/0
leftcert=test.noobear.com.cer
rekey=no
right=%any
rightsourceip=10.1.1.0/24
rightdns=8.8.8.8
conn IPsecIKEv2-EAP
keyexchange=ikev2
ike=aes128-sha256-ecp256,aes256-sha384-ecp384,aes128-sha256-modp2048,aes128-sha1-modp2048,aes256-sha384-modp4096,aes256-sha256-modp4096,aes256-sha1-modp4096,aes128-sha256-modp1536,aes128-sha1-modp1536,aes256-sha384-modp2048,aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha384-modp1536,aes256-sha256-modp1536,aes256-sha1-modp1536,aes256-sha384-modp1024,aes256-sha256-modp1024,aes256-sha1-modp1024!
esp=aes128gcm16-ecp256,aes256gcm16-ecp384,aes128-sha256-ecp256,aes256-sha384-ecp384,aes128-sha256-modp2048,aes128-sha1-modp2048,aes256-sha384-modp4096,aes256-sha256-modp4096,aes256-sha1-modp4096,aes128-sha256-modp1536,aes128-sha1-modp1536,aes256-sha384-modp2048,aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha384-modp1536,aes256-sha256-modp1536,aes256-sha1-modp1536,aes256-sha384-modp1024,aes256-sha256-modp1024,aes256-sha1-modp1024,aes128gcm16,aes256gcm16,aes128-sha256,aes128-sha1,aes256-sha384,aes256-sha256,aes256-sha1!
eap_identity=%any
fragmentation=yes
leftsendcert=always
leftid=test.noobear.com
leftauth=pubkey
rightauth=eap-mschapv2
rightsendcert=never
auto=add
本来这里是有IKEv1-IPsec的设置的,但是因为日志中出现了大量的错误链接日志,怀疑有人对网段中这种协议进行批量扫描和破解,为了安全起见,这里仅保留IKEv2的相关设置。同时,强烈不建议使用这种方式进行科学上网。
如果想通过vpn访问IPv6网络,可以在rightip中为vpn划分一个子网,这样就能通过vpn实现IPv6链接了。
# 前面4段IP地址替换成自己的/64地址,后面可以自行选择子网的IP,如果你不懂IPv6子网划分的话,照抄也可以
rightsourceip=10.6.6.0/24,2001:19f0:aaaa:aaaa:1:1::/96
# 如果需要的话,加上IPv6 DNS也是可以的,下面是Google IPv6 DNS
rightdns=8.8.8.8,2001:4860:4860::8888
修改/etc/strongswan/strongswan.conf:
charon {
load_modular = yes
plugins {
include strongswan.d/charon/*.conf
}
duplicheck {
enable = no
}
compress = yes
dns1 = 8.8.8.8
dns2 = 8.8.4.4
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf
修改/etc/strongswan/ipsec.secrets,可以自行更改密码,用户名均忽略,连接时随便编一个即可:
: RSA test.noobear.com.key
%any %any : EAP "password_eap"
这样,可以做到兼容Android,iOS,Windows和Mac设备。忽略用户名也是兼容性的考虑。
最后开放防火墙的转发和对应端口
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --add-service=ipsec
firewall-cmd --reload
以上面的配置距离,配置设备如下:
iOS选择IKEv2,安卓Strongswan APP:
Server:test.noobear.com
Remote ID:test.noobear.com
Username:随便输
Password:password_eap
Windows选择IKEv2:
服务器名称或地址:test.noobear.com
用户名:随便输
密码:password_eap
注意:Windows要在“适配器选项”-“你的VPN名字”-“属性”-“网络”-“Internet 协议版本4”-“高级”里选中“在远程网络上使用默认网关”,才能正常访问网络。