在我的场景中,有一台机器同时充当基于 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
。
请尽量使您的问题更加具体,我会尽力更好地回答。