iptables / route 用於從原始介面(eth0)返回傳入流量
我剛剛開始修改 Linux / IPTABLES 並按照這個很棒的教程在這裡成功設置一個 RaspBerry Pi 設備(執行 RaspBerryPi OS / Debian)作為 VPN 網關。同一網路上的任何設備都可以手動配置其網路設置並將其路由設置為設備的 IP 地址,然後設備將通過 VPN 處理資訊,然後將其發送回(均來自同一個eth0介面)。
我遇到的問題是適用於 Linux 的 VPN 軟體 NordVPN在我從 VPN 斷開/註銷時會自動刪除tun0介面,導致網際網路不再在筆記型電腦上工作。我知道這是因為數據包仍被告知轉發,如果tun0介面不存在,這些數據包將無法返回到筆記型電腦。
當tun0不存在時,將eth0上的所有傳入流量簡單地返回到eth0的理想程序是什麼?
結構:
例如:筆記型電腦 → raspBerry pi (eth0 > tun0 > eth0) → 筆記型電腦
RaspBerry Pi 上的 iptables 如下:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i eth0 -p icmp -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P FORWARD DROP sudo iptables -P INPUT DROP
到目前為止,我的研究已經為我指出了幾個答案:
https://unix.stackexchange.com/a/322386
可能是這樣
ip route add table 2 default via 192.168.0.1
的:(我的主路由器的 IP 地址?)但是我還沒有嘗試過,並且不確定這是否是我應該前進的方向。
糾正一個常見的誤解:iptables不路由。它只是控制是否允許路由流繼續進行,但不會改變它們的方向(除非使用像 NAT 這樣可以改變路由命運的東西,仍然由路由堆棧完成)。這就是為什麼問題中最重要的事情應該是提供路由和路由表(對於這種情況,看起來也應該提供路由規則)。
一旦隧道介面消失,所有使用它的路由也將消失。您在其單個介面上獲得路由器路由:它的入口介面也是它的出口介面:eth0。
您只需要使用 iptables 啟用流,因為它的預設策略是丟棄轉發的數據包:
sudo iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT
這就是你所需要的。通常,您的 RPi 已經將其預設路由設置為使用 192.168.0.1 路由器,因此沒有其他事情可做。如果路線不是標準路線,則必須將它們添加到問題中並更新此答案。
以下是精美的印刷品:
- 當主機節點通過 RPi 發送數據包時,RPi 會檢測到它不是最佳路由,並會發回一些ICMP 重定向數據包以警告客戶端有更直接的路由可用:直接通過 192.168.0.1。節點可以選擇記憶體資訊並將其下一個數據包直接發送到該路由器,或者可以繼續使用 RPi,無論如何它也會繼續轉發這些數據包。實際的路由器肯定會直接將回復發送回主機節點,從而創建非對稱路由。因為這一切都發生在同一個 LAN 中,因此使用相同的介面,這應該沒問題,並且不會在任何地方觸發諸如嚴格反向路徑轉發之類的事情。
- 出於這個原因,在這種情況下,您不應該使用額外的 conntrack 規則(這些規則都可以)。不等同於所有數據包,因為從conntrack
-m conntrack --ctstate NEW,ESTABLISHED
的角度來看,會出現由繞過 RPi 的數據包引起的窗外 TCP 數據包,這些數據包將被標記為 INVALID(但必須允許轉發)。