Linux

從 iptable 的角度理解 OpenVPN 網橋

  • September 2, 2014

在我的場景中,有一台機器同時充當基於 iptables 的防火牆和 OpenVPN 伺服器。它有兩個網路介面 -eth1連接到網際網路,而eth0連接到機器後面的 LAN。

到目前為止,我了解如何為基於路由/TUN的 VPN 連接配置 iptables。您可以在 openvpn.net 上找到以下視覺化:

|            FIREWALL            |
|                                |
{eth1                        eth0}
|   \                        /   |
|    +----------------------+    |
|    | iptables and         |    |
|    | routing engine       |    |
|    +--+----------------+--+    |
|       |                |       |
|     (openvpn)-------{tun0}     |
|                    10.8.0.1    |
+--------------------------------+ 

根據圖像,邏輯包流如下所示:

Internet –> eth1 –> iptables (通過 INPUT-chain) –> OpenVPN –> tun0 –> iptables (通過 FORWARD-chain) –> eth0 –> LAN

…如果我沒記錯的話,這應該會導致以下 iptables 規則:

# allow incoming and outgoing VPN traffic from/to the internet
iptables -A INPUT -i eth1 -p udp --dport 1194 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow traffic between tun0 and LAN
iptables -A FORWARD -i tun+ -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

到現在為止還挺好。我現在要做的是實現與上述完全相同的場景,但使用基於橋接/TAP的 VPN 連接,但我在理解邏輯包流和在橋接環境中創建 iptables 規則時遇到問題。

到目前為止我得到了什麼:

  • tun0被取代tap0
  • 我需要 eth0 和 tap0 之間的橋接介面,我們稱之為br0

為了簡單起見,我們假設 tap0 和 br0 都已經配置好了。

我沒有得到的是從 iptables 的角度來看的 paket 流程,尤其是 iptables 如何處理br0. 我的目標是創建與上述相同的視覺化和規則,但針對所描述的基於橋接/TAP 的環境。

編輯:我不必創建一個真實的生產就緒環境,不用擔心。我只是想了解它:)

就 iptables 而言,br0 可以被視為單個介面(例如,您可以匹配-i br0or -o br0,這將適用於到達或離開 tap0 以及 eth0 的數據包),但您也可以在規則中引用它的子介面使用physdev模組,例如-m physdev --physdev-in tap0.

請嘗試使您的問題更具體,我會嘗試更好地回答。

引用自:https://serverfault.com/questions/610353