V2Ray的透明代理水完了,再水一篇Shadowsocks的透明代理配置篇。。
Shadowsocks配置透明代理需要注意的是要解决DNS污染的问题,而V2Ray不存在这个问题,因为V2Ray有一个sniffing的功能,可以从流量中探测出正确的域名。以往用Shadowsocks做透明代理时,还需要额外装一堆软件,比如DNSMasq/ChinaDNS等等,就是为了解决DNS污染的问题。
现在我们可以用overture代替上面提到的那些软件,只需要简单配置一下即可自建一个无污染的DNS服务,详细配置可以参考:
待你搭建好了一个无污染的DNS服务后,再继续往下看本文。
首先我们在自己的VPS(翻墙服务器)以及网关机器(透明代理服务器)上都安装shadowsocks-libev,注意是libev这个版本,其他的版本例如python版本是没有ss-redir这个透明代理工具的。
这里我用的是Debian9和Ubuntu18.04,所以只需要使用包管理器即可简单安装:
apt -y update apt -y install shadowsocks-libev libsodium-dev
首先来配置服务端,在VPS上编辑如下配置文件:
nano /etc/shadowsocks-libev/config.json
类似我的配置如下:
{ "server":"0.0.0.0", "server_port":23333, "local_port":1080, "password":"你的SS连接密码", "timeout":60, "method":"chacha20-ietf-poly1305" }
保存配置之后重启shadowsocks-libev以及设置开机自启:
systemctl restart shadowsocks-libev systemctl enable shadowsocks-libev
接下来配置网关机器,在网关上首先停止shadowsocks-libev运行:
systemctl stop shadowsocks-libev
然后新建一个用于透明代理的配置文件:
nano /etc/shadowsocks-libev/config-redir.json
类似我的配置如下:
{ "server":"VPS公网IP", "mode":"tcp_and_udp", "server_port":23333, "local_address": "0.0.0.0", "local_port":10801, "password":"你的SS连接密码", "timeout":60, "method":"chacha20-ietf-poly1305" }
接着新建一个systemd服务文件:
nano /lib/systemd/system/shadowsocks-redir.service
写入如下配置:
[Unit] Description=Shadowsocks-libev Redir Service After=network-online.target [Service] Type=simple User=nobody Group=nogroup LimitNOFILE=32768 ExecStart=/usr/bin/ss-redir -c /etc/shadowsocks-libev/config-redir.json [Install] WantedBy=multi-user.target
启动ss-redir:
systemctl start shadowsocks-redir systemctl enable shadowsocks-redir
现在ss-redir这块的配置就完成了,让我们在网关机器上做一点善后工作。
开启IPv4转发:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
安装ipset/创建ipset链/将中国ip加入到链:
apt -y install ipset wget https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt ipset -N cn hash:net for i in $(cat china_ip_list.txt); do ipset -A cn $i; done
使用iptables处理流量/中国IP直连:
iptables -t nat -N SHADOWSOCKS iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN iptables -t nat -A SHADOWSOCKS -p tcp -m set --match-set cn dst -j RETURN iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 10801 iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
如果有一些应用,例如BT你不想让它走代理可以将上面的最后一条命令改为下面这样,即自己指定端口,设置让哪些端口走代理:
iptables -t nat -A PREROUTING -p tcp --dport 22 -j SHADOWSOCKS iptables -t nat -A PREROUTING -p tcp --dport 80 -j SHADOWSOCKS iptables -t nat -A PREROUTING -p tcp --dport 443 -j SHADOWSOCKS
最后,局域网内的其他机器,配置网关/DNS为这台网关机器的IP即可: