了解路由設備中的 iptables

了解路由設備中的 iptables

因此,我一直在 stunnel、OpenVPN 和許多線上文章(主要是來自蔡登)並且可以成功創建一個,但我不完全理解 iptables 部分(如下所述),儘管我已經閱讀了一些有關該主題的在線幫助。

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

誰能解釋一下每一行嗎?我知道這可能很簡單,但老實說我不明白為什麼這有效=P

非常感謝提前=)

答案1

首先,我們需要定義IP轉送。我不會很深入地解釋(我也不知道),但基本上,在這種情況下,您需要知道的是,它意味著資料包透過該主機從一個主機流向另一個主機。

我必須指出,-A FORWARD ... -j ACCEPT除非您有-P FORWARD DROP或類似的規則/命令(即丟棄任何應該轉發的資料包),否則任何規則/命令都是不必要的。這些規則不會使轉送發生,而只是在預設值不是“ACCEPT”時例外。 (您可以使用 sysctl“啟用”轉發。)

現在我們可以看看規則:

iptables -A FORWARD -i wlan0 -j ACCEPT

這意味著允許轉發來自 wlan0 的封包(透過該主機上的任何介面轉送到其他網路)。

iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

這意味著允許從 wlan1 傳入的封包轉發到 tun0。 (請注意,封包到達 tun0 本身的位址不需要這樣做,因為這不算「轉送」。)

iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED

這表示只有當存在相關或已建立的連線時,才允許從 tun0 傳入的封包轉送到 wlan1,並使用擴充/模組進行檢查state(它已被 廢棄conntrack,而是使用交換器--ctstate)。與前一條規則一起,本質上它們意味著允許 tun0 和 wlan1 之間的轉發,只要連接不是由來自 tun0 的封包發起的。

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

這基本上意味著從 tun0 發出的資料包的來源位址將更改為 tun0 的。如果不這樣做,下一個路由器將需要有返迴路由,以便任何回應到達原始來源位址。 (即要到達原始來源位址,該主機應該是網關)。這也稱為 NAT(過載)/PAT。可以將其視為使 tun0 像典型消費級路由器的 WAN 連接埠/介面一樣運作。

答案2

要理解這一點,你必須了解路由的原理。然而,我不能在這個答案中寫一本書,所以我會保持簡短。

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

這個規則基本上是取包,適用網路位址轉換,但在決定如何路由該包之後。這就是為什麼它被應用到POSTROUTING.然後它將封包傳送回名為 的隧道tun0。這是您的 VPN 連線。它也應用偽裝,因為該規則不知道設備的 IP。如果沒有它,您需要對每個連接的裝置使用此命令。所以你可以將其視為某種通配符。

iptables -A FORWARD -i wlan0 -j ACCEPT 
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

此行表示接受轉送至該wlan0介面的所有流量。我假設wlan0在本指南中用作主要互聯網連接,因此這是路由器和 VPN 隧道之間的主要路由。這使得 Pi 在此介面上接受套件並給出造訪內網。這裡的第二行基本上就是回傳包的方法。從圓周率,回到隧道。

iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT

該線路允許來自隧道的流量tun0到達接口wlan0,但前提是連接已建立。已確立的之前。

簡而言之,這些規則允許來自 VPN 隧道的封包流入專用網路的其餘部分並返回。

相關內容