通过 IP 别名建立隧道

通过 IP 别名建立隧道

我有一台服务器,它有一个专用 IP 和多个 IP 别名。它有一个网络接口,上面“附加”了多个 IP。

假设 IP1 是主 IP,但我还有 IP2 和 IP3

我可以通过 ssh 进入这三个 IP 中的任意一个并访问同一台机器。

现在,如果我创建一个 SSH 隧道并将浏览器配置为使用该隧道作为 socks 代理,则所有传出请求似乎都只通过 IP1。因此,如果我通过 IP2 创建一个隧道并将其设置为 Firefox 中的代理,然后在 Google 中搜索“我的 IP 是什么”,我会看到 IP1 出现。

有什么方法可以将传出连接设置为显示为我正在代理的 IP 别名吗?

答案1

我能够实现此目的的唯一方法是使用 NAT。如下所示:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4

其中 1.2.3.4 是您的别名 IP 之一。执行此操作会将所有传出流量转换为使用此 IP 地址(因此请小心)。

您可能希望考虑这个变体:

iptables -t nat -A POSTROUTING -o eth0 -m owner --uid-owner user -j SNAT --to 1.2.3.4

我自己没有运行这个,尽管我刚刚测试过它并且 iptables 接受它。这将允许您拥有每个用户/IP 别名映射(我认为),因此根据运行 socks 代理的进程的 UID(我在这里假设 SSH socks 代理,因此是通过 SSH 登录的用户),该 IP 将用于任何传出流量。

答案2

您可以使用路由命令。您甚至可以为特定主机设置特定的 IP 源地址。使用以下地址

  • 目的地:10.0.0.0/16
  • 默认 IP:192.168.0.100
  • 别名 ip: 192.168.0.101
  • 网关ip:192.168.0.1

将传出流量的 IP 更改为 10.0.0.0/16

ip route add to 10.0.0.0/16 via 192.168.0.1 dev eth0 src 192.168.0.101

如果你想让所有传出的流量都使用别名 ip,你可以使用

ip route change default via 192.168.0.1 dev eth0 src 192.168.0.101 metric 101

相关内容