Ubuntu

如何使用1個ip接收連接,另一個建立連接

  • April 21, 2021

我有一個有 2 個可用 IP 地址的 VPS。我想使用其中一個來接收連接,並在伺服器建立連接時使用另一個。因此,如果連接的起始者不是 VPS,它將使用 IP 地址 A,如果是,它將使用 IP 地址 B。

VPS 正在執行 Ubuntu 16.04

我該怎麼做呢?謝謝!

當 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 地址的傳入連接。如果我希望它只接受與其中一個的連接,我可以簡單地阻止防火牆中不需要的連接。

引用自:https://serverfault.com/questions/1061001