eth0
我在物理以太网接口和 OpenVPN 虚拟接口之间设置了一座桥tap0
。网桥有一个 IP 地址,并且可以从任一接口通过该 IP 地址联系机器。但是,我不知道如何配置才能使流量在接口之间的桥上流动。
桥接需要net.ipv4.ip_forward = 1
设置,还是路由需要设置?
我应该如何配置FORWARD
链iptables
?理想情况下,仅应转发接口之间的流量,以便该计算机不能用作网络内的跳出点。
答案1
您不需要设置,ip_forward = 1
除非该接口充当其他设备的 NAT,如果您将它们设置为网桥,则不应出现这种情况。
例子
这是我的 KVM 服务器设置,其中有一个桥接设备、br0
物理以太网设备eth0
以及 KVM 来宾的所有接口。
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.bcaec123c1e2 no eth0
vnet0
vnet1
vnet2
vnet3
vnet4
vnet5
virbr0 8000.52540003f256 yes virbr0-nic
那么出了什么问题呢?
根据您的描述,听起来您没有路由规则将数据包从一个接口路由到另一个接口。
主机与桥$ ip route show
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.200
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
169.254.0.0/16 dev br0 scope link metric 1008
default via 192.168.1.1 dev br0
具有属于网桥成员的 NIC 的主机
$ ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.218
169.254.0.0/16 dev eth0 scope link metric 1002
default via 192.168.1.1 dev eth0
但是,您可能会遇到将tap0
设备和物理以太网设备混合eth0
到网桥中的问题。
桥梁中的分接设备
如果您使用的是 TAP 设备,tap0
您可能需要配置防火墙以允许这些数据包在网桥上来回流动。
现在设置 Linux 防火墙以允许数据包在新创建的 tap0 和 br0 接口上自由流动:
$ sudo iptables -A INPUT -i tap0 -j ACCEPT
$ sudo iptables -A INPUT -i br0 -j ACCEPT
$ sudo iptables -A FORWARD -i br0 -j ACCEPT