Linux

iptables 轉發和路由

  • September 16, 2012

事實上,這個問題是關於 openwrt 和 CoovaAP的,但我想它在其他 linux 發行版中是一樣的。

我有兩個介面,一個“wan”和一個“wlan”介面。

預設情況下是否有任何過濾器,它限制哪些數據包從 wlan 介面轉發到 wan?

特別是如果路由器上的 wlan 介面是 192.168.1.1 並且連接到該介面的人在他的機器上輸入 172.16.1.1 作為 IP。他的數據包是否仍然轉發?路由決策是僅由目標 IP 做出還是受源影響?

我認為問題在於 172.16.1.1 機器的答案無法返回。iptables 轉發規則能否使介面表現得像一個開關?

如果我想轉發 172.16.x,我可以在這個物理介面上設置一個別名。還有其他方法嗎?

預設的Coova防火牆腳本只是說

iptables -A FORWARD -i $WIFI -o $WAN -j ACCEPT

我禁用了偽裝。

是否有可能以這種方式“分離”網路並依賴於此?有沒有辦法讓他的數據包使用非 192.168.1.x 地址轉發?

這個問題的原因是,在 WAN 介面後面是 WLAN 使用者無法訪問的機器。這些機器依賴於源 IP 地址。

是的,預設情況下有一個過濾器:預設情況下根本不轉發任何數據包。顯然已經關閉了。

還有第二個過濾器,可以啟用:反向路徑過濾器。如果啟用,進入介面的數據包將根據路由表檢查其源地址,以確保響應會從同一介面發出。如果不是,則丟棄該數據包。這是在./proc/sys/net/ipv4/conf/{all,default,*devname*}/rp_filter

除此之外,預設路由僅基於目標 IP。

至於你的第三個問題……如果你有一台機器配置為 172.16.1.1/24,並嘗試將其預設網關設置為 192.168.1.1,你可能會得到一個錯誤:預設網關無法訪問(有沒有通往它的路線)。如果你讓它接受並使用它(例如,通過向它添加路由),那麼它會將數據包發送到你的路由器。如果反向路徑過濾器關閉,那麼您的路由器將接受並路由數據包。任何回复都可能毫無用處:

  1. 他們甚至可能無法返回您的路由器。其他路由器知道將 192.168.1.0/24 的數據包發送到您的路由器,但不知道 172.16.1.0/24。假設您設置了路線以實現這一目標,那麼…
  2. 您的路由器不知道將 172.16.1.0/24 的數據包發送到哪裡。實際上——它可能認為它確實如此,並將它們發送到預設網關。如果您在路由器上設置路由以將它們發送回盒子…
  3. 那麼它可能會起作用。

替代方法是向您的 wlan 介面添加另一個 IP 地址。路由器在其路由的每個子網上至少有一個 IP 地址是很正常的。您不需要別名介面來執行此操作,只需使用ip:添加第二個 IP ip addr add 172.16.1.254/24 dev wlan。通常在單路由器子網上,第一個可用的 IP 是路由器,但這只是為了方便;這不是技術要求。

iptables適用於流經盒子的所有 IP 流量。這包括本地生成和轉發的流量。

您可以使用brctl支持來實際橋接 wan 和 wlan(將它們變成開關),但聽起來您不想這樣做。ebtables您可以使用(not )過濾網橋iptables

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