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
选项。我保留了veth0
andveth1
在这里,但您确实应该考虑选择任何其他名称(例如veth-br0
和veth-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 static
或inet 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