阿里云搭建strongswan VPN 国内外分流中转到shadowsocks

前言:前段时间新出现了几个支持IKEv2的VPN,试用了一下,感受速度嗖嗖的,不过流量贵贵的。作为一个有尊严的技术人员,怎能甘心就这样把钱轻易送给别人呢。经过一番观察,发现该vpn直连的其实是国内的阿里云。那么原理就很明确了,客户端连阿里云,然后阿里云进行国内外分流。因为阿里云机房的网络肯定杠杠的,所以不管访问国内和国外都很快。明确原理之后,我做了好一番尝试,失败了好几次之后,终于于前天调试好了。

架构:客户端 <—>阿里云<—>海外VPS

本文的重点是分流转发部分(也是我搜索许久,发现资料很少的部分),所以其它内容只是简略介绍。

零、基础知识

要跨越长城,其实得分两步:一是获取封锁网站的正确DNS解析,二是使用代理访问被封锁的IP。

就本文来说,获取正确DNS解析是通过dnsmasq和ss搭配来完成的。默认上游DNS是114.114.114.114,被封锁网站走ss-tunnel转发到8.8.8.8解析。

更多基础知识,请阅读FreeRouter,作者从网络基础到长城运行原理及如何跨越都讲到了。

一、海外服务器搭建ss

这一步网上教程一大片,就不重复了。我用的是shadowsocks-libev。如果这一步都无法独立完成,那后边的就不需要看了。

二、国内VPS搭建strongswan

centos 直接yum install strongswan就好。其它系统请自行搜索相应安装方式。

配置strongswan。我懒得弄证书了,所以认证方式为预共享密钥(因为我只需要iphone和mac上用,所以只配了这俩,其他客户端请自行搜索)

以上配置文件仅限于对我来说可用,具体各条目啥含义我也不是完全明白。

配置密码文件:

配置strongswan:

三、客户端设置

iOS9现在虽然可以选择新建IKEv2的VPN了,但是无法使用预共享密钥,所以这里需要使用mobileconfig文件。

把需要填写的参数填入,保存为.mobileconfig文件,放到任何能用safari访问到的地方用safari打开安装就好。

Mac新建VPN选择Cisco IPsec方式就行。

四、配置防火墙

到此时,可以用客户端连到服务器试试能否正常连接。

五、配置中转

中转有两种方案:一种是国内ip直连,国外走代理。另一种是默认直连,黑名单走代理。这里选择前一种,因为对我个人来说,有些国外网站代理比直连要快。

服务器打开ss: nohup ss-server -u -A -c /etc/shadowsocks-libev/config.json &

国内VPS:

nohup ss-redir -c /etc/shadowsocks-libev/config.json -u -A -l 1080 -b 0.0.0.0 &

nohup ss-tunnel -c /etc/shadowsocks-libev/config.json -l 5353 -L 8.8.8.8:53 -u -A &

-u 表示打开udp转发。-A表示OTA认证,安全性更高

防火墙配置参数此脚本:(原理是下载国内ip段,生成ipset列表,访问国内ip时直连,其它ip转到ss-redir的端口)

六、配置dnsmasq

centos可以yum直接安装,其它系统请自行搜索

配置dnsmasq:

把 /etc/dnsmasq.conf最后一行conf-dir=/etc/dnsmasq.d取消注释

新建/etc/dnsmasq.d目录。里边新建两个文件default.conf和gfwlist.conf

default.conf里只需要一句话: server=114.114.114.114 表示默认上游DNS

gfwlist.conf初次可以用下边的脚本生成。脚本来自这里。注意端口和IP要设置成你需要的。

gfwlist的网址访问不到的话,可以在海外VPS上生成gfwlist.conf后复制回国内VPS。

service dnsmasq start 命令开启dnsmasq服务。注意配置strongswan的DNS为本机的公网IP。

最好修改/etc/resolve.conf文件,把默认的DNS改为127.0.0.1.

 

至此,用手机客户端测试,ip138.com显示IP为阿里云,whatismyip.com显示IP为海外VPS。

 

如果全部按照我上文搭建中转服务器,现在有个问题是国内这台服务器是无法跨越长城的。因为这台服务器另有他用,而且我也没有让它也支持跨越长城的需求,所以这个我就不折腾了。