如何通过私有链接启用虚拟机的外部访问?

如何通过私有链接启用虚拟机的外部访问?

我想对 KVM-QEMU 的虚拟网络进行基准测试。为此,我用一根线连接了两台服务器(服务器 1 和服务器 2)。我使用服务器 1 运行 QEMU VM,并希望从服务器 2 访问此 VM。
以下是配置概述。

           o ens5f0    (ip 192.168.11.12/24)
           |
           | (server 2)
 ------------------------- (Host/Network boundary)
           "
           "
 ------------------------- (Host/Network boundary)
           | (server 1)
           |
           o ens5f0 
           |
           o br0.      (ip 192.168.11.11/24)
           |
 ------------------------- (VM/Host boundary)
           | (guest)
           |
           o (enp0s2) inside VM
             (ip 192.168.11.77/24 (from dhcp))

我遵循了文档这里.我在服务器1上配置一个网桥并ens5f0为其添加接口。

server 1
---------------------
ip link add br0 type bridge
ip link set ens5f0 master br0
ip addr flush dev ens5f0
ip addr add 192.168.11.11/24 dev br0
ip link set dev br0 up
dnsmasq --interface=br0 --bind-interfaces --dhcp-range=192.168.11.12,192.168.11.254
ip link set dev ens5f0 up

然后我使用以下命令启动 QEMU。

server 1
---------------------
qemu-system-x86_64 \                                                                                                         
   -initrd initrd.img-5.4.0-84-generic \                                                                                     
   -kernel vmlinuz-5.4.0-84-generic \                                                                                        
   -nographic -monitor none -serial stdio\                                                                                   
   -append 'root=/dev/vda1 console=ttyS0' \                                                                                  
   -machine q35 -cpu host \                                                                                                  
   -drive "file=${disk_img_snapshot},format=qcow2,if=virtio" \                                                               
   -nic bridge,br=br0,model=virtio-net-pci \                                                                                 
   -enable-kvm \                                                                                                             
   -m 2G \                                                                                                                  
   -smp 4 \                                                                                                                 
;  

在虚拟机内部,接口enp0s2获取 IP 地址192.168.11.77/24

VM
--------------------
~$ sudo ip addr show enp0s2
2: enp0s2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000                                  
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.77/24 brd 192.168.11.255 scope global dynamic noprefixroute enp0s2                                                 
       valid_lft 3531sec preferred_lft 3531sec

ping命令可以从服务器 1 访问此 IP 地址,并且还可以从 VM 访问 IP 地址 192.168.11.11。

在第二台服务器上,我将 IP 地址配置为静态,等于 192.168.11.12/24。

server 2
------------------------
$ ip addr add 192.168.11.12/24 dev ens5f0

$ ping 192.168.11.11
PING 192.168.11.11 (192.168.11.11) 56(84) bytes of data.
64 bytes from 192.168.11.11: icmp_seq=1 ttl=64 time=0.327 ms
64 bytes from 192.168.11.11: icmp_seq=2 ttl=64 time=0.153 ms

问题是无法从服务器 2 访问 IP 地址 192.168.11.77,并且 VM 无法 ping 通服务器 2。我该如何通过此链接启用对 VM 的外部访问?

答案1

您可以运行 tcpdump -i br0 来查看路由上的内容。

相关内容