一键搭建IKEV2 VPN

使用bash脚本一键搭建Ikev2的vpn服务器端.

【特性】

服务器要求:Ubuntu或者CentOS-6/7或者Debian

客户端要求:

iOS/OSX=>ikev1,ikev2

Andriod=>ikev1

WindowsPhone=>ikev2

其他Windows平台=>ikev2

可使用自己的私钥和根证书,也可自动生成

证书可绑定域名或ip

要是图方便可一路回车

 

【服务器端安装说明】

1.下载脚本

wget –no-check-certificate https://raw.githubusercontent.com/quericy/one-key-ikev2-vpn/master/one-key-ikev2.sh

2.运行脚本

进入到下载文件的当前目录执行以下命令:

chmod +x one-key-ikev2.sh

bash one-key-ikev2.sh

等待自动配置部分内容后,选择vps类型(OpenVZ还是Xen、KVM),注意,选错将无法成功连接请务必核实服务器的类型

核实服务器类型方法

第一种方法:

ls /proc/

进入/proc 目录后查看,一般Xen的VPS,/proc目录下面会有xen的目录,openvz的会有vz目录。

第二种方法:

使用专门的软件

virt-what ,virt-what是一个判断当前环境所使用的虚拟技术的脚本,常见的虚拟技术基本上都能正常识

可以执行如下命令安装(需要安装好gcc、make):

wget http://people.redhat.com/~rjones/virt-what/files/virt-what-1.9.tar.gz

tar zxvf virt-what-1.9.tar.gz

cd virt-what-1.9/

./configure

make && make install

 再运行

 virt-what

3. 输入服务器ip或者绑定的域名

连接vpn时服务器地址将需要与此保持一致,如果是导入泛域名证书这里需要写*.域名的形式);

4. 选择证书

选择使用证书颁发机构签发的SSL证书还是生成自签名证书时,

如果选择no,使用自签名证书(客户端如果使用IkeV2方式连接,将需要导入生成的证书并信任)则需要填写证书的相关信息(C,O,CN),为空将使用默认值(default value),确认无误后按任意键继续,后续安装过程中会出现输入两次pkcs12证书的密码的提示(可以设置为空)

