我正在尝试虚拟化我的家庭服务器。我想为不同的目的创建多个虚拟机(1 个虚拟机用于 nf4 共享服务器,1 个虚拟机用于 owncloud,等等)。我需要能够从外部世界访问这些服务(在虚拟机中)。我正在使用 qemu/kvm 创建虚拟机(linux 主机、linux 和 windows 客户机)。这是我所做的:在主机上,我创建一个 tap 接口和一个网桥。然后我从 tap 接口和我的物理接口(eth0)中删除 IP。然后我将 eth0 和 tap0 接口添加到我的网桥(br0)。然后我将 IP 添加到我的网桥(与我从 eth0 中删除的 IP 相同),并将网桥上的默认网关更改为 eth0 上的网关。
sysctl net.ipv4.ip_forward=1
modprobe tun
ip tuntap add dev tap0 mode tap user ivailo
ip link add name br0 type bridge stp_state 0
ip link set br0 up
ip link set enp5s1 down
ip link set enp5s1 up promisc on
ip link set tap0 up promisc on
ip addr del 192.168.0.102/24 dev enp5s1
ip link set enp5s1 master br0
ip link set tap0 master br0
ip addr add 192.168.0.102/24 brd + dev br0
ip route add default via 192.168.0.1 dev br0
此后我的互联网就可以正常工作了。但当我使用以下方式启动 qemu VM 时
sudo qemu-system-x86_64 -drive file=/usr/share/ovmf/ovmf_code_x64.bin,format=raw,readonly=on,if=pflash -enable-kvm -machine q35 -cpu host -smp cores=4,threads=1,maxcpus=4 -m 4048 -net nic,macaddr=02:68:b3:29:da:98 -net tap,ifname=tap0,script=no,downscript=no -drive file=~/debian.iso,index=0,media=cdrom
我的虚拟机无法访问互联网(我无法 ping google.bg、主机或 LAN 上的任何 PC,“网络无法访问”)。我尝试在 VMWare 中执行同样的事情:
创建了 2 个带有 NAT 网络的虚拟机(它们可以相互通信,可以访问我的 LAN 和 Internet,但除了主机之外,我的 LAN 上的任何设备都无法访问它们(理应如此))。然后在第一个虚拟机中执行了我在主机上之前执行的相同操作(创建 tap、bridge、将 eth0 和 tap0 添加到 br0 并启动 qemu 虚拟机(使用相同命令))
第一个 vmware 虚拟机内的 qemu VM 能够访问互联网,我能够从第二个虚拟机访问/ping 它。这意味着我之前确实正确设置了一切。
所以我得出结论,问题出在我的路由器上。所以我要买一个新的。但是路由器是否需要支持 VLAN 标记才能做到这一点(将我的 VM 的 tap 设备桥接到我的物理设备并将端口转发到 VM)