我们希望运行一个具有多个QEMU的服务器,其中一些VM应该连接到单独的VLAN。主机通过键连接到交换机,并且应该有一个VLAN感知的桥接器,所有VM都连接在其中(就像一个真正的VLAN交换机,但在软件中)。网桥本身被分配给主机的IP,并且这个主机应该能够访问VM。为了保护主机/桥/主LAN,主机上的一些VM接口应该使用iptables (VM之外的iptables)过滤(传入和传出)。
测试服务器是一台具有4个端口和Ubuntu20.4服务器的超级微型机。这是连接到一个小型Zyxel GS-1900交换机,这反过来连接到我们的局域网网络(HP基础设施)。我们从PVID 1和已经在堆栈和WLAN AP上设置的VLAN 55开始。开关端口具有PVID 1和标记VLAN 55。在物理网络上一切都应该是好的。对于我甚至没有设置VM的测试,它只是一个普通的操作系统,我将VLAN 55中的一个IP分配给VLAN接口。我们不使用netplan、NetworkManager或systemd配置。我们只是使用/etc/网络/接口。
我不能让Ubuntu主机使用VLAN感知的桥接器来玩VLAN.进入VLAN 55会导致ARP谁有--就这样。我可以在VLAN接口(tcpdump)上看到它,但在任何其他接口上都看不到它。为什么ARP没有通过?如果ARP通过了,剩下的会起作用吗?
我们用手尝试了每一件事,我们完全不知道我们错过了什么。我们甚至重新安装了机器。我们卡住了。
这些都是我们认为应该有效的命令。但他们没有:
ip link add bond0 type bond
ip link set bond0 type bond miimon 100 mode balance-alb
ip link set eth0 down
ip link set eth0 master bond0
ip link set bond0 up
ip link add br0 type bridge
ip link set br0 up
ip link set br0 type bridge vlan_filtering 1
ip link set bond0 master br0
ip link add venet0 type veth peer venet0_0
ip link set venet0 master br0
bridge vlan add dev venet0 vid 55 master
bridge vlan del dev venet0 vid 1
bridge vlan add dev bond0 vid 55
ip address add dev venet0_0 192.168.55.0/24
ip address add dev br0 10.233.202.2/22
ip link set venet0 up
ip link set venet0_0 up
我们没有看到错误,结果看上去是正确的。br0接口可以平分本地VLAN55接口,也可以在设置默认gw的情况下进入世界。但是VLAN接口除了它本身,什么也不能平。问题是没有arp响应,因为在任何其他端口上都看不到arp。
ip链路显示的输出是:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 3c:ec:ef:33:8a:74 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 3c:ec:ef:33:8a:75 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 3c:ec:ef:33:8a:76 brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 3c:ec:ef:33:8a:77 brd ff:ff:ff:ff:ff:ff
15: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000
link/ether 3c:ec:ef:33:8a:74 brd ff:ff:ff:ff:ff:ff
16: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 3c:ec:ef:33:8a:74 brd ff:ff:ff:ff:ff:ff
inet 10.233.202.2/22 scope global br0
valid_lft forever preferred_lft forever
17: venet0_0@venet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether de:d7:d5:3c:ed:91 brd ff:ff:ff:ff:ff:ff
inet 192.168.55.5/24 scope global venet0_0
valid_lft forever preferred_lft forever
18: venet0@venet0_0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000
link/ether 72:48:95:e5:9a:47 brd ff:ff:ff:ff:ff:ff
网桥vlan的输出显示:
port vlan ids
bond0 1 PVID Egress Untagged
55
br0 1 PVID Egress Untagged
venet0 55 Egress Untagged
路由-n显示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.233.202.0 0.0.0.0 255.255.252.0 U 0 0 0 br0
192.168.55.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0_0
并展示了tcpdump -nlpvvvi venet0_0 (.254可通过物理交换机获得):
14:38:47.657112 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.55.254 tell 192.168.55.5, length 28
上面所示的配置可以在互联网上的几个地方找到,并被报告为工作。我们在这里做错什么了?
非常感谢!
编辑:
在tcpdump中,我刚刚看到一个数据包从一个接入点进入venet0_0,它告诉我一个客户机已经漫游了。奇怪..。
添加了以下非常琐碎的图片
ip link add bond0 type bond
ip link set bond0 type bond miimon 100 mode balance-alb
ip link set eth0 master bond0
ip link set bond0 up
ip link add br0 type bridge
ip link set br0 up
ip link set br0 type bridge vlan_filtering 1
ip link set bond0 master br0
ip link add venet0 type veth peer venet0_0
ip link set venet0 master br0
bridge vlan add dev venet0 vid 55 untagged pvid
bridge vlan del dev venet0 vid 1
bridge vlan add dev bond0 vid 55 master
ip link set venet0 up
ip link set venet0_0 up
这最终被用于/etc/网络/接口
感谢尼基塔·基普里亚诺夫
这是我所做的/etc/网络/接口部分。关于Nikita的评论,似乎可以在不需要所有后置节和命令的情况下编写文件。我只知道来自ethY.XX的vconfig/vlan的旧表示法,我不知道这是如何使用新的桥接命令的;这就是为什么我使用所有的后置/预置。下面是接口文件:
auto eth0
iface eth0 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0
auto bond0
iface bond0 inet manual
bond-slaves eth0 eth1
bond-mode balance-xor
bond-miimon 100
bond-updelay 200
bond-downdelay 200
bond-xmit-hash-policy layer3+4
auto br0
iface br0 inet static
bridge_ports bond0
bridge_stp on
bridge_vlan_aware yes
address 10.233.202.2/22
gateway 10.233.200.254
post-up ip link set br0 type bridge vlan_filtering 1
post-up ip link set br0 type bridge nf_call_iptables 1
post-up ip link set br0 type bridge nf_call_ip6tables 1
post-up ip link set br0 type bridge nf_call_arptables 1
post-up ip link add br0p1 type veth peer br0p1c
post-up ip link set br0p1 master br0
post-up bridge vlan del dev br0p1 vid 1
post-up bridge vlan add dev br0p1 vid 55 untagged pvid
post-up bridge vlan add dev bond0 vid 55
pre-down bridge vlan del dev bond0 vid 55
pre-down ip link del dev br0p1
auto br0p1
iface br0p1 inet manual
对于-m的vlan接口上的iptables,可以做
modprobe br_netfilter
和
echo 1 >/proc/sys/net/bridge/bridge-nf-filter-vlan-tagged
发布于 2022-09-28 13:19:53
您缺少了venet0
桥端口上VLAN55上的"PVID“设置。它并没有出现在bridge vlan show
中。
您将此标记设置为“均衡器”,这意味着任何离开系统到此接口的未标记数据包都将使用VLAN 55进行标记。缺少的PVID设置正好相反:它告诉系统去掉VLAN标签55,然后在没有标签的情况下呈现给系统。现在,它不做这个标签剥离。
要验证这一点,使用当前配置,使用附加的-e
交换机重新运行tcpdump命令(显示以太网信息)。它应该显示,您从该接口看到的数据包仍然被标记;这就是为什么Linux忽略它们的原因。
是的,正如您可能已经猜到的,Linux能够执行非对称VLAN。
要启用正确的标记处理(使事物对称--这正是您所期望的),请使用
bridge vlan add dev venet0 vid 55 untagged pvid
而不是你的bridge vlan add dev venet0 vid 55 master
。
此外,Debian网络脚本的/etc/network/interfaces
允许更多模块化配置,这是您通过放置这一大串命令获得的配置。它本机能够建立纽带、vlan、网桥(包括vlan感知的)。更好的使用,不要把这个可怕的脚本生,它违背了网络初始化系统的目的!
https://serverfault.com/questions/1111595
复制相似问题