在Google Cloud上搭建VPN
之前在Google Cloud上申请过一个VPS,在Free trial期间使用了一个月,后来就关掉了。当时发现自己搭建VPN好容易啊。 直到这次,想重新激活上次那个instance来做VPN的时候,VPN已链接,但是data plane的traffic却始终发送不出去。 于是重新搜索了教程,才搞定这件事情。这里主要针对Google Cloud总结一下一些重要步骤。
关于StrongSwan的配置部分主要参考下面这篇文章: 使用Strongswan搭建IPSec/IKEv2 VPN
Google Cloud配置
建立好Compute Engine后,申请一个永久静态地址,然后配置SSH登录证书等内容。 这里不再赘述,Google自己的文档里已经交代的很清楚怎么做。
主要配置是在Google的Firewall rules里,这里决定了什么包可以访问到内部的instance,其后才是instance内部的iptables的配置。
这里我们建立一条新的rule,source filter填写0.0.0.0/0
,代表任何地方发出的包,除非你只想在特定IP上访问,否则就填写这个。 然后在Allowed protocols and ports里添加udp:500;udp:4500;esp
。
- 这里
udp:500
是IKE
协议指定的端口,会通过这个端口来发送Control plane的包 udp:4500
是当source或者destination在NAT
后时转而使用的端口,另外当NAT
被检测到后,Data plane的数据包也会被使用端口,这个时候ESP
的数据包会被包含在UDP
包中,端口也是这个- 最后
esp
就是允许Data plane的数据包通过
另外需要勾选允许ip forwarding
。
至此Google Cloud的配置就完成了。
安装StrongSwan
这里假设使用的是Ubuntu作为操作系统,其他OS请参考相应教程。
准备工作
安装PAM库和SSL库,以及make和gcc
下载StrongSwan的源码并编译
完成后执行ipsec version
查看是否安装成功。
生成证书
生成CA私钥
利用私钥签名CA证书
生成server端私钥
用CA证书签发server端证书
这里需要将下面的地址更换为我们刚才申请到的永久IP地址。
生成client端私钥
利用CA证书签发client端证书
生成client端p12证书
安装证书
配置StrongSwan
配置ipsec.conf
将/usr/local/etc/ipsec.conf
替换为如下内容:
配置strongswan.conf
将/usr/local/etc/strongswan.conf
替换为如下内容:
配置ipsec.secrets
将/usr/loca/etc/ipsec.secrets
内容替换为如下内容:
注意将PSK、XAUTH处的”mykey”编辑为唯一且私密的字符串,并且将[用户名]改为自己想要的登录名,[密码]改为自己想要的密码([]符号去掉),可以添加多行,得到多个用户。
配置iptables
修改sysctrl.conf
打开/etc/sysctl.conf
,然后uncomment包含net.ipv4.ip_forward=1
的这一行。
保存后,执行sysctl -p
。
修改iptables
将INF
替换为自己的网络接口.
保存iptables且开机自动启动
重启ipsec服务
至此大功告成。
WP8.1手机安装ca.cert.pem
,进入设置VPN
添加IKEv2
连接,地址为证书中的地址或IP,通过用户名-密码连接。 Windows连接也是一样,但注意将证书导入本地计算机而不是当前用户的“受信任的证书颁发机构”。 iOS/Android/Mac OS X设备添加Cisco IPSec PSK
验证方式,预共享密钥是/usr/local/etc/ipsec.secrets
中PSK后的字符串(不含引号),用户名密码同上,可以通过任意域名或IP连接,不需要证书.
接下来有时间我会试图把整个安装过程配置为一个Docker Build file,这样以后配置新的instance就跟方便了