相比较其他的方法,我一直比较喜欢 vpn,特别是不需要额外安装任何客户端的 vpn。而且我更喜欢商业公司会使用的 vpn,可以把私人用途伪装成商业用途。虽然这种自欺欺人不会有什么很好的效果,但是相较于其他技术手段让人一看就是用于非法用途,大隐隐于市嘛。
在 iOS 和 MacOS 上,有自带的 CISCO IPSec 和 IKEv2 IPSec,在 Windows 上,pptp已经几乎是残废了,剩下还有 IKEv2 IPSec。然而,Windows 10 自带的 IKEv2 IPSec 客户端,满满的都是坑。
在网络设置中,本来是可以添加 IKEv2 IPSec VPN 的,但是,添加完以后连接上 VPN,却无法访问网络,权限问题。所以必须找到古老的「互联网选项」(Internet Options),在里面的「连接」(Connections) 选项卡中添加 VPN。
另外,这样添加的 VPN 有时候验证方式会被系统修改掉,尤其是重启以后,如果这种情况发生了,就会无法连接,需要重新设置。
而即使是设置成功的 VPN,也会有无法连接的情况。不是被干扰,而是系统本身的问题,这时候就要删掉 VPN 再重新添加了。
有一个不是很确定的现象,是安装了 360 以后,VPN 会很大几率的无法连接,甚至卸载 360 后也没有用。而在重装系统以后,VPN 的连接就变得很顺利。但是不知道是 360 还是系统的锅,毕竟有时候 Windows 的一些 bug 也是重装大法好。(不要问我为什么要装 360,别人给我机器的时候就已经安装了)
其实 iOS 和 MacOS 上的 IPSec 也有一些坑,比如 iOS 上的 IKEv2 不能用证书登录,MacOS 上的证书需要设置信任并添加允许 /usr/sbin/racoon
访问证书。
ps. 网上的教程都说 Windows 需要添加证书,但是其实如果服务器采用了 Let's Encrypt 的证书的话,就不需要了,因为 Windows 已经自带了。
2018/08/15 更新:
目前来看,在 Windows 上使用 IKEv2 的话,最好的方法是在 PowerShell 里执行 Add-VpnConnection -Name "{VPN 名称}" -ServerAddress "{VPN 地址}" -AuthenticationMethod "Eap" -EncryptionLevel "Maximum" -RememberCredential -TunnelType "Ikev2"
另外,如果使用 Let's Encrypt 的证书的话,需要把中间证书保存在服务器上,sudo wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem -O /etc/ipsec.d/cacerts/lets-encrypt-x3-cross-signed.pem