如何配置雙宿主伺服器以使兩個網段進行 通信?
我們想添加一個額外的網段(LAN2),並且需要 LAN1 上的一些機器來訪問 LAN2 上的資源。LAN2 上的一些機器也需要訪問 LAN1 和 WAN 段上的資源。LAN1 和 LAN2 之間的網關稱為“SRV-01”,一個雙宿主 Linux 伺服器。
我無法從 LAN1 訪問 LAN2 或從 LAN2 訪問 LAN1,也無法從 LAN2 訪問 WAN。我想知道如何讓 LAN1 主機和 LAN2 一起交談,以及如何允許從 LAN2 機器訪問 WAN。
故障排除
我使用 ping 得到以下回复:
IP (source) ---> IP (destination) : Ping 回复 --------------------------------------------------------------------------- 192.168.5.33(LAN1 上的客戶端)---> 192.168.5.8(SRV-01:eth0):好的 192.168.5.33(LAN1 上的客戶端)---> 10.0.2.1(SRV-01:eth1):否 192.168.5.33(LAN1 上的客戶端)---> 10.0.2.2(SRV-02:eth0):否 *.*.*.*.* (SRV-01) ---> 192.168.5.33(LAN1 上的客戶端):OK *.*.*.*.* (SRV-01) ---> 10.0.2.2 (SRV-02:eth0):好的 10.0.2.2 (SRV-02) ---> 10.0.2.1 (SRV-01:eth1):好的 10.0.2.2 (SRV-02) ---> 192.168.5.8 (SRV-01:eth0):好的 10.0.2.2 (SRV-02) ---> 192.168.5.33(LAN1 上的客戶端):否
網路拓撲結構
WAN --- (ISP 路由器) --- LAN1 --- (SRV-01) --- LAN2 --- (SRV-02)
ISP 路由器
Internet 服務提供商 (ISP) 路由器提供 NAT(兩個網路適配器)並充當 LAN1 的 DHCP 伺服器。我們沒有對該設備的外殼/管理員訪問權限。
- xxx.xx.xx.xx/xx (eth0, WAN)
- 192.168.5.4/24 (eth1, LAN1)
SRV-01 伺服器
SRV-01 是一個雙宿主 Ubuntu Server 14.04(兩個網路適配器),它將充當 LAN1 子網和 LAN2 子網之間的網關。
- 192.168.5.8/24 (eth0, LAN1)
- 10.0.2.1/24 (eth1, LAN2)
/etc/網路/介面
# Loopback auto lo iface lo inet loopback # LAN1 auto eth0 iface eth0 inet static address 192.168.5.8 netmask 255.255.255.0 network 192.168.5.0 broadcast 192.168.5.255 gateway 192.168.5.4 dns-nameservers xxx.xxx.xxx.xxx # LAN2 auto eth1 iface eth1 inet static address 10.0.2.1 netmask 255.255.255.0 network 10.0.2.0 broadcast 10.0.2.255 dns-nameservers xxx.xxx.xxx.xxx
路由
〜$ netstat -r 核心IP路由表 目標網關 Genmask 標誌 MSS 視窗 irtt Iface 預設 192.168.5.4 0.0.0.0 UG 0 0 0 eth0 10.0.2.0 * 255.255.255.0 U 0 0 0 eth1 本地網 * 255.255.255.0 U 0 0 0 eth0
~$ ip 路由顯示 預設通過 192.168.5.4 dev eth0 10.0.2.0/24 dev eth1 proto 核心範圍連結 src 10.0.2.1 192.168.5.0/24 dev eth0 proto 核心範圍連結 src 192.168.5.8
IP轉發
~$ sudo sysctl -a | grep net.ipv4.ip_forward net.ipv4.ip_forward = 1 net.ipv4.ip_forward_use_pmtu = 0
防火牆
Ubuntu“簡單防火牆”(UFW)在伺服器“SRV-01”上被禁用,所有 iptables 鏈都有一個預設策略設置為 ACCEPT 目標。請注意,還沒有單個數據包進入 FORWARD 表……
~$ sudo ufw 狀態 狀態:不活動
~$ sudo iptables -L -v | grep 策略 鏈輸入(策略接受 369 個數據包,28278 字節) Chain FORWARD(策略接受 0 個數據包,0 個字節) 鏈輸出(策略接受 187 個數據包,19740 字節)
SRV-02 伺服器
SRV-02 是帶有一個網路適配器的 Ubuntu Server 14.04。
- 10.0.2.2/24 (eth0, LAN2)
/etc/網路/介面
# 環回 自動lo iface lo inet 環回 # 區域網路2 iface eth0 inet 靜態 地址 10.0.2.2 網路遮罩 255.255.255.0 網路 10.0.2.0 廣播 10.0.2.255 dns 名稱伺服器 xxx.xxx.xxx.xxx
路由
〜$ netstat -r: 核心IP路由表 目標網關 Genmask 標誌 MSS 視窗 irtt Iface 預設 10.0.2.1 0.0.0.0 UG 0 0 0 eth0 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0
~$ ip 路由顯示 預設通過 10.0.2.1 dev eth0 10.0.2.0/24 dev eth0 proto 核心範圍連結 src 10.0.2.2
防火牆
Ubuntu“簡單防火牆”(UFW)在伺服器“SRV-02”上被禁用,所有 iptables 鏈都有一個預設策略設置為 ACCEPT 目標。
~$ sudo ufw 狀態 狀態:不活動
~$ sudo iptables -L -v | grep 策略 鏈輸入(策略接受 0 個數據包,0 個字節) Chain FORWARD(策略接受 0 個數據包,0 個字節) 鏈輸出(策略接受 0 個數據包,0 個字節)
我在這裡想念什麼?我想知道應該向 SRV-01 添加什麼靜態路由,以及是否正確配置了預設網關……
這個設置有兩個問題:
- LAN1 上的主機對 LAN2 網段一無所知。當您從 SRV-02 ping LAN1 上的主機(我們稱之為 host1)時,數據包將通過 SRV-01 路由並到達 host1。但是,host1 會將回復發送到它的預設網關(ISP 路由器),因為它沒有到 LAN2 的特定路由。(ISP路由器將a)也將它發送到它的預設網關,因為它也不知道LAN2,或者b)丟棄來自未知來源而不是本地LAN的數據包。)
- 當嘗試從 LAN2 到達 WAN 時,數據包將通過 SRV-02 路由到 ISP 路由器,其中可能有兩種情況:
- 路由器不會對數據包進行 NAT 轉換,因為數據包的來源(LAN2)不是本地 LAN(這是更可能的情況),或者
- 路由器將對數據包進行 NAT 轉換並將其發送到 Internet。但是,當回復到來並且目的地被轉換回 LAN2 地址時,數據包將不會被傳遞,因為 ISP 路由器沒有該網路的路由。數據包將被錯誤地發送到預設網關 (ISP)。
這些問題可以通過向 ISP 路由器添加到 LAN2 的靜態路由並在 SRV-01 上為 LAN2 添加源 NAT 配置來解決。但是,由於沒有管理員訪問 ISP 路由器,這是不可能的。
有兩種解決方案可以繞過它:
A. 使 SRV-01 成為 LAN1 和 LAN2 主機的完整路由器
- 將另一個網路適配器添加到 SRV-01(總共 3 個)
- 更改拓撲如下:
.
WAN -> ISP router -> LAN1 -> SRV-01 +-> LAN3 (for hosts originally in LAN1) +-> LAN2 -> SRV-02
基本上,我們正在使 SRV-01 成為兩個 LAN 網段的路由器。
- 這將需要將最初在 LAN1 中的主機移動到新的子網 LAN3 - 假設我們使用
10.0.1.0/24
- SRV-01 的網路配置將需要更改如下:
/etc/網路/介面:
# LAN1 - to ISP router auto eth0 iface eth0 inet dhcp # we can even use dhcp as the IP address is not really important # - there are no more hosts on LAN1 apart from ISP router and SRV-01 # LAN3 - for hosts originally in LAN1 iface eth1 address 10.0.1.1 netmask 255.255.255.0 # LAN2 iface eth2 address 10.0.2.1 netmask 255.255.255.0
iptables 規則使 WAN 訪問工作:
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 -j MASQUERADE
或者,如果您選擇在 eth0 上保留 SRV-01 上的靜態 IP 地址,則可以更改規則(儘管
MASQUERADE
仍然有效):iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j SNAT --to-source 192.168.5.8 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 -j SNAT --to-source 192.168.5.8
- DHCP 需要在 eth1(LAN3,對於最初在 LAN1 上的主機)上的 SRV-01 上進行配置,如果需要,還可能在 eth2 (LAN2) 上進行配置。(在這兩種情況下,網關將分別是 eth1 或 eth2 的本地地址,但這是不言而喻的 :)
這將使 LAN3 和 LAN2 之間的通信成為可能(通過 SRV-01,這是兩者的預設網關)。由於雙源 NAT,WAN 訪問也可以從 LAN3 和 LAN2 工作。
B. 使 SRV-01 成為 LAN1 的 DHCP 伺服器
這種方法不像上面那樣乾淨,但稍微簡單一些。它假設您能夠在 ISP 路由器上禁用 DHCP
- 在 ISP 路由器上禁用 DHCP
- 在 SRV-01 上為 LAN1 設置 DHCP,並使 SRV-01 (192.168.5.8) 成為 LAN1 的預設網關
- 在 SRV-01 上為 LAN2 設置源 NAT 轉換,以便從 LAN2 進行 WAN 訪問:
.
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 -d 192.168.5.4 -j SNAT --to-source 192.168.5.8 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 ! -d 192.168.5.0/24 -j SNAT --to-source 192.168.5.8
第一行啟用 SNAT,以便 LAN2 主機可以訪問 ISP 路由器本身,第二行禁用 SNAT 以訪問 LAN2-LAN1。
同樣,這種方法不如上述方法乾淨,因為同一子網中有兩個路由器(SRV-01,ISP 路由器)。當我自己使用這種方法時,我注意到我的第二個路由器(在這種情況下為 SRV-01)會將 ICMP 重定向發送到 ISP 路由器,因為它會看到客戶端(LAN1 上的主機)和上游路由器(ISP 路由器)在同一個區域網路。這可能不是所希望的,因為在 SRV-01 上實施的網路策略可能會被規避。
希望有幫助。