如何将所有流量重定向到特定 IP?(伪代理)

如何将所有流量重定向到特定 IP?(伪代理)

我有一个这样的 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 网站。

相关内容