如何使用另一個 IP 地址進行傳出流量?
背景
我執行具有兩個外部 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:
- 使用 IP-B 執行此命令
- 使用 IP-C 執行此命令
- 對這個命令使用 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)。