Linux使用iptables实现全局代理

同时也是ss-qt5在arch下崩溃的解决方案

Posted on January 18, 2017 in Demo

首先ss-qt5在arch下是会崩溃的,原因不明,只要有连接就会崩。

无奈之下只好使用命令行工具作为代替了。ss的client和server用的config是一样的,所以还算方便吧。

这里我们要安装xxx-libev,因为Python版是没有ss-redir的,只有ss-local,需要redsocks才能把流量转发到socks5上,但是redsocks并不好用,就算设置好了,还要面对dns污染的问题。

安装好之后就要写我们的脚本了。这里给一个demo

#!/bin/bash

#不重定向目的地址为服务器的包

#请用你的shadowsocks服务器的地址替换$SERVER_IP

sudo iptables -t nat -A OUTPUT -d $SERVER_IP -j RETURN

#不重定向私有地址的流量

sudo iptables -t nat -A OUTPUT -d 0.0.0.0/8 -j RETURN

sudo iptables -t nat -A OUTPUT -d 10.0.0.0/8 -j RETURN

sudo iptables -t nat -A OUTPUT -d 172.16.0.0/16 -j RETURN

sudo iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN

sudo iptables -t nat -A OUTPUT -d 224.0.0.0/4 -j RETURN

sudo iptables -t nat -A OUTPUT -d 240.0.0.0/4 -j RETURN

sudo iptables -t nat -A OUTPUT -d 169.254.0.0/16 -j RETURN
#不重定向保留地址的流量,这一步很重要

sudo iptables -t nat -A OUTPUT -d 127.0.0.0/24 -j RETURN

#转发到本地的ss端口
sudo iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 1080

#加上参数u for udp
sudo ss-redir -c path/to/config  -u

终止服务之后还要清一下iptables,可以用命令

sudo /usr/lib/systemd/scripts/iptables-flush

平时不需要全局的时候用ss-local -c /path/to/config就好。

顺便放下广告吧。。。