我正在尝试将所有传出的 TCP 流量从我的 Linux 机器重定向到远程 SOCKS5 代理服务器。
目前我在 OUTPUT 链中使用以下规则:
sudo iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner myuser -j REDSOCKS
REDSOCKS 链包含:
sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 12345
在本地端口上,12345
我运行了 REDSOCKS 守护程序,它可以与远程 SOCKS5 代理服务器通信。
这很好用!代表用户 myuser 启动的所有应用程序都通过远程 SOCKS5 代理进行了“socks 化”。
但是如果我想让这个功能对我的 Linux 机器上的所有用户都起作用该怎么办呢?
因此,我在 OUTPUT 链中尝试了以下规则(而不是上面的规则):
sudo iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
这时,REDSOCKS 守护进程立即“超出文件描述符”并且无法重定向任何数据包。
为什么会发生这种情况?如何将所有用户(及其应用程序)的 TCP 流量重定向到远程 SOCKS5 代理服务器?
我尝试过:
sudo iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner 0-10000 -j REDSOCKS
ulimit -n 4096
但仍然存在同样的问题。
答案1
我猜你需要排除 REDSOCKS 自己的流量——当你为所有用户重定向时,你就创建一个循环。