如果选择yes,使用SSL证书(如果证书是被信任的,后续步骤客户端将无需导入证书)请在继续下一步之前,将以下文件按提示命名并放在脚本相同的目录下(SSL证书详细配置和自动续期方案可见https://quericy.me/blog/860/ ):

ca.cert.pem 证书颁发机构的CA,比如Let‘s Encrypt的证书,或者其他链证书;

server.cert.pem 签发的域名证书;

server.pem 签发域名证书时用的私钥;

5. 是否使用SNAT规则(可选)

默认为不使用.使用前请确保服务器具有不变的静态公网ip,可提升防火墙对数据包的处理速度.如果服务器网络设置了NAT(如AWS的弹性ip机制),则填写网卡连接接口的ip地址.

6. 防火墙配置

默认配置iptables,补充网卡接口信息,为空则使用默认值

(这里很重要,一定要查看公网ip接口的接口名称,阿里云的默认是eth1,但是一定要用ifconfig查看后再输入公网ip的接口名称,如果填写错误VPN连接后将无法访问外网)

如果使用的是firewall(如CentOS7),请选择yes自动配置firewall,将无视SNAT并跳过后续的补充网卡接口步骤.

看到install Complete字样即表示安装完成。默认用户名密码将以黄字显示,可根据提示自行修改配置文件中的用户名密码,

多用户则在配置文件中按格式一行一个(多用户时用户名不能使用%any),

7. 修改用户名/密码

/usr/local/etc/ipsec.secrets 文件中修改。

例如:

: RSA server.pem
: PSK “myPSKkey”
: XAUTH “myXAUTHPass”
myUserName :%any EAP “test1”

改为

: RSA server.pem
: PSK “myPSKkey”
: XAUTH “myXAUTHPass”
user1 : EAP “user1”
user2 : EAP “user2”
user3 : EAP “user3”

保存并重启服务生效。

重启服务:ipsec restart

 

【客户端配置说明】

使用SSL证书则无需导入证书;使用自签名证书则需要先导入证书才能连接

1. 客户端导入证书

把服务器中的/home/my_key 目录下的证书文件ca.cert.pem拷贝到客户端后,把后缀.pem改为.cer后导入。(至于怎么从linux把文件拷贝到Windows,可以用邮件,或者下载个winscp软件都可以)

证书拿过来后导入方法很关键,直接双击导入不行,参加下面详细步骤:

  1. 在”开始”/Win+R>”运行”里 输入 mmc 回车进入
  2. 点击”文件”>”添加/删除管理单元”
  3. 在窗口中往下拉找到”证书”
  4. 双击”证书” > 选择”计算机账户”>再选择”本地计算机” 最后点确定
  5. 然后在控制台根节点>展开证书>受信任的根证书颁发机构>证书>右键>所有任务>导入该证书

到这里证书导入已经完成。

2. vpn客户端软件配置

  1. 属性>常规里输入IP或者域名
  2. 安全>vpn类型选择IKEv2
  3. 数据加密>选择”需要加密(如果服务器拒绝将断开连接)”
  4. 身份验证>使用可扩展的身份验证协议>microsoft:安全密码(EAP:MSCHAP V2)

然后输入用户名和密码即可连接。

 

3. 可连接但是无法上网

检查iptables是否正常启用,检查iptables规则是否与其他地方冲突,或根据服务器防火墙的实际情况手动修改配置。

检查sysctl是否开启ip_forward:

打开sysctl文件:vim /etc/sysctl.conf

修改net.ipv4.ip_forward=1后保存并关闭文件

然后使用以下指令刷新sysctl:sysctl -p

如执行后正常回显则表示生效。如显示错误信息,请重新打开/etc/syctl并根据错误信息对应部分用#号注释,保存后再刷新sysctl直至不会报错为止。

如果之前使用的自签名证书,后改用SSL证书,部分客户端可能需要卸载之前安装的自签名证书,否则可能会报Ike凭证不可接受的错误:

iOS:设置-通用,删除证书对应的描述文件即可;

Windows:Win+R,运行mmc打开Microsoft管理控制台,文件->添加管理单元,添加证书管理单元(必须选计算机账户),展开受信任的根证书颁发机构,找到对应的自签名证书,右键删除即可;

Windows Phone:暂时没有找到可以卸载证书的方法(除非越狱),目前只能重置来解决此问题。

4. 添加ipsec开机自启动

vim /etc/rc.local

ipsec start

保存即可。

 

【卸载方式】

进入脚本所在目录的strongswan文件夹执行:

make uninstall

删除脚本所在目录的相关文件(one-key-ikev2.sh,strongswan.tar.gz,strongswan文件夹,my_key文件夹).

卸载后记得检查iptables配置.

cat /etc/sysconfig/iptables

列出iptables规则

iptables -nL

 

 

 

【部分问题解决方案】

ipsec启动问题:服务器重启后默认ipsec不会自启动,请命令手动开启,或添加/usr/local/sbin/ipsec start到自启动脚本文件中(如rc.local等):

ipsec start

ipsec常用指令:

ipsec start   #启动服务

ipsec stop    #关闭服务

ipsec restart #重启服务

ipsec reload  #重新读取

ipsec status  #查看状态

ipsec –help  #查看帮助

 

【其他】

ios设备使用Ikev1无需导入证书,而是需要在连接时输入共享密钥,共享密钥即是提示信息中的黄字PSK.

连接的服务器地址和证书保持一致,即取决于签发证书ca.cert.pem时使用的是ip还是域名;

Android/iOS/OSX 可使用ikeV1,认证方式为用户名+密码+预共享密钥(PSK);

iOS/OSX/Windows7+/WindowsPhone8.1+/Linux 均可使用IkeV2,认证方式为用户名+密码。

WindowsPhone8.1 登录时的用户名需要带上域信息,即wp”关于”页面的设备名称\用户名,也可以使用%any %any : EAP “密码”进行任意用户名登录,但指定了就不能添加其他用户名了.

WindowsPhone10 的vpn还存在bug,ikeV2方式可连接但系统流量不会走vpn,只能等微软解决.

Windows10 也存在此bug,部分Win10系统连接后ip不变,没有自动添加路由表,使用以下方法可解决:

手动关闭vpn的split tunneling功能(在远程网络上使用默认网关);

也可使用powershell修改,进入CMD窗口,运行如下命令:

powershell    #进入ps控制台

get-vpnconnection    #检查vpn连接的设置(包括vpn连接的名称)

set-vpnconnection “vpn连接名称” -splittunneling $false    #关闭split tunneling

get-vpnconnection   #检查修改结果

exit   #退出ps控制台

 

 

此条目发表在功能配置分类目录,贴了, , , 标签。将固定链接加入收藏夹。