Linux 的 macvlan 提供了直觀的使用方式及接近實體網路的速度, 配合 systemd-nspawn 產生 container 非常方便.

但, 使用 macvlan 的 container 及 host 沒法直接互通, 有時比較不方便. 查了下, 網上的解決方案都是在 host 側加上 macvlan, 這樣 host 及 container 中的 guest 就能看見對方.

如果是用 systemd-networkd 管理網路的情況下, 可照以下步驟完達成. 首先, 加張虛擬網卡

# /etc/systemd/network/macvlan.netdev
[NetDev]
Name=macvlan0
Kind=macvlan

接著, 去掉實體網卡 (假設名稱為 enp6s0) 的部份設定 (主要是 address, subnetmask, gateway 之類的), 讓它 up 但不設 IP, subnetmask, gateway, 並與剛建的 macvlan0 關聯上

# /etc/systemd/network/enp6s0.network
[Match]
Name=enp6s0

[Network]
MACVLAN=macvlan0

接下來, 為 macvlan0 加上 IP 等設定

# /etc/systemd/network/macvlan0.network
[Match]
Name=macvlan0

[Network]
DHCP=v4

重新啟動網路, 或是, 重新啟動系統, 之後應該就能跟 container 中的 guest OS 相互 ping 通了.