我們想要增加一個額外的網段(LAN2),並且需要 LAN1 上的一些機器來存取 LAN2 上的資源。 LAN2上的一些機器也需要存取LAN1和WAN網路段上的資源。 LAN1 和 LAN2 之間的閘道稱為“SRV-01”,是一個雙宿主 Linux 伺服器。
我無法從 LAN1 存取 LAN2,也無法從 LAN2 存取 LAN1,也無法從 LAN2 存取 WAN。我想知道如何讓 LAN1 主機和 LAN2 一起通話,以及如何允許從 LAN2 機器存取 WAN。
故障排除
我使用 ping 得到以下回應:
IP(來源)---> IP(目標):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 上的客戶端):確定 *.*.*.*.* (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 伺服器。我們沒有對該設備的 shell/admin 存取權限。
- 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 原型核心範圍連結 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「Uncomplicated FireWall」(UFW) 在伺服器「SRV-01」上被停用,並且所有 iptables 鏈都將預設原則設定為「ACCEPT」目標。請注意,還沒有任何資料包進入 FORWARD 表...
~$ sudo ufw 狀態 狀態:不活躍
〜$ sudo iptables -L -v | grep 策略 Chain INPUT(策略接受369個資料包,28278位元組) Chain FORWARD(策略接受0個資料包,0個位元組) 鏈輸出(策略接受 187 個資料包,19740 位元組)
SRV-02伺服器
SRV-02 是一款配備一個網路介面卡的 Ubuntu Server 14.04。
- 10.0.2.2/24(eth0、LAN2)
/etc/網路/接口
# 環回 自動定位 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 原型內核範圍連結 src 10.0.2.2
防火牆
Ubuntu「Uncomplicated FireWall」(UFW) 在伺服器「SRV-02」上被停用,並且所有 iptables 鏈都將預設原則設定為「ACCEPT」目標。
~$ sudo ufw 狀態 狀態:不活躍
〜$ sudo iptables -L -v | grep 策略 Chain INPUT(策略接受0個資料包,0個位元組) Chain FORWARD(策略接受0個資料包,0個位元組) Chain OUTPUT(策略接受0個資料包,0個位元組)
我在這裡缺少什麼?我想知道應該在 SRV-01 中添加什麼靜態路由,以及預設網關是否配置正確...
答案1
此設定有兩個問題:
- 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)。
這些問題可以透過將 LAN2 的靜態路由新增至 ISP 路由器並在 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
使 WAN 存取正常運作的 iptables 規則:
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
- 需要在 eth1(LAN3,對於原本位於 LAN1 上的主機)上的 SRV-01 上設定 DHCP,如果需要,也可能在 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 上實施的網路策略可能會被規避。
希望有幫助。