
我有一個帶有兩個 Wi-Fi 介面的 dd-wrt 路由器 ( ath0
, ath1
)。我希望所有設備都ath0
沒有任何類型的 WAN 存取。僅 LAN(往返於設備)。
我該如何以最簡單、最穩健的方式做到這一點?
在我嘗試使用 ath1 之前,還新增了虛擬 AP、AP 的新橋接器以及一些進階路由和防火牆設定。但這太複雜了,我認為使用我的、未使用的ath0
(5GHz)介面來實現此目的應該會容易得多。
我使用 OpenVPN 作為客戶端,這讓事情變得有點複雜。當使用舊方法使用 iptables 防火牆時,我總是必須手動重新設置防火牆設置,因為 /etc/ 中的一個文件-I
由於 VPN 的原因會覆蓋我的規則(在頂部),允許所有 WAN 訪問,只要它結束VPN 。由於squashFS,我找不到一種方法來防止這種情況發生,而且在保存設定/重新啟動路由器後總是必須手動覆蓋它,這不太好。我也不確定以後是否會再覆蓋它。
我也不想ath0
存取 VPN。我無法將 iptables 與來源 IP 一起使用,因為它應該適用於該 SSID/介面上的所有客戶端,一旦它們連接,我就不會真正提前知道 IP。
我嘗試尋找此內容,但除了過於先進的虛擬 AP/橋接解決方案之外,我找不到任何適合我的情況的東西。
答案1
假設除了路由器上還有ebtables
(或) 之外,且所有 (W)LAN 介面都是同一個主介面的橋接從屬介面(例如名為):ebtables-nft
iptables
bridge0
ebtables -I INPUT -i ath0 -j mark --set-mark 0xabcd
iptables -I FORWARD -i bridge0 -m mark --mark 0xabcd -j DROP
(請注意,標記值0xabcd
是任意的。)
這會導致從「LAN 端」進入路由器的所有流量「停留在」廣播網域內。原因是,ebtables
'INPUT
不包括從網橋從站/連接埠到另一個網橋從站/連接埠的流量(即 L2 轉送)。對於以路由器本身為目標的內容(來自ath0
並因此被標記),我們不希望它們在 L3 上轉送(即能夠從“LAN”到“WAN”/VPN/...) 。
作為替代方案,您也可以不依賴 iptables 或資料包標記來完成此操作:
ebtables -I INPUT -i ath0 -d Unicast -p ip ! --ip-dst $ROUTER_LAN_IP -j DROP
雖然未經測試,但-d Unicast
應保持 DHCP 等工作。如果您還需要 IPv6(流量對於 L3 上的路由器)要工作,您可能需要/想要一個額外的鏈來處理更多例外情況(這也將允許您使用另一種方法允許 DHCP),例如:
ebtables -N ATH0
ebtables -A ATH0 -p ip --ip-dst $ROUTER_LAN_IP -j ACCEPT # unicast
ebtables -A ATH0 -p ip --ip-dport 67 -j ACCEPT # broadcast
ebtables -A ATH0 -p ip ... -j ACCEPT
...
ebtables -A ATH0 -p ip6 ... -j ACCEPT
...
ebtables -A ATH0 -j DROP
ebtables -I INPUT -i ath0 -j ATH0
但正如您所看到的,後一種方法要笨拙得多。
PS 我對所有 WRT 或類似的經驗都為零,所以我不知道如何使 xtables 規則在它們上持久存在。 (公平地說,據我所知,即使在「典型」Linux 發行版上,它也是特定於發行版的。)