将一个物理端口专用于 proxmox 中的一个虚拟端口(无需 libvirt)

将一个物理端口专用于 proxmox 中的一个虚拟端口(无需 libvirt)

我只需要将 1 个主机物理端口专用于 1 个来宾虚拟端口,无需 libvirt 的帮助。

主机有:

  • 2 个物理接口:eth0 和 eth1
  • 1个虚拟网桥(vmbr0),包括所有VM的虚拟接口
  • eth0 与 vmbr0 处于桥接模式。由于所有访客和主机都位于同一子网 (192.168.247.0/24)。

这是我的配置/etc/network/interfaces

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth1 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.247.2
        netmask 255.255.255.0
        gateway 192.168.247.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

eth1 必须连接到 ISP 调制解调器。因此 eth1 将退出互联网。我想将 eth1 专用于虚拟防火墙,该防火墙是主机中的虚拟机之一。虚拟防火墙将完成所有路由工作,而不是主机。

据我所知,对于该任务,我必须使用 MacVTap (macvlan),但我看到的所有指南都是针对 KVM+libvirt,而且我没有 libvirt!Proxmox 正在执行所有“用户友好的任务”

正如您可以在下面看到的,现在只启用了 1 个虚拟机,它是接口 Tap101i0 和 Tap101i1,其中 Tap101i0 假设位于 vmbr0 中,并与主机的 eth0 共享相同的子网掩码。并且tap101i1必须与主机的eth1 100%绑定,因此它将退出互联网。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP mode DEFAULT group default qlen 1000
    link/ether 00:15:17:50:95:66 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 00:15:17:50:95:67 brd ff:ff:ff:ff:ff:ff
6: tap101i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 06:97:77:30:cc:a7 brd ff:ff:ff:ff:ff:ff
7: tap101i1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether ce:b4:f3:40:38:0d brd ff:ff:ff:ff:ff:ff
8: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 00:15:17:50:95:66 brd ff:ff:ff:ff:ff:ff

答案1

您可以使用 macvlan 来实现此目的。

  1. 在 eth1 上创建 macvlan 接口:
    ip link add link eth1 name macvlan1 type macvlan mode bridge
    
  2. 为 macvlan 接口分配 IP 地址。 VM 将使用此 IP 地址:
    ip addr add 192.168.247.3/24 dev macvlan1
    
  3. 调出 macvlan 接口:
    ip link set macvlan1 up
    
  4. 获取虚拟机的PID(替换vm-name为实际名称):
    ps aux | grep [v]m-name
    
  5. 将 macvlan 接口添加到虚拟机的网络命名空间(替换PID为实际的 PID):
    ip link set macvlan1 netns PID
    
  6. 打开虚拟机内的 macvlan 接口(再次替换 PID):
    ip netns exec PID ip link set macvlan1 up
    

现在,虚拟机应该能够使用 eth1,就像直接连接到它一样。该虚拟机的 IP 地址为 192.168.247.3,并且能够通过 eth1 与互联网进行通信。

相关内容