我有一个 debian 12 无头服务器,我在其中运行多个服务。我安装了 KVM 并创建了一个虚拟机来托管 freePBX。我希望可以从主机网络访问 freePBX。无头主机和虚拟机都应该有静态 IP 配置,所以我出去执行了以下操作: 我已经在主机
/etc/network/interfaces.d/br0
中创建了一个桥接配置,其中包含以下信息
auto br0
iface br0 inet static
address 192.168.1.254
broadcast 192.168.1.255
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
bridge_ports eno1
bridge_stp off # disable Spanning Tree Protocol
bridge_waitport 0 # no delay before a port becomes available
bridge_fd 0 # no forwarding delay
我从我的
/etc/network/interfaces
中删除了所有eno1信息,现在我只剩下以下内容
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
我在
/root/bridged.xml
中创建了一个桥接配置 xml,其中包含以下内容
<network>
<name>br0</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>
将其加载到 KVM 中,我在 VM 配置文件中看到它。
sudo virsh net-define --file /root/bridged.xml
sudo virsh net-autostart br0
sudo virsh net-start br0
<interface type='bridge'>
<mac address='52:54:00:6d:2d:69'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
虚拟机设置为静态获取 192.168.1.249 地址,但我在主机网络中仍然看不到它。
更多可能有帮助的信息:
root@box:~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.82008c934457 no eno1
vnet0
docker0 8000.0242e0629ca2 no vethc2a76a0
vethc383b80
root@box:~#
root@box:~# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether ec:b1:d7:66:1c:da brd ff:ff:ff:ff:ff:ff
altname enp0s25
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 82:00:8c:93:44:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.254/24 brd 192.168.1.255 scope global br0
valid_lft forever preferred_lft forever
inet6 2a02:2149:8bcc:d400:8000:8cff:fe93:4457/64 scope global dynamic mngtmpaddr
valid_lft 86240sec preferred_lft 86240sec
inet6 fe80::8000:8cff:fe93:4457/64 scope link
valid_lft forever preferred_lft forever
..........................................
103: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:6d:2d:69 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe6d:2d69/64 scope link
valid_lft forever preferred_lft forever
root@box:~#
通过 ssh 隧道通过 freepbx 控制台上的 VNC 连接时,我无法从主机网络 ping 任何内容,因此目前我认为虚拟机已与网络断开,即使它位于 br0 桥中。
这是我第一次仅使用 CLI 在无头系统上设置 KVM,因此我可能会不知所措并错过一些明显的东西。我缺少什么?我该如何进一步解决该问题?
正如我所说,这很容易。显然我必须对主机上的网桥进行 NAT。问题解决了。
sudo iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i br0 -o br0 -j ACCEPT
sudo iptables -I FORWARD 1 -i br0 -o br0 -j ACCEPT