因此,我一直在 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 隧道的封包流入專用網路的其餘部分並返回。