如何在 ubuntu 服务器上将主网络接口设置为 macvlan 模式?

如何在 ubuntu 服务器上将主网络接口设置为 macvlan 模式?

如何自动将 Ubuntu 服务器上的主以太网接口置于 macvlan 模式(即每次启动时而不仅仅是在命令行上)?

背景及理由:

如果有人希望 LXD 或 docker 等虚拟容器像物理机器一样出现在网络上,有两种选择:

a) 创建一个虚拟桥接设备,并将所有虚拟机和主机本身放入该桥接中。可以工作,但据说速度很慢,并且为了保持桥接处于活动状态会产生不必要的开销,例如超时、动态 mac 表等。

b) 使用 macvlan 接口,其工作方式类似于网桥,但速度更快、更简单,因为不需要维护网桥的所有开销。除了特定问题外,其他都有效:

问题是,尽管 LXD 和 docker 将 macvlan 设备置于“桥接”模式,该模式专门设计用于允许同一物理接口上的所有虚拟接口之间进行通信,但主机本身无法与客户机通信。

不幸的是,没有关于 macvlan 的良好文档,甚至 docs.kernel.org 也只涵盖 ipvlan。

但是,我发现有迹象表明,只有当主机的接口也处于 macvlan 模式时,具有桥接模式的 macvlan 类型网络中主机和客户机之间的通信才会有效。

不幸的是,Ubuntu Server 严重依赖于 netplan,而后者似乎不支持 macvlan。

因此我有两个问题:

1.) 物理设备(如 eth0 或 enp4s0)本身可以置于 macvlan 模式吗,或者这仅适用于虚拟设备?

2.) 无论哪种情况:推荐的、符合 Ubuntu 标准的配置 Ubuntu 服务器的方法是什么,以便主机获得(物理或虚拟)macvlan 网络设备,以便能够以 macvlan 模式与其客户机进行通信?

是的,我看过前面的问题 netplan 中的 MACVLAN Bridge 和错误 https://bugs.launchpad.net/netplan/+bug/1664847 但这是 2019 年的版本,适用于 18.04,因此可能不再有效,因为它建议使用 ifup/ifdown。另一方面,使用 networkd-dispatcher 和脚本有一些粗略的解决方法。

但有没有一种干净的方法呢?

问候

相关内容