
我有兩個網路和路由器(都在 Shibby 的 Advanced Tomato 上),佈局如下:
- 備援路由器網路(192.168.1.1/24)
- 廣域網路 - Xfinity
- LAN - 少量用戶端。重要的是,主網路路由器是該網路上的用戶端。
- 網路介面
- br0-本地。路由器的 IP 為 192.168.1.1
- eth0-Xfinity
- eth2 - 無線網路 - 這是備份網路作為無線客戶端連接的網絡
- 主路由器網路(192.168.2.1/24)
- 廣域網路 - 光纖
- LAN - 連接到網狀網路存取點。家裡幾乎所有設備都透過這些網狀網路存取點連接到主網路。特別重要的是我的本機 NAS 和服務主機,例如 Plex、印表機和遊戲桌面。
- 負載平衡 - 此路由器是備援網路路由器上的“無線用戶端”,並且具有啟用負載平衡的多 WAN。
- 網路介面
- br0-本地。路由器的 IP 為 192.168.2.1
- eth0 - 光纖
- eth2 - 備份網路上的用戶端,IP 為 192.168.1.81
它是如何運作的:只要客戶端在主網上,系統就可以正常運作。他們能夠存取 NAS、印表機等。
問題:
當客戶端位於備份網路上時會出現此問題。備份網路上的用戶端無法存取主網路上的 NAS、印表機等。
我嘗試過的:我嘗試允許備份路由器使其客戶端能夠到達主路由器網路。我發現一些文章提到了這樣做並執行了以下步驟:
- 我嘗試將以下 iptables 轉發添加到備份網絡
iptables -I INPUT -i br0 -j ACCEPT
iptables -I FORWARD -i eth2 -d 192.168.2.0/24 -j ACCEPT
iptables -I FORWARD -i br0 -d 10.9.8.0/24 -j ACCEPT
在備份網路和主網路上啟用 ip 封包轉送 透過執行
echo 1 > /proc/sys/net/ipv4/ip_forward
新增ip路由
ip route add 192.168.2.0/24 via 192.168.1.81
問題
不幸的是,這不起作用。當我嘗試從備用網路路由器 ping 192.168.2.1 時,收到錯誤 - Unable to ping From 192.168.1.1 icmp_seq=1 Redirect Host (New nexthop 192.168.1.81)
。
我的猜測是我搞砸了 iptables 部分。我不完全明白我在那裡做什麼。如果有人可以提供幫助,我將非常感激。
答案1
我嘗試將以下 iptables 轉發添加到備份網絡
FORWARD 規則似乎與您的網路描述不符:
到達備份路由器 eth2 的封包(即來自主路由器)將使用 192.168.2.0/24 作為其位址來源,不是目的地;同樣,發送到 192.168.2.0/24 的封包將退出 eth2,而不是進入它(即,如果這是
-d
,那麼它應該是-o eth2
)。如果您在兩個方向上可視化資料包,您應該看到以下內容:
來源位址 目標地址 輸入介面 輸出介面 192.168.1.0/24 192.168.2.0/24 →br0 以太坊2→ 192.168.2.0/24 192.168.1.0/24 →eth2 br0→ 您可以僅使用
-s
and-d
或使用介面等新增規則。匹配的通過任何數據包。10.9.8.0/24 網路似乎沒有涉及任何地方。
INPUT 規則是不相關的,因為您的封包都沒有「輸入」到路由器 – 只有當您 ping 路由器的封包時才會發生這種情況自己的地址。
例如,如果您要對主路由器執行 ping 操作,則對於備份路由器來說,這將是“轉發”,對於主路由器來說,這將是“輸入”。但是,如果您從一個客戶端 ping 另一個客戶端,則對於所有涉及的路由器,這將被分類為「轉發」(而僅對於客戶端本身而言,將被分類為「輸入」)。
雖然這是必要的,但通常應該是在新增路由之後而不是之前執行的步驟。請始終記住,IPtables 僅控制資料包是否允許向特定方向轉發,但不控制在哪裡它們應該被轉發——路由表首先決定這一點,然後您可以據此自訂 iptables FORWARD 規則。
在備份網路和主網路上啟用 ip 封包轉送 透過執行 echo 1 > /proc/sys/net/ipv4/ip_forward
它們是路由器——Tomato 韌體在出廠時就已經啟用了封包轉送功能,因為這基本上就是路由器的用途,也是您現在存取網路的方式。
當我嘗試從備份網路路由器 ping 192.168.2.1 時,收到錯誤 - 無法從 192.168.1.1 icmp_seq=1 重定向主機(新下一跳 192.168.1.81)執行 ping 操作。
這不是一個錯誤。這是一條可選訊息,其中備份路由器指示有更直接的路徑可用(繞過路由器);你通常會看到它另外對於通常的反應。
實際的錯誤是沒有回复,這很可能是由“備份”路由器的或者「主」路由器的防火牆規則會阻止該方向的封包。
使用 tcpdump ( tcpdump -n -i ... "icmp"
) 檢查封包到達和退出的位置:
- 他們是否達到了主要的路由器的eth2介面?
- 如果不這樣做,則備用路由器不會轉送它們(iptables 或路由表可能是錯誤的)。
- 如果到達:它們是否也到達主路由器的 br0 介面?
- 如果不這樣做,則主路由器不會轉送它們(它已經有到達目的地的本地路由,這使得它的 iptables 規則不允許這樣做)。
- 如果他們確實到達 br0:客戶端是否嘗試回應?
- 如果沒有,則客戶端自己的防火牆可能會阻止它。