始終將流量轉發出其發起的介面
(這是最初的問題,但我的最終解決方案與我最初提出的問題太不同了,所以我將其作為一個新問題發布。)
背景:
我有一個具有三個不同介面的 VM:管理 (eth0)、生產 (eth1) 和備份 (eth2)。管理用於 RDP 和 SSH 流量。生產用於大部分流量。備份用於與備份服務進行通信,它們都在同一個子網上。每個網路都僅限於自己的用途,任何看起來應該由其他網路之一承載的流量都將被丟棄(例如,
tcp/22
在生產網路上被丟棄)。問題:
SSH 流量通過管理埠進入伺服器,但在生產介面上離開:
這會導致流量被丟棄,因為數據包將
tcp/22
發送到生產網路。如果我將預設路由更改為指向管理網關,則數據包會從正確的介面發出,因此 ssh 可以正常工作,但所有生產流量都會停止工作。我可以保留指向 PROD 的預設路由,只要我從同一子網上的機器連接,它仍然可以工作。
我需要核心根據流量來源的介面設置預設網關。
任何高級路由(例如設置多個預設網關)都將涉及基於策略的路由。
已經發布了多種基於標記發往特定埠的數據包的轉發解決方案,但我在 Red Hat 的客戶門戶上找到的解決方案結果證明要容易得多,並且可能會更廣泛地適用。
添加到
/etc/rc.local
:
- 設置備用路由表,我已經呼叫了我的
2
。/sbin/ip route add table 2 default via <management-gateway>
- 將來自管理 IP 的流量設置為使用帶有管理網關集的備用路由表。
/sbin/ip 規則從 <management-IP-address> 表 2 添加
上面的方法是讓我的主網關(在預設路由表中)指向生產(eth1)。將為源自與 eth0 關聯的 IP 地址的任何流量選擇步驟 2 中的網關。
在我的特殊情況下,備份網路對網關設置不敏感,因為所有流量都在同一個子網上。但是,如果備份網路確實有多個子網,我可以設置第三個路由表並為該路由表做類似
ip rule add
的事情。如果沒有基於策略的路由,核心將參考預設路由表來決定將流量推出的介面。這意味著如果另一個節點與連接的介面之一位於同一子網中,則將選擇正確的介面,否則將通過預設路由發送流量。如果網路繼續路由數據包儘管出現“錯誤”介面但在我的情況下導致流量被丟棄,則此行為將不可見。
在進行基於策略的路由之後,生產和管理/SSH 流量都開始按預期執行。