ISP路由器

ISP路由器

我們想要增加一個額外的網段(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

此設定有兩個問題:

  1. LAN1 上的主機對 LAN2 網段一無所知。當您從 SRV-02 ping LAN1 上的主機(我們稱為 host1)時,封包將通過 SRV-01 路由並到達 host1。然而,host1 會將回覆傳送到它的預設閘道(ISP 路由器),因為它沒有到 LAN2 的特定路由。 (ISP 路由器將 a) 也將其傳送至其預設網關,因為它也不知道 LAN2,或 b) 丟棄資料包,因為它來自未知來源而不是本地 LAN。
  2. 當嘗試從 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 上實施的網路策略可能會被規避。

希望有幫助。

相關內容