我有一台 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>
...