通过IP别名隧道

我有一个专用的IP和几个IP别名的服务器机器。 它有一个单一的networking接口,并有多个IP“附加”。

所以我们假设IP1是主要的IP,但我也有IP2和IP3

我可以ssh到任何三个IP和访问相同的机器。

现在,如果我创buildSSH隧道并将浏览器configuration为使用该通道作为socks代理,那么所有传出的请求似乎只通过IP1。 所以,如果我通过IP2创build隧道,并将其设置为代理在Firefox中,然后说谷歌“什么是我的IP”我看到IP1出现。

有没有一种方法,我可以设置传出的连接显示为我正在代理的IP别名?

我能够做到这一点的唯一方法是使用NAT。 像这样的东西:

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

其中1.2.3.4是您的别名IP之一。 这样做会翻转所有传出stream量来使用这个IP地址,对于所有事情(所以要小心)。

你不妨考虑这个变种:

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

我不自己运行这个,尽pipe我已经testing过,iptables接受它。 这将允许你有一个每个用户/ IP别名映射(我认为),这取决于运行socks代理进程的UID(我假设这里是一个SSH socks代理,因此通过SSHlogin的用户) ,该IP将用于任何传出stream量。

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

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

将传出stream量的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 

如果你想要所有的传出stream量的别名IP,你会使用

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