Routing

用於 VM + 多個靜態 IP 的 systemd 橋接器

  • May 18, 2018

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

引用自:https://serverfault.com/questions/912366