iptables:将 TCP 连接重定向到 ssh 隧道

iptables:将 TCP 连接重定向到 ssh 隧道

我已经看到它在许多基于 Android 的项目中得到使用,例如“ProxyDroid”和“SSHTunnel”

当您建立与代理或 ssh 隧道的连接时,使用 iptables 它将通过您创建的隧道重定向所有 tcp 请求。

它应该是类似“-I OUTPUT -p tcp --destination-not xxx.xxx.xx.xx --redirect-to xx.xxx.xx.xx:port”之类的东西,但我找不到任何关于这方面的例子,而且我不知道是否应该将它插入到 nat 或其他东西中 + 我不知道是否应该有多个规则,例如:再多一个用于传入连接的规则。

编辑:

似乎无法直接使用隧道,或者我还没有找到如何在不使用代理的情况下做到这一点,我必须安装一个名为 redsocks 的程序作为本地服务器才能使其工作。

这里使用的 iptables 命令是:

# do not redirect connection sent to localhost so redirected connections can reach
# its destination, otherwise we'll stuck in a loop.
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
# Redirect all tcp connections except ones that are going to my tunnel server 
# to the local redsocks port
iptables -t nat -A OUTPUT -p tcp ! -d tunnel.ip.goes.here -j REDIRECT --to-ports 31338

RedSocks 仓库:https://github.com/darkk/redsocks


现在一切都运行良好,但我仍然需要知道是否可以在没有红袜的情况下完成此操作(直接连接到隧道)。

答案1

您的意思是通过 SSH 设置穷人版 VPN 吗?如果是这样,这里有一些 Ubuntu 文档可供参考:

https://help.ubuntu.com/community/SSH_VPN

基本上,您可以使用“-w”选项来设置新的 tun0 接口,并开始通过它进行路由。 iptables虽然您需要设置路由,但这并不涉及。

请注意,在 TCP 上执行 TCP 可能馊主意。更好的选择可能是使用简单的 VPN,例如 OpenVPN,但这会比临时的 ssh 隧道更复杂。

相关内容