在 Ubuntu 上使用 Redsocks 和 iptables 通过 SOCKS 代理重定向 OpenVPN 客户端流量

在 Ubuntu 上使用 Redsocks 和 iptables 通过 SOCKS 代理重定向 OpenVPN 客户端流量

我正在尝试使用 Ubuntu 服务器上的 Redsocks 和 iptables 将所有流量从 OpenVPN 隧道重定向到 SOCKS 代理。虽然本地生成的流量可以毫无问题地通过 Redsocks 路由,但我在通过 Redsocks 代理路由 VPN 客户端的流量时遇到了困难。VPN 客户端要么失去互联网连接,要么没有将其流量路由通过 Redsocks 代理。

以下是“nat”表的当前 iptables 规则(使用这些规则,VPN 客户端可以通过 VPN 访问互联网,但流量不会通过 Redsocks 代理):

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N REDSOCKS
-A OUTPUT -p tcp -j REDSOCKS
-A POSTROUTING -s 10.8.0.0/24 -o ens160 -j MASQUERADE
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 100.64.0.0/10 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 198.18.0.0/15 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
-A REDSOCKS -d 3.68.214.173/32 -j RETURN
-A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

(3.68.214.173 是代理)

到目前为止,我已经测试了各种 iptables 配置,包括标记 VPN 客户端的流量并在 OUTPUT 链中处理它。我还尝试在 PREROUTING 链中添加规则,以将 VPN 客户端的流量重定向到 REDSOCKS 链。然而,在每种情况下,我都遇到了不同的问题:VPN 客户端完全失去互联网访问权限,或者 VPN 客户端的流量未按预期通过 Redsocks 代理路由。另一方面,本地生成的流量似乎通过 Redsocks 代理路由,没有任何问题。

您能否帮助我了解我做错的地方,并建议我需要应用的正确的 iptables 规则或配置,以便通过 Redsocks 代理路由 VPN 客户端的流量?

任何帮助都将不胜感激。谢谢!

答案1

我设法找到了解决问题的方法。结果发现问题出在 Redsocks 配置上,特别是 local_ip 设置。Redsocks 需要监听 0.0.0.0 而不是 127.0.0.1,才能正确处理来自 VPN 客户端的重定向流量。

这是更新后的 Redsocks 配置:

redsocks {
    local_ip = 0.0.0.0;
    local_port = 12345;
    ip = 127.0.0.1;
    port = 14017;
    type = socks5;
}

此外,我使用以下 iptables 规则成功通过 Redsocks 代理路由 VPN 客户端的流量: iptables -t nat -A PREROUTING -i tun0 -p tcp -j REDSOCKS

经过这些更改后,VPN 客户端的流量现在正按预期通过 Redsocks 代理进行路由。

我希望这能帮助其他面临类似问题的人。

相关内容