可以。
我的方案效果和你想通,但思路不太一样,如下:
局域网内有家用路由器192.168.2.1,肩负网关、DHCP等众多任务
运行了一个192.168.2.5的Debian,内有ss-redir一个
所有用户DHCP获取192.168.2.0/24 其他的IP地址,要求完全透明的翻墙。
首先在DHCP上配置DNS和网关地址为192.168.2.5,这样所有人的数据默认都会先发到这台设备上,DNS也会从这里解析(DNS如何避免污染另谈)
接着打开192.168.2.5上的IPv4数据转发
sudo echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sudo sysctl -p
这样所有的数据都从192.168.2.5这里通过了,这是科学上网的基础:让所有数据通过那台设备走。
确保192.168.2.5的下一跳是192.168.2.1 直接在/etc/network/interfaces里直接指定
iface eth0 inet static
address 192.168.2.5
netmask 255.255.255.0
gateway 192.168.2.1
确保结果如下
===============
$ traceroute
www.sina.com.cntraceroute: Warning:
www.sina.com.cn has multiple addresses; using 58.63.236.37
traceroute to
ara.sina.com.cn (58.63.236.37), 64 hops max, 52 byte packets
1 192.168.2.5 (192.168.2.5) 1.645 ms 1.134 ms 1.077 ms
2 192.168.2.1 (192.168.2.1) 1.541 ms 1.496 ms 1.349 ms
以下省略
===============
然后启动ss-redir到12345端口
接着
sudo iptables -t nat -N SHADOWSOCKS
sudo iptables -t nat -A SHADOWSOCKS -p tcp -d 8.8.8.0/24 -j REDIRECT --to-ports 12345
sudo iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
sudo iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS
这样所有访问8.8.8.0/24的数据都走Debian的12345端口的shadowsocks了,其他数据继续走到192.168.2.1,然后到公网。