1 linux networking virtual-machine debian bridge
根据 p。在 Chirammal 等人 (Packt, 2016)的Mastering KVM Virtualization的166 中,Virt-Manager 中的“Virtual Networks”选项卡允许创建三种虚拟网络:
查看链接到该选项卡的网络创建对话框,这似乎大致正确。
默认情况下,允许 Virt-Manager 在运行Debian 9 "Stretch"的 PC 上创建一个 NATed 虚拟网络,我看到sudo brctl show
收益(为了隐私而修改桥 ID):
bridge name bridge id STP enabled interfaces
virbr0 8000.5254009dcac5 yes virbr0-nic
Run Code Online (Sandbox Code Playgroud)
这引发了一些问题,例如:
virbr0
是网桥,那怎么还可以做NAT呢?virbr0
当我允许它创建一个虚拟网络时,Virt-Manager是唯一创建的东西,还是它创建了其他东西(例如,virbr0
连接到的虚拟 NAT 路由器)?virbr0
,网络拓扑是什么样的?以下是 iptables 和 ebtables 状态,如迄今为止的评论和答案中所述:
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc
$ sudo iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 1556 packets, 130K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 726 packets, 82025 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 15148 packets, 953K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 15148 packets, 953K bytes)
pkts bytes target prot opt in out source destination
84 11805 RETURN all -- any any 192.168.122.0/24 base-address.mcast.net/24
0 0 RETURN all -- any any 192.168.122.0/24 255.255.255.255
267 16020 MASQUERADE tcp -- any any 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
206 15656 MASQUERADE udp -- any any 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
1 84 MASQUERADE all -- any any 192.168.122.0/24 !192.168.122.0/24
$ sudo ebtables -L
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Run Code Online (Sandbox Code Playgroud)
如果
virbr0
是网桥,那怎么还可以做NAT呢?
好吧,它没有。但是系统本身在网桥中有一个端口,如果在网桥上设置了 IP 地址,那么它可以在网桥和其他接口之间进行路由/转发/NAT。
所以,假设你有,比如eth0
上行链路和virbr0
桥接虚拟机,它们显示为vmnic0
等等。然后你会有这样的事情:
^
|
eth0 (192.0.2.111 - your external IP)
|
[[ routing / NAT ]]
|
virbr0 (10.0.1.1 - this system on the VM bridge)
|
+--+-----+-----+-------+ (the bridging part)
| | ... | |
vmnic0 vmnicN
Run Code Online (Sandbox Code Playgroud)
这里,eth0
不是桥的一部分。如果是这样,VM 将桥接到外部网络而无需路由。(vmnic
s 可能以其他方式命名,我不记得使用的命名约定......)
ifconfig
或者ip addr
应该能够向您显示网桥 IP,并且您需要iptables -t nat -vL
查看 iptables NAT 规则。
现在,virbr0-nic
在您的示例中,显然是一个虚拟设备,用于为网桥提供一个不变的 MAC 地址。根据邮件列表中的解释libvirt-users
:
这是内核错误/功能的解决方法。网桥的 MAC 是从连接的第一个 NIC 复制的。因此,如果从桥接器上分离所有接口,然后只连接一个,桥接器将丢失以前的 MAC 并获得一个新的 MAC——就像连接的接口一样。
因此,如果 libvirt 必须确保虚拟网桥的 MAC - 它会创建这个虚拟设备(尽管没有流量通过)并将其附加到虚拟网桥。
归档时间: |
|
查看次数: |
700 次 |
最近记录: |