![如何将所有流量重定向到特定 IP?(伪代理)](https://linux22.com/image/1323522/%E5%A6%82%E4%BD%95%E5%B0%86%E6%89%80%E6%9C%89%E6%B5%81%E9%87%8F%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E7%89%B9%E5%AE%9A%20IP%EF%BC%9F%EF%BC%88%E4%BC%AA%E4%BB%A3%E7%90%86%EF%BC%89.png)
我有一个这样的 SSH 隧道:
ssh -D 10.1.2.1:8080 -f -C -q -N name@ssh_server_ip
我在本地网络上有一台计算机(实际上是 VPN,但在这种情况下并不重要),其 IP 为 10.1.2.2。
我想将所有流量从 10.1.2.2(实际上是从 10.1.2.2 - 10.1.2.80)重定向到 10.1.2.1。我不想在 Web 浏览器中设置代理。
毕竟,10.1.2.2 应该通过 10.1.2.1 连接到 ssh_server_ip,而无需对 10.1.2.2 进行任何调整。
这是必要的,因为某些“计算机”将是移动设备,我不能强迫它们使用 SOCKS5 伪代理。
我正在使用 Debian。
答案1
您可以使用 iptables 和 redsocks 将所有流量重定向到您已建立的 socks5 代理。http://darkk.net.ru/redsocks/。
redsocks.conf
如果 redsocks 在您的客户端(10.1.2.2)上运行,您的界面看起来会是这样的:
redsocks {
/* `local_ip' defaults to 127.0.0.1 for security reasons,
* use 0.0.0.0 if you want to listen on every interface.
* `local_*' are used as port to redirect to.
*/
local_ip = 127.0.0.1;
local_port = 12345;
// `ip' and `port' are IP and tcp-port of proxy-server
ip = 10.1.2.1;
port = 8080;
// known types: socks4, socks5, http-connect, http-relay
type = socks5;
// login = "foobar";
// password = "baz";
}
在这种情况下,redsocks 在端口 12345 上运行,您只需告诉 iptables 将 tcp 连接重定向到 redsocks:
# Create new chain
iptables -t nat -N REDSOCKS
# Ignore LANs and some other reserved addresses.
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
# Anything else should be redirected to port 12345
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
# Any tcp connection made by `luser' should be redirected, put your username here.
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner luser -j REDSOCKS
有关更多信息(例如如何再次清理 iptables),请访问 redsocks 网站。