如何使用 1 个 ip 接收连接,使用另一个 ip 建立连接

如何使用 1 个 ip 接收连接,使用另一个 ip 建立连接

我有一个带有 2 个可用 IP 地址的 VPS。我想使用其中一个来接收连接,并在服务器建立连接时使用另一个。因此,如果连接的启动者不是 VPS,它将使用 IP 地址 A,如果是,它将使用 IP 地址 B。

VPS 运行的是 Ubuntu 16.04

我该怎么做呢?谢谢!

答案1

当 Linux 建立传出连接时,它首先尝试使用应用程序在套接字创建时请求的地址。如果它没有请求任何特定内容(或请求0.0.0.0),它会寻找一个暗示在路线中。

您可以设置这样的路线暗示到您指定的任何地址,这可以通过src命令关键字完成ip

ip route add DESTINATION via GATEWAY src PREFERRED_SRC_ADDRESS

例如,在我的计算机上有两个地址,192.168.168.4/24并且192.168.168.6/24(为了清晰起见,输出被精简):

muon ~ # ip addr
...
3: br0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 ... state UP ...
    inet 192.168.168.4/24 brd 192.168.168.255 scope global br0
    inet 192.168.168.6/24 scope global secondary br0
...

192.168.168.6用于传出路线,我必须告诉所有程序明确绑定到它,例如:

ssh -b 192.168.168.6 dst-address

或者设置我的默认路线,以便默认选择它:

ip route add default via 192.168.168.1 src 192.168.168.6

(默认路由默认没有提示;在这种情况下系统使用“已连接”提示。)另请注意,一些 src 已经位于“已连接”路由中,由命令生成ip address add并由网络掩码定义:

192.168.168.0/24 dev br0 proto kernel scope link src 192.168.168.4

这是因为.4地址是此系统上的“主要”地址,.6之后才添加。这两条路由是我在主表中拥有的全部路由,因此现在我将从连接到.4同一 LAN 中的机器(当我通过“已连接”路由时)并从连接.6到其外部的机器(当我通过“默认”路由时)。我可能也会更新此路由以使用.6其中的地址:

ip route change 192.168.168.0/24 dev br0 src 192.168.168.6

要现在使用.4地址,我必须明确地绑定到它,例如使用ssh -b,或者使用“更长的前缀”设置到我想要使用.4地址的某些系统的附加路由。

任何时候机器都可以接受来自两个 IP 地址的传入连接。如果我希望它只接受其中一个 IP 地址的连接,我只需在防火墙中阻止不需要的连接即可。

相关内容