我想通过一个 ssh socks5 发送发往特定 ip/子网的流量,同时通过另一个 socks5 隧道路由其他流量。
我尝试使用以下配置的 tsocks:
path {
server = 127.0.0.1
server_port = 3001
server_type = 5
reaches = 1.2.3.4/32
}
但是当我尝试“tsocks wget 1.2.3.4”时,它没有通过该代理并给出错误 IP (0.0.0.0) & 18:32:14 libtsocks(16065): SUBNET (0.0.0.0) != IP on line 33 in configuration file, ignored
我不明白这个错误。
我也在想是否可以使用 iptables 来做到这一点。
关于如何做到这一点有什么建议吗?
答案1
您可以sshuttle
按照说明使用如何通过 SSH 隧道路由我的互联网?
答案2
我也偶然发现了 redsocks 对此的解决方案http://darkk.net.ru/redsocks/
本质上,在您运行 ssh 隧道并配置 redsocks 以连接到这些隧道后,您可以添加 iptables:
# Create new chain
iptables -t nat -N REDSOCKS
# Do not route the following through 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 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 -d 192.168.0.0/16 -j RETURN
#exclude your ssh tunnels from being routed through redsocks...and themselves
iptables -t nat -I REDSOCKS -d tunnel_address1 -j RETURN
iptables -t nat -I REDSOCKS -d tunnel_address2 -j RETURN
#redirect set of addresses to one socks proxy running on port 30000
iptables -t nat -A REDSOCKS -p tcp -d 1.2.3.4 -j REDIRECT --to-ports 30000
#redirect another set of addresses to a different proxy
iptables -t nat -A REDSOCKS -p tcp -d 4.3.2.1 -j REDIRECT --to-ports 30001
#connect output to redsocks chain
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
这似乎有效。我也会尝试 sshuttle 解决方案,因为它看起来更简单一些。