Linux

如何配置雙宿主伺服器以使兩個網段進行 通信?

  • October 9, 2015

我們想添加一個額外的網段(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 添加什麼靜態路由,以及是否正確配置了預設網關……

這個設置有兩個問題:

  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)。

這些問題可以通過向 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 上實施的網路策略可能會被規避。

希望有幫助。

引用自:https://serverfault.com/questions/727212