我有一个 VPS,其中分配了多个 IP 地址(我们可以使用 debian、centos 或 ubuntu)。我可以使用任意 IP 地址通过服务器建立 ssh 隧道。但是,我设置的任何 ssh 隧道始终只显示一个指向最终目标站点的 IP 地址。
我 --ssh 到 IP1 --> |服务器|----> http://whatismyip.com (显示 IP1)
我 --ssh 到 IP2--> |服务器|----> http://whatismyip.com (显示 IP1)
我 --ssh 到 IP3--> |服务器|----> http://whatismyip.com (显示 IP1)
如何配置服务器,以便当我通过 SSH 隧道连接到 IP1 时,其出站 IP 为 IP1。当我通过 SSH 隧道连接到 IP2 时,其出站 IP 为 IP2?
我想要的:我 --ssh 到 IP1 --> |server|----> http://whatismyip.com (显示 IP1)
我 --ssh 到 IP2--> |服务器|----> http://whatismyip.com (显示 IP2)
这些 IP 位于不同的子网中(实际上完全是不同的 A 类)。
答案1
您用于连接到 SSH 服务器的 IP 地址实际上与 SSH 代表您启动出站连接时所使用的 IP 地址没有任何关系。
通过隧道传输的数据包的源地址将更多地取决于 SSH 服务器的路由表和默认网关。
如果您的所有地址都在同一个子网中,我认为您无法仅使用 ssh 来设置源地址。
作为替代方案,我相信您可以设置多个 OpenVPN 实例,每个实例都有自己的 tun 和 ip 地址范围。然后为来自每个 VPN 实例的数据包设置不同的 NAT 规则。
答案2
这是一个肮脏的解决方案并且可能导致问题。
> iptables -t nat -A POSTROUTING -j SNAT --to IP2
>
> so
> IP1 ---> IP2
> IP2 ---> IP2
> IP3 ---> IP2
如果您需要更改并且没有任何其他 iptables 规则,只需重新启动 iptables,然后所有内容都会被清除。
我和你有同样的烦恼,这是我能找到的最好的办法。
答案3
这不是隧道问题。如果您在服务器上并通过 SSH 连接它(这就是建立隧道的方式,对吧?),您会看到这些隧道是使用相同的 IP 地址设置的。
这是一个 TCP 路由问题。如果您运行netstat -rn
,您将看到您的路由表。最有可能的是,您正在将所有数据包路由到同一个接口——您的默认路由。您需要比您的默认路由优先级更高的非常具体的路由才能优先。
答案4
抱歉,这不是答案——我希望能够在上面附加一条评论,但我是这个网站的新手。
我只是想补充一点,我听说可以设置每个 shell 用户 (UID) 用于传出流量的接口。不太清楚如何操作,我正在尝试自己弄清楚,因为很久以来我一直想在我的 VPS 上使用 3 个传出 IP(无需设置专用代理软件)。