从 iptable 的角度理解 OpenVPN 桥接

从 iptable 的角度理解 OpenVPN 桥接

在我的场景中,有一台机器同时充当基于 iptables 的防火墙和 OpenVPN 服务器。它有两个网络接口 - 一个eth1连接到互联网,另一个eth0连接到机器后面的 LAN。

到现在为止,我理解了如何配置 iptables路由/TUN基于 VPN 连接。您可以在 openvpn.net 上找到以下可视化效果:

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

根据图像,逻辑数据包流如下所示:

Internet --> eth1 --> iptables(通过 INPUT 链)--> OpenVPN --> tun0 --> iptables(通过 FORWARD 链)--> 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 的角度来看数据包流,尤其是 iptables 如何处理br0。我的目标是创建与上述相同的可视化和规则,但针对所述桥接/基于 TAP 的环境。

编辑:我不需要创建一个真实的、可用于生产的环境,不用担心。我只是想了解它 :)

答案1

就 iptables 而言,br0 可被视为单个接口(例如,您可以匹配-i br0-o br0,这将适用于到达或离开 tap0 以及 eth0 的数据包),但您也可以使用模块在规则中引用其子接口physdev,例如-m physdev --physdev-in tap0

请尽量使您的问题更加具体,我会尽力更好地回答。

相关内容