简单的企业翻墙方案
0x001 vps 搭建ss-server服务端
带不带混淆都可以,反正client和server端对应就行。推荐shadowsocks-libev的C语言版本。
cat config.json
{
"server" : "x.y.z.w",
"server_port" : 12345,
"password" : "*********",
"timeout" : 300,
"method" : "aes-256-cfb",
"fast_open" : false
}
- fast_open只有在linux内核3.7以上才可以使用, 打开前需要
echo 3 > /proc/sys/net/ipv4/tcp_fastopen&&echo 'net.ipv4.tcp_fastopen = 3' >>/etc/sysctl.conf。 然后在以上ss的json配置文件中把fast_open一项设为true,方可开启。
0x002 内网Linux主机开启ss-redir
CentOS6为例。
-
保证在
/etc/sysctl.conf中有net.ipv4.ip_forward = 1开启,sysctl -p生效。 -
此linux主机推荐单独配置外网ip,以免FQ导致ip被封弄得办公出口挂掉,不过ss比较隐蔽,还好。
-
开启ss-redir服务,监听本地端口,例如10086。
-
在
/etc/sysconfig/iptables中增加:
-A PREROUTING -s 192.168.0.0/16 -p tcp -m tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 10086
其中80,443是需要转发的端口,只针对web访问,其他特殊服务也可以针对端口添加。192.168.0.0/16是指定内网环境,可自行更改。如果主机没有配置外网ip的话,可以不用指定内网段。
- 重启iptables,
/etc/init.d/iptables restart
0x003 路由指向
这一步我觉得是比较暴力也不是很科学的一步,要做到透明FQ,也没有其他好办法。
首先可以递归查询出google的spf记录, nslookup -q=TXT google.com 8.8.8.8, 得到的返回是:
text = "v=spf1 include:_spf.google.com ~all"
继续往下查nslookup -q=TXT _spf.google.com 8.8.8.8,得到:
_spf.google.com text = "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all
继续 nslookup -q=TXT _netblocks.google.com 8.8.8.8, nslookup -q=TXT _netblocks2.google.com 8.8.8.8 等 可以查询到谷歌几乎所有的ip。
然后就要在办公网的核心路由上把这些ip的吓一跳统统转到上一步内网的Linux主机上。
其他需要翻墙的ip地址可以用类似的方式或者直接dns查询一下得到。或者也可以考虑直接将所有海外ip的整段加入核心路由的转发策略,有点暴力。
另外还有个dns污染的问题,也是头疼的,只能内部劫持了。