Routing

通過單個 NIC 路由到不同的子網到另一個盒子

  • December 16, 2015

我有一個帶有 3 個子網的家庭網路(我喜歡到處玩!)

我一直在為一些我認為很容易的事情而苦苦掙扎,但幾天后我離答案更近了。我的網路如圖所示

主子網是192.168.1.0/24,它通過帶有乙太網 ( 192.168.1.2 ) 和 wifi ( 192.168.2.1 ) 適配器的筆記型電腦連接到192.168.2.0/24子網。

我正在使用 2 個 NIC(帶有IP Maquearading )的筆記型電腦上執行hostapddhcpd - 所以我將它用作 WiFi 熱點。那裡的設置工作正常(已經有一段時間了)。我最近添加了一個 wifi 路由器,它通過 WAN 連接器乙太網鏈路(192.168.1.10 )連接到192.168.1.0/24子網,在192.168.3.0/24子網範圍內提供 DHCP 地址。

主子網連接到 Linux 機器(192.168.1.1),該機器充當內部網路到網際網路的網關路由器(IP 偽裝用於進出公共網際網路的數據包)。

如果我Linux 機器(路由器)上,我可以 ping 192.168.1.2192.168.2.2(在路由表中添加條目以到達192.168.2.0/24子網之後):

ip route add 192.168.2.0/24 via 192.168.1.2

我的目標是從無線連接到 wifi 路由器的筆記型電腦 ( 192.168.3.2 )訪問手機 ( 192.168.2.2 ) ,而 wifi 路由器又連接到192.168.1.0/24子網。

這就是事情出錯的地方。我認為來自192.168.3.2的數據包- 發往192.168.2.2 - 將被發送到192.168.1.1(無線路由器的預設網關),並且由於192.168.1.1可以 ping 192.168.2.2,我假設這會起作用(因為上面提到的路由條目)。

IP 轉發在 Linux 路由器 ( 192.168.1.1 ) 以及充當 WiFi 熱點的筆記型電腦上啟用。我在這裡嘗試做的是可能的,還是我錯過了一些基本概念?

  • 路由表

Routing table for 192.168.1.1:
Destination   Gateway       Genmask     Flags Metric   Ref     Use Iface
0.0.0.0       10.0.0.1     0.0.0.0         UG    10      0        0 eth0
10.0.0.0      0.0.0.0      255.255.255.0   U      0      0        0 eth0
192.168.1.0   0.0.0.0      255.255.255.0   U      0      0        0 eth1
192.168.2.0   192.168.1.25 255.255.255.0   UG     0      0        0 eth1

Routing table for 192.168.1.2:
Destination Gateway       Genmask       Flags Metric Ref  Use Iface
0.0.0.0     192.168.1.1   0.0.0.0       UG     0     0    0   eth0
192.168.1.0     0.0.0.0   255.255.255.0 U      0     0    0   eth0
192.168.2.0     0.0.0.0   255.255.255.0 U      0     0    0   wlan0

謝謝你們!

在這裡,我不得不承認一個非常盲目的疏忽,並回答了我自己的問題(至少是讓我絆倒的部分!)

我有一個腳本可以啟動停止我的 Linux 路由器設置(設置防火牆規則、啟用 IP 轉發和偽裝等),並在停止命令上執行“反向”。停止部分中的一條線是:

iptables -P FORWARD DROP

這將FORWARD策略設置為DROP- 有效地終止數據包轉發,因此是我所有問題的原因!最後它就像添加一樣簡單

ip route add 192.168.2.0/24 via 192.168.1.2

路由到 Linux 路由器上的路由表。來自不同子網的數據包被正確轉發到192.168.1.1,如果需要,它們會從那裡進一步轉發,通過子網192.168.1.25 GW 為192.168.2.0/24

感謝 wurtel和user2999479,他們的回答讓我更深入地了解自己的設置 :)

引用自:https://unix.stackexchange.com/questions/249690