Networking

如何使用另一個 IP 地址進行傳出流量?

  • July 7, 2016

背景

我執行具有兩個外部 IPv4 地址的伺服器。IP 地址 A (IP-A) 和 IP 地址 B (IP-B)。

目標

我只想通過 HTTPS 埠 443 和 SSH 埠 22 訪問 IP-A。IP-B 不應監聽任何傳入流量。

然後我希望伺服器僅對所有傳出流量使用 IP-B。或者至少告訴伺服器將 IP-B 用於僅針對特定命令的傳出流量。

虛擬碼範例:

1: I connect to the server over IP-A and call `ping example.com`
2: The server executes it and sends the ping requests outgoing from IP-B to example.com.
3: I can read the output of the command on my connection with IP-A

我為什麼要這個?

因為我將使用的管理控制台位於 IP-A 上。我希望 IP-A 與 IP-B 不直接相關(至少對於外界而言)。相反,我希望 example.com 看到“我收到了來自 IP-B 的 ping 請求。”。當有人連接到 IP-B 時,該 IP 地址不會監聽任何內容。雖然 IP-A 不在他們的日誌中。

最終,我想添加更多地址並能夠告訴 IP-A:

  1. 使用 IP-B 執行此命令
  2. 使用 IP-C 執行此命令
  3. 對這個命令使用 IP-D

關於如何配置上述場景的任何想法?我目前正在使用 Ubuntu,但我對其他 Linux 發行版的建議持開放態度。

大多數與網路相關的工具(如 ping)都有一個選項來選擇它們將用於傳出連接的源 IP,因此例如使用 ping 您可以使用ping -I IP-B.

對於使用 IP-B 的所有流量,您需要將預設路由指向的介面的主要/第一個 IP 調整為 IP-B。Linux 所做的是為您的目的地查找路由,例如 8.8.8.8,查看預設路由是在這種情況下採用的路由,然後如果未指定數據包的來源,即 0.0.0.0,它將用指向該目標的介面的主 IP。

但是,如果您最終想要實現的是對源自伺服器的任何流量的源 IP 進行更細粒度的控制,您將需要閱讀Linux Advanced Routing & Traffic Control HOWTO 並尋找如何將其與 netfilter/ 結合使用的範例iptables fwmark 以根據防火牆規則操作要查看的路由表,這將允許您通過將 B IP 設置為源的預設路由將流量類別 B 路由出去,依此類推。

此處要搜尋的關鍵字是基於策略的路由 (PBR)。

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