VM 的 systemd 桥接 + 多个静态 IP

VM 的 systemd 桥接 + 多个静态 IP

我有一台 Ubuntu 18.04 服务器,有 3 个公网 IP。主 IP 已经预先配置好了。

我想配置 IP2 和 IP3。IP2 将用于 SSL 域,IP3 将用于虚拟机 (qemu libvirt)。问题(对我来说)是,以前的 Ubuntu 版本使用 upstart,我可以配置它,但当前版本有 systemd,我无法解决它。

以前,我使用以下方法进行配置,并且一切正常: https://wiki.hetzner.de/index.php/Netzkonfiguration_Debian/en#Routed_.28brouter.29

现在,使用 systemd,这是我开始使用的网络配置文件(仅具有 1 个 IP):

# /etc/systemd/network/10-eno1.network
[Match] 
Name=eno1 

[Network]
Gateway=IP_GATEWAY

[Address] 
Address=IP1
Peer=IP_GATEWAY/32 

添加 IP2(用于 SSL)很容易,因为它只需要在上面的文件中添加一个额外的 [地址] 部分。

至于 IP3,我猜想为了将 IP3 路由到我的虚拟机,我需要像原始操作指南中那样创建一个桥接器。因此,当尝试为虚拟机配置 qemu/libvirt 桥接器时,我最终得到了与此配置非常相似的结果: https://bbs.archlinux.org/viewtopic.php?id=193994 即 - br0 设备 + eno1 添加到网桥 + 像上面一样配置网桥

但就像上面的线程一样,服务器变得无法访问(无法 ping 入/出),并且诊断命令的输出几乎相同。

关于如何配置 IP3 以用于 VM 有什么建议吗?

答案1

我设法自己找到了解决方案。这花了我很长时间,因为当我在虚拟 KVM 中测试它时,它出于某种原因不起作用。

假使,假设:

  • IP1-我的服务器的主IP
  • IP2 - 用于我网站的 SSL 证书的额外 IP
  • IP3-用于我的虚拟机的额外IP
  • eno1 是我的物理以太网接口

在主机上-3个文件:

# /etc/systemd/network/10-virbr1.netdev
[NetDev]
Name=virbr1
Kind=bridge
MACAddress=00:1e:67:ad:8d:12

[Bridge]
STP=false

# /etc/systemd/network/20-eno1.network
[Match]
Name=eno1

[Network]
Bridge=virbr1

# /etc/systemd/network/30-virbr1.network
[Match]
Name=virbr1

[Network]
Gateway=IP_GATEWAY

[Address]
Address=IP1
Peer=IP_GATEWAY/32

[Address]
Address=IP2
Peer=IP_GATEWAY/32

在虚拟机上(一些较旧的 Ubuntu - 不使用 systemd):

# /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address IP3
    netmask 255.255.255.255
    gateway IP_GATEWAY
    pointopoint IP_GATEWAY
    dns-nameservers 8.8.8.8 1.1.1.1

一些额外的解释:MACAddress=00:1e:67:ad:8d:12 是必要的,因为我的托管公司(Hetzner)进行了一些 MAC 过滤,因此网桥必须具有物理以太网卡的 MAC。

出于同样的原因,VM 需要具有一些特定的 MAC 地址,您可以在 Hetzner 的服务器控制面板中生成该地址。因此,在我的情况下,“virsh dumpxml my-vm”的输出如下所示:

...
<interface type='bridge'>
      <mac address='00:50:56:00:53:E1'/>
      <source bridge='virbr1'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
...

相关内容