用於 VM + 多個靜態 IP 的 systemd 橋接器
我有一個帶有 3 個公共 IP 的 Ubuntu 18.04 伺服器。主 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)很容易,因為它只需要一個額外的
$$ Address $$上面文件中的部分。 至於 IP3,我想為了將 IP3 路由到我的虛擬機,我需要像原來的 howto 一樣創建一個橋接器。因此,當嘗試為 VM 配置 qemu/libvirt 網橋時,我最終得到了與此配置非常相似的東西: https : //bbs.archlinux.org/viewtopic.php?id=193994 ie - br0 device + eno1 added to bridge + 像上面一樣配置網橋
但就像在上面的執行緒中一樣,伺服器變得無法訪問(無法 ping 入/出)並且診斷命令的輸出幾乎相同。
有關如何配置 IP3 以與 VM 一起使用的任何建議?
我設法自己找到了解決方案。我花了很長時間,因為當我在虛擬 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> ...