如何连接 2 个虚拟网桥,以便流量从一个虚拟网桥传输到另一个虚拟网桥?

如何连接 2 个虚拟网桥,以便流量从一个虚拟网桥传输到另一个虚拟网桥?

Debian系统,现状,通过etc/network/interfaces配置

网桥“br0”有 2 个物理以太网接口 eth0(WAN 侧,连接到 ISP 调制解调器/路由器) eth1(LAN 侧连接到物理交换机)

eth0 和 eth1 之间的流量作为 IPS 通过 IPtables 防火墙和 Suricata。此设置目前工作正常。

现在我想通过 Linux 容器将“pi-hole”添加到此设置中。 Linux 容器需要一个虚拟网桥来添加其虚拟以太网接口。

所以我想实现以下目标:

虚拟网桥“br0” - 带有 eth0 (WAN)

<-->

连接到虚拟网桥“lanbr0” - 使用 eth1 (LAN) - 使用 veth0(LXC 的虚拟以太网接口)

这样,如果将来需要,我可以向“lanbr0”桥添加更多接口。

编辑 我可以通过以下命令 ip link add veth0 type veth peer name veth1 来完成此操作

然后将 veth0 添加到 br0,将 veth1 添加到 lanbr0 + 在启动所有接口后将 eth1 从 br0 移动到 lanbr0

但是,我如何通过 /etc/network/interfaces 执行此操作(以便它在启动过程中加载,如下所示?

答案1

没有专门处理虚拟双接口的规定type veth。因此,主要通过使用来进行一些修补pre-up选项。我保留了veth0andveth1在这里,但您确实应该考虑选择任何其他名称(例如veth-br0veth-lanbr0),因为如果未提供这些名称,则这些是默认选择的名称(例如:ip link add type veth),并且它们可能会发生冲突。

对于veth接口:

iface veth0 inet manual
        pre-up ip link add veth0 type veth peer name veth1 || :
        hwaddress 02:00:00:01:00:00

iface veth1 inet manual
        pre-up ip link add veth1 type veth peer name veth0 || :
        hwaddress 02:00:00:01:00:01

这会在启动其中任何一个时启用两个界面。这里|| :不会失败,因为对等接口已经由“其他”接口设置。请注意,出于ifup内部状态的考虑,即使提出一个会导致另一个出现,最终也应该提出两者。对于预期用途,它hwaddress可能是可选的,并且无论如何都可以设置为任何其他正确的值。网桥获取第一个从属接口的 MAC 地址。

现在在桥梁中使用它们。我不会把你所有的设置(因为你并没有真正给出),只是veth相关的部分。你将不得不调整我无法猜测的内容以及我在哪里留下了一些XXXX...(例如,是inet XXXX inet manual inet staticinet dhcp?)

auto br0
iface br0 inet XXXX
    pre-up ifup veth0
    bridge_ports eth0 veth0        
    ...

auto lanbr0
iface lanbr0 inet XXXX
    pre-up ifup veth1
    bridge_ports veth1 eth1
    address xx.xx.xx.xx
    netmask 255.255.255.0
    ...

注意我ifup vethX在里面添加了一个命令,否则它会抱怨接口不存在,将启动没有此接口的桥并认为它已完成。我不必|| :在这里使用,因为调出一个已经逻辑上(意思ifupdown是状态)的接口并不是一个错误。

完成缺少的部分后,将它们放入单独的(或不)配置文件中/etc/network/interfaces.d(甚至/etc/network/interfaces),这应该可以工作。

如果一开始不起作用,请尝试从逻辑上关闭所有接口(逻辑上我的意思是使用ifdown),然后重试:这是因为错误的逻辑状态阻止了某些接口正确(重新)配置。

另请注意,可能会与其他网络管理器进行交互,例如... NetworkManager。可能有一些选项可以让他们忽略某些接口,但这超出了本答案的范围。

答案2

作为参考,这里是完整的接口脚本(为某些地址添加 xx):

# The loopback network interface
auto lo
iface lo inet loopback

# IPv4 address
auto enp8s0
iface enp8s0 inet manual
        offload-gro off
        offload-lro off

auto enp0s31f6
iface enp0s31f6 inet manual

iface veth0 inet manual
        pre-up ip link add veth0 type veth peer name veth1 || :
        hwaddress 02:00:00:01:00:00

iface veth1 inet manual
        pre-up ip link add veth1 type veth peer name veth0 || :
        hwaddress 02:00:00:01:00:01

# Bridge setup
auto br0
iface br0 inet static
    pre-up ifup veth0
    bridge_ports enp8s0 veth0
    bridge_fd 0
    bridge_maxwait 0
        address 192.168.xx.xx
        broadcast 192.168.xx.xx
        network 192.168.xx.xx
        netmask 255.255.255.0
        gateway 192.168.xx.xx
        dns-nameservers xx.xx.xx.xx xx.xx.xx.xx

auto lanbr0
iface lanbr0 inet manual
    pre-up ifup veth1
    bridge_ports veth1 enp0s31f6

再次感谢AB

相关内容