one-key-ikev2-vpn
one-key-ikev2-vpn copied to clipboard
使用centos7搭建IKEV2 VPN并用win10,IOS 11.3,安卓6.0,linux当客户端连接
我研究了3天,终于懂了一点皮毛 我把的配置过程写在下面了 大家可以根据过程一步一步的来做 centos7的版本是1708 安装的minimal版的 安装完毕以后需要关闭selinux,并且关闭firewall
yum install strongswan
mkdir install_ikev2 cd install_ikev2
vps_ip="192.168.11.21" #这个是服务器IP 即客户端连接的时候要填写的,建议使用域名,万一服务器IP被屏蔽了,只需要换个IP,域名重新解析一下就行了 my_cert_c="com" #这3个变量是下面生成证书要用到的 可以自定义 my_cert_o="myvpn" my_cert_cn="VPN CA"
#这几个命令生成的是随机的数据,每次执行生成的结果都不一样 所以一定要保管好这些文件
#生成CA证书的私钥
strongswan pki --gen --outform pem > ca.pem
#使用私钥,签名CA证书
strongswan pki --self --in ca.pem --dn "C=${my_cert_c}, O=${my_cert_o}, CN=${my_cert_cn}" --ca --outform pem >ca.cert.pem
#生成服务器证书的私钥 strongswan pki --gen --outform pem > server.pem #使用私钥 同时用CA证书的私钥和CA证书 签名服务器证书 【时间选填,时间是天数,如果这个参数不要的话,默认就是证书能用的最长时间,好像是5年还是10年】 strongswan pki --pub --in server.pem | strongswan pki --issue 【--lifetime 1200】 --cacert ca.cert.pem --cakey ca.pem --dn "C=${my_cert_c}, O=${my_cert_o}, CN=${vps_ip}" --san="${vps_ip}" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
#生成客户端证书的私钥 strongswan pki --gen --outform pem > client.pem #使用私钥,签名客户端证书 这里C、O的值要跟第一步的一致 strongswan pki --pub --in client.pem | strongswan pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=${my_cert_c}, O=${my_cert_o}, CN=VPN Client" --outform pem > client.cert.pem
#生成供安卓客户端使用的证书(需要安装yum install openssl)(这一步可以不做,安卓可以使用另外一种不用证书的方式登录) openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "${my_cert_cn}" -out client.cert.p12
#把证书复制到strongswan目录下 cp -f ca.cert.pem /etc/strongswan/ipsec.d/cacerts/ cp -f server.cert.pem /etc/strongswan/ipsec.d/certs/ cp -f server.pem /etc/strongswan/ipsec.d/private/ cp -f client.cert.pem /etc/strongswan/ipsec.d/certs/ cp -f client.pem /etc/strongswan/ipsec.d/private/ echo "Cert copy completed"
#配置Strongswan #设备/操作系统使用的 ike 版本 #Linux: 命令行客户端就是 strongswan 本身,因此完美兼容,支持 ikev1/ikev2 和所有加密方法的连接。 #Android: 只支持 ikev1。 #iOS/Mac OS X: IPsec 客户端为自己修改的racoon。它只支持 ikev1 最新的IOS 9 Mac OS X 支持ikev2. #Windows: 只在 Windows 7 以后支持ikev2, XP需要另外的l2tp方式。 WIN10还需要设置一下
#vi /etc/strongswan/ipsec.conf config setup uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线
#所有项目共用的配置项
conn %default keyexchange=ike #ikev1 或 ikev2 都用这个 left=%any #服务器端标识,%any表示任意 leftsubnet=0.0.0.0/0 #服务器端虚拟ip, 0.0.0.0/0表示通配. right=%any
conn IKE-BASE leftca=ca.cert.pem #服务器端 CA 证书 leftcert=server.cert.pem #服务器端证书 rightsourceip=10.31.0.0/24 #分配给客户端的虚拟 ip 段
#供 ios 使用, 使用客户端证书 conn IPSec-IKEv1 also=IKE-BASE keyexchange=ikev1 fragmentation=yes #开启对 iOS 拆包的重组支持 ike=aes256-sha1-modp1024 leftauth=pubkey rightauth=pubkey rightauth2=xauth rightcert=client.cert.pem auto=add
#供 ios 使用, 使用 PSK 预设密钥 conn IPSec-IKEv1-PSK also=IKE-BASE keyexchange=ikev1 fragmentation=yes leftauth=psk rightauth=psk rightauth2=xauth auto=add
#供 android, linux, os x 使用 conn IPSec-IKEv2 also=IKE-BASE keyexchange=ikev2 leftauth=pubkey rightauth=pubkey rightcert=client.cert.pem auto=add
#供 windows 7+ 使用, win7 以下版本需使用第三方 ipsec vpn 客户端连接
conn IPSec-IKEv2-EAP
also=IKE-BASE
keyexchange=ikev2
ike=aes256-sha1-modp1024! #第一阶段加密方式
rekey=no #服务器对 Windows 发出 rekey 请求会断开连接
leftauth=pubkey
rightauth=eap-mschapv2
rightsendcert=never #服务器不要向客户端请求证书
eap_identity=%any
auto=add
conn IKEV2-RSA also=IKE-BASE ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev2 leftfirewall=yes auto=add
#这个是我搭建的教程里面独有的,应该这个才是给ios的 conn ios_ikev2 also=IKE-BASE keyexchange=ikev2 ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048! esp=aes256-sha256,3des-sha1,aes256-sha1! rekey=no #leftid=${vps_ip} #注意这里要根据上面的变量来填 leftid=192.168.11.21 leftsendcert=always leftsubnet=0.0.0.0/0 rightauth=eap-mschapv2 rightsendcert=never eap_identity=%any dpdaction=clear fragmentation=yes auto=add
#说明: #auto=add表示只添加 auto=start表示立刻开始连接,如果是客户端的话用这个
#vi /etc/strongswan/strongswan.conf
strongswan.conf - strongSwan configuration file
Refer to the strongswan.conf(5) manpage for details
Configuration changes should be made in the included files
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 # for Windows only nbns1 = 8.8.8.8 nbns2 = 8.8.4.4 } include strongswan.d/.conf
configure the ipsec.secrets 密码认证文件
#vi /etc/strongswan/ipsec.secrets
: RSA server.pem
: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
myUserName %any : EAP "myUserPass"
wp设备名称\myUserName2 : EAP "myUserPass2" #仅对windowsphone8.1设备,设备名称在设置-关于-手机信息
中查看
#编辑转发,这样重启以后也是自动开启转发的 #vi /etc/sysctl.d/10-ipsec.conf net.ipv4.ip_forward=1
#开启转发 sysctl --system
#防火墙设置,这里针对iptagbles,如果是firewall需要另外设置 interface="eth0" #这个是网卡 iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.31.0.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 iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o $interface -j MASQUERADE
service iptables save
#启动 strongswan start #到这里IKE服务端就搭建好了
#下面是各种客户端的访问方式
#WIN10默认不支持AES-256-CBC和MODP-2048 需要添加注册表 #添加一个DWORD键 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256 键值设置为1 #0 禁用AES-256-CBC和MODP-2048 #1 启用AES-256-CBC和MODP-2048 #2 强制使用AES-256-CBC和MODP-2048 #然后把ca.cert.pem导入到受信任的根证书颁发机构,然后添加IKEV2的VPN就行了
#IOS用户访问的话需要把ca.cert.pem导入到描述文件,然后添加IKEV2的VPN就行了
#安卓用户 这种方式有个缺点,安卓客户端断开连接以后服务端里面查看状态连接没有断开,状态会变为REKEYED然后会在上面配置ikelifetime达到的时间以后消失 #方式IPSec Xauth PSK #IPSec 预共享密钥:写 ipsec.secrets 里 PSK 后面的那个密码 展开高级设置,dns服务器填写8.8.8.8 转发路线填服务端rightsourceip的值例如上面的设置的话这里就填10.31.0.0/24 #安卓用户访问方式2 IPSec Xauth RSA #IPSec用户证书使用上面生成的p12证书,在安卓安全设置里面添加证书就行 IPSec CA证书用上面生成的ca.sert.pem可以不用,不用的话会分配一个ip,但是又ping不通,用了的话不会分配IP,但是vpn是能用的
#linux用户,我用的centos7 #安装strongSwan客户端yum install strongswan #把ca.cert.pem复制到/etc/strongswan/ipsec.d/cacerts/这个目录 #编辑/etc/ipsec.conf,设定名为myikev2的连接: config setup uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线 conn myikev2 keyexchange = ikev2 right = 填服务端那边的$vps_ip变量 rightca = ca.cert.pem rightid = 参考服务端那边的ios_ikev2的leftid rightsubnet = 0.0.0.0/0 left = %any leftsourceip = %config leftauth = eap-mschapv2 eap_identity = client #这个参数必须填client auto = start #编辑/etc/ipsec.secrets,这个文件的内容要和服务端的一模一样 #然后使用命令strongswan start开启连接 连接以后用命令strongswan status查看状态 #这个方法成功的连接上了我香港的服务器的ios_ikev2,但是有个缺点,网络还是走的本地,而且我也不知道要怎么添加默认路由让网络走IKEv2
#到这里就差不多了,写点后记吧 #VPN的作用是连接2个网络,但是IKEV2这种方式我觉得不怎么方便 #最方便的还是PPTP #PPTP就相当于直接在系统里面添加了一块网卡,你可以自由选择数据包怎么走,我感觉这才是VPN应该有的样子 #但是PPTP不安全,完全可以用封包加密的方式加密PPTP的传输,好像L2TP就是这样的,我去研究L2TP了
https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2ClientConfig https://blog.csdn.net/qw623577789/article/details/71054795
https://github.com/quericy/one-key-ikev2-vpn/issues/148 这个是我的反馈https://www.jianshu.com/p/079abb4d9617参考的这个链接 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256 DWORD键值设置为1 立刻生效 0 禁用AES-256-CBC和MODP-2048 1 启用AES-256-CBC和MODP-2048 2 强制使用AES-256-CBC和MODP-2048
https://centos.pkgs.org/7/epel-x86_64/strongswan-5.6.1-2.el7.x86_64.rpm.html #centos的包管理的strongswan的包信息
https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2ClientConfig?spm=a2c4e.11155515.0.0.WgO6BN #strongswan的官方文档,这个应该是安装了strongswan以后当客户端的配置 https://www.strongswan.org/testresults.html #这个是strongswan官方的配置教程,但是没有安装过程
https://blog.csdn.net/puppylpg/article/details/64918562 #这个是一个net2net-psk的组网的教程,里面过程比较详细,有一定参考价值
https://blog.csdn.net/sonflower123/article/details/52832569 #这个是一个IKEV1的教程,提供给安卓的,教程可以不看,但是里面关于strongswan记录日志有一些有用的说明 https://blog.csdn.net/fxismonk/article/details/50826452 #这个教程最详细,但是里面的加密方式优点旧,最新的是2048位了,他关于ios那一段还是1024
http://maskray.me/blog/2015-12-31-strongswan #安卓和linux的安装过程,安卓的过程可能有问题,我估计是服务器加密方式太高级,安卓的连接方式用我自己写的那个教程里面的方法 linux的连接方式一会测试一下
http://network.51cto.com/art/201111/304777.htm IPSec VPN快速入门
这些是我研究过程中看过的一部分我觉得可能有用的教程,大家可以看看
感谢你的教程。初次研究vpn,在centos7上面试用了几个一键部署脚本,都是失败,还不知道问题出在哪里,很是挫败的。。还好有你这个issue。
这个方法成功的连接上了我香港的服务器的ios_ikev2,但是有个缺点,网络还是走的本地,而且我也不知道要怎么添加默认路由让网络走IKEv2
关于这一点 win10 默认开启了split tunneling 不会添加全局路由。解决方法见
(Introduction to strongSwan: Forwarding and Split-Tunneling)[https://wiki.strongswan.org/projects/strongswan/wiki/ForwardingAndSplitTunneling]
看不懂,用你的方法弄完服务器之后呢?电脑和手机怎么办呢?原来配置好的ssr脚本还用不了了。
https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2ClientConfig https://blog.csdn.net/qw623577789/article/details/71054795
#148 这个是我的反馈https://www.jianshu.com/p/079abb4d9617参考的这个链接 HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ Rasman \ Parameters \ NegotiateDH2048_AES256 DWORD键值设置为1立刻变为 0变为AES-256 -CBC和MODP-2048 1 启用AES-256-CBC和MODP-2048 2强制使用AES-256-CBC和MODP-2048
https://centos.pkgs.org/7/epel-x86_64/strongswan-5.6.1-2.el7.x86_64.rpm.html #centos的包管理的strongswan的包信息
https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2ClientConfig?spm=a2c4e.11155515.0.0.WgO6BN #strongswan的官方文档,这个应该是安装了strongswan,当客户端配置为 https:// www。 strongswan.org/testresults.html# 这个是strongswan官方的配置教程,但是没有安装过程
https://blog.csdn.net/puppylpg/article/details/64918562# 这个是一个net2net-psk的组网的教程,里面过程比较详细,有一定参考价值
https://blog.csdn.net/sonflower123/article/details/52832569# 这个是一个IKEV1的教程,提供给安卓的,教程可以不看,但是里面关于strongswan记录日志有一些有用的说明 https:// blog.csdn.net/fxismonk/article/details/50826452# 这个教程最详细,但是里面的加密方式优点旧,最新的是2048位了,他关于ios那一段还是1024
http://maskray.me/blog/2015-12-31-strongswan# 安卓和Linux的安装过程,安卓的过程可能有问题,我估计是服务器加密方式太高级,安卓的连接方式用我自己写的那个教程里面的方法linux的连接方式一会测试一下
http://network.51cto.com/art/201111/304777.htm IPSec VPN快速入门
这些是我研究过程中看过的一部分我觉得可能有用的教程,大家可以看看
你好可以留个联系邮箱嘛,谷歌的就可以,想请教下感谢
@chainofhonor
看起来你的配置更通用一些,但是我对这个东西得配置一窍不通。就现在得脚本和你的配置里面得ipsec.conf
文件,哪个更好一些呢?我改动这个文件的话是不是只需要重启一下IPSec就可以?如果是的话我可以自己尝试一下
# chainofhonor 的 ipsec.conf 配置文件
config setup
uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线
#所有项目共用的配置项
conn %default
keyexchange=ike #ikev1 或 ikev2 都用这个
left=%any #服务器端标识,%any表示任意
leftsubnet=0.0.0.0/0 #服务器端虚拟ip, 0.0.0.0/0表示通配.
right=%any
conn IKE-BASE
leftca=ca.cert.pem #服务器端 CA 证书
leftcert=server.cert.pem #服务器端证书
rightsourceip=10.31.0.0/24 #分配给客户端的虚拟 ip 段
#供 ios 使用, 使用客户端证书
conn IPSec-IKEv1
also=IKE-BASE
keyexchange=ikev1
fragmentation=yes #开启对 iOS 拆包的重组支持
ike=aes256-sha1-modp1024
leftauth=pubkey
rightauth=pubkey
rightauth2=xauth
rightcert=client.cert.pem
auto=add
#供 ios 使用, 使用 PSK 预设密钥
conn IPSec-IKEv1-PSK
also=IKE-BASE
keyexchange=ikev1
fragmentation=yes
leftauth=psk
rightauth=psk
rightauth2=xauth
auto=add
#供 android, linux, os x 使用
conn IPSec-IKEv2
also=IKE-BASE
keyexchange=ikev2
leftauth=pubkey
rightauth=pubkey
rightcert=client.cert.pem
auto=add
#供 windows 7+ 使用, win7 以下版本需使用第三方 ipsec vpn 客户端连接
conn IPSec-IKEv2-EAP
also=IKE-BASE
keyexchange=ikev2
ike=aes256-sha1-modp1024! #第一阶段加密方式
rekey=no #服务器对 Windows 发出 rekey 请求会断开连接
leftauth=pubkey
rightauth=eap-mschapv2
rightsendcert=never #服务器不要向客户端请求证书
eap_identity=%any
auto=add
conn IKEV2-RSA
also=IKE-BASE
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
leftfirewall=yes
auto=add
#这个是我搭建的教程里面独有的,应该这个才是给ios的
conn ios_ikev2
also=IKE-BASE
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
esp=aes256-sha256,3des-sha1,aes256-sha1!
rekey=no
#leftid=${vps_ip} #注意这里要根据上面的变量来填
leftid=192.168.11.21
leftsendcert=always
leftsubnet=0.0.0.0/0
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add
# [quericy](https://github.com/quericy)的配置文件
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_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
竟然还有回复 我都忘记我是什么时候配置的这个了 也用不到了
现在直接用wireguard简单方便
但是wireguard目前不如L2TP稳定,我测试过,云服务器搭建VPN服务,然后家里连接 用L2TP明显比wireguard稳定 但是L2TP我找了很久,没找到linux当客户端的教程,很多教程都没用,我就放弃了,后来就了解到了wireguard 而且L2TP有个问题就是一些云服务器只能同时建立一个连接,我现在买的这台服务器就是这样,我是通过购买按需使用的云服务器搭建测试的时候才发现的,贵的云服务器可以同时连接多个L2TP客户端,而我买的那台160多一年的云服务器就只能连接一个...........
建议大家还是用wireguard吧 真的,配置简单使用方便,而且十分符合网络工程师的思维
我怀疑之前的VPN协议都TM是一帮脑子不正常的天才想出来故意刁难使用者的
补充一下上面稳定性的说法 并不是wireguard不能用了
而是 L2TP ping可以稳定在 比如9ms 然后wiraguard的ping 在9ms-20ms之间跳动,偶尔还能跳到30ms 不过不会断
我猜测可能是运营商对wireguard协议是当作普通UDP来看的,有QOS 而L2TP估计由于历史原因被特殊对待了 所以延迟才难么稳定
不过L2TP网络上的教程太少了,很多都不能用,至少我在rockylinux8的mimimal安装版上研究了几天没有成功的安装上L2TP客户端 目前我用一台windows server 2016虚拟机当L2TP客户端 然后进行端口转发 稳定性还行
其实完全可以用wireguard代替,不过考虑到我已经成功的搭建了L2TP,并且很稳定,我就没动了 未来如果有更多的需求而L2TP不能满足的时候或者L2TP也被QOS的时候我就会采用wiregurad了
至于新人,建议直接wireguard吧
好的谢谢,如果有时间我去学习一下wireguard。目前这个strongswan搭建好了,现在设备普遍都是IKEv2,然后不知道怎么着就找到了这个一键配置的脚本。试了ubunt12/20/22。然后只有20可以一键配置。目前的话是可以满足我的需求了。你说的这个wireguard可以配置IKEv2吗?