在 linux 伺服器中配置多個乙太網連接
我有以下拓撲
.───────────────. ┌──────────────────┐ _.─' `──. │ │ ,─' '─. │ ISP Router │ Dynamic IP ; : │ with NAT ├─────────────────────────────────────────────────────────: Internet ; │ │ ╲ ╱ └─────────┬────────┘ '─. ,─' │ `──. _.─' │ 10.0.0.1 `──────┬──────' │ │ .──────┴────. .─────┴─────. ,─' '─. ┌─────────────────────────┐ ,─' '─. ,' `. │ │ ,' `. ; LAN : Static DHCP┌──┴───┐ ┌──┴───┐ Static IP ; Public Net : : ;─────────────┤ eth1 │ My Server │ eth0 ├────────────: ; ╲ 10.0.0.0/24 ╱ 10.0.0.5 └──┬───┘ └──┬───┘ 1.2.3.5 ╲ 1.2.3.4/20 ╱ `. ,' │ Debian Buster │ mydomain.com `. ,' '─. ,─' │ │ '─. ,─' `─────────' └─────────────────────────┘ `─────────'
由於歷史原因,我的 ISP 使用單獨的網路提供靜態 IP。這意味著我必須將我的伺服器直接連接到一個直接暴露在網際網路上的特殊連接(在圖中這是
eth0
使用 IP1.2.3.5
)。但是,我在家裡使用這台伺服器作為 NAS,因為那是一個完全獨立的網路,我使用不同的介面連接它,
eth1
並使用 address 創建一個靜態 DHCP 分配10.0.0.5
。這樣,家庭網路中的其他設備可以找到它並訪問網路掛載。最後,我的域有一個 DNS 記錄,在這個例子
mydomain.com
中,指向1.2.3.5
.我遇到了幾個問題:
- 當我嘗試
mydomain.com
從我的區域網路訪問時,它不起作用。我相信這是因為伺服器正在從介面獲取數據包,eth0
然後通過回复eth1
,而另一個設備正在丟棄響應,因為它來自不同的 IP。- 在啟動時,伺服器應該選擇
1.2.3.4
作為網路來引導網際網路流量,以便外部訪問可以通過mydomain.com
。但是,由於兩者eth0
都eth1
可以通過各自的網關訪問 Internet,因此有時會啟動並選擇10.0.0.1
預設網關,然後訪問mydomain.com
不起作用。我相信這是一個與交通進入eth0
但離開的類似問題eth1
。雖然我熟悉基本的網路知識,但我沒有像這樣將伺服器同時連接到多個網路的經驗。理想情況下,我想配置伺服器,以便:
- 所有網際網路流量都通過
eth0
- 所有進入
eth0
的流量都通過回复eth0
- 所有進入
eth1
的流量都通過回复eth1
我的伺服器執行 Debian,我將不勝感激。
編輯:所以在禁用 eth1 網關並玩了一下之後,
tcpdump
我能夠確認流量是從 eth0 進入並離開 eth1。問題是 ISP 沒有對流向端點的流量進行 NAT1.2.3.5
,然後伺服器將10.0.0.X
地址辨識為位於 interface 上eth1
。
這是一個路由問題,可以通過基於源的路由或策略路由來解決。這涉及兩個路由表,每個源地址一個:
有關詳細資訊,請參閱http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html 。
我相信這是因為伺服器從介面 eth0 獲取數據包,然後通過 eth1 回复。
不。帶有 NAT 的 ISP 路由器會將您的客戶端 10.0.0.0 地址 NAT 到 ISP 動態地址,因此您的伺服器將回复該地址而不是內部地址。有一些例外,例如 FTP,不一定與 NAT 兼容,因為它們會將您的內部 IP 地址傳遞到連接的另一端,但是在一般情況下,您的 NAT 流量將保留在 eth0 上。
檢查您的日誌以確認客戶端出站到 1.2.3.4 並且伺服器正在從 NATed 地址 ip.ip.ip.ip 獲取連接。
在啟動時,伺服器應該選擇 1.2.3.4 作為網路來引導 Internet 流量,以便通過 mydomain.com 進行外部訪問。但是,由於 eth0 和 eth1 都可以通過各自的網關訪問 Internet
不要那樣做。在多宿主配置中擁有多個預設網關很少能像人們想要的那樣工作。僅當兩條路徑都提供對相同網路的訪問時,才應使用非常粗略的多個預設網關,例如企業設置中的路由器冗餘/高可用性。由於您連接到 Internet 的 ISP 路由器和您與公共網路的直接連接不同,因此您應該刪除它。eth0 應該有一個預設路由,eth1 應該有一個到 10.xxx 的路由。您仍然可以使用 DHCP 執行此操作,但是我會將其視為 10.0.0.5 的保留/排除並手動配置伺服器 IP。
除了無關的預設路由,您描述的是正常的預設操作。一定要尋找上面沒有描述的其他問題:
- 與 DNS 不同的主機文件(您是否嘗試讓客戶端連接到 10.0.0.5 而不是 1.2.3.4?我喜歡在內部使用技術名稱,例如 webserver1.internalfqdn.com 和外部友好名稱,例如www.externalfqdn.com )
- 上面沒有反映的手動路由表(您是否嘗試將 10.0.0.x 快捷方式通過 10.0.0.5 連接到 1.2.3.4 作為路由器? - 這可以工作,但需要額外配置)
- 路由協議(例如 RIP)(實際上是上述的一個變體,但如果您啟用了 RIP 或其他路由發布,您可能發布了錯誤的路由