我有以下设置:
- Host-X(192.168.1.100)运行 ssh -D,以便它可以用作 socks 服务器。
- Host-Y(192.168.1.101)运行 redsocks,并以 Host-X 配置为 socks。
它们与其他机器位于同一网络中。我想在某些计算机上使用 Host-Y 作为网关,以利用 redsocks。Host-Y 上的 IP 转发已启用。
这是 redsocks 配置:
base {
log_info = on;
log = "file:/var/log/redsocks.log";
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 0.0.0.0;
local_port = 2001;
ip = 192.168.1.100;
port = 2000;
type = socks5;
}
这些是我的 iptables 规则:
iptables -t nat -N REDSOCKS
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 2001
iptables -t nat -A PREROUTING -i eth0 -p tcp -j REDSOCKS
我可以从日志中看到主机 Y 上的 redsocks 流量,但我无法在使用主机 Y 作为网关的计算机上浏览互联网。显然缺少一些 iptables 规则,我猜是一条将 redsocks 输出流量发送到 socks 服务器的规则。有谁能帮忙吗?
谢谢你!
答案1
看起来,如果我将最后一条规则作为第一条规则,一切都会正常工作。因此,解决方案是使用以下 iptables 规则:
iptables -t nat -N REDSOCKS
iptables -t nat -A PREROUTING -i eth0 -p tcp -j REDSOCKS
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 2001