在虚拟接口上使用 macvlan 是否有效

在虚拟接口上使用 macvlan 是否有效

以这种方式设置容器网络是否有效:

  1. 在主机上创建虚拟接口

    ip link add du0 type dummy
    
  2. 使用 systemd-nspawn 创建了两个容器,每个容器都有一个 macvlan 接口绑定到该虚拟接口

    /etc/systemd/nspawn/proxy.nspawn/etc/systemd/nspawn/apps.nspawn

    [Network]
    VirtualEthernet=no
    MACVLAN=du0
    

我在网上找不到任何类似的例子,我想知道这样使用 macvlan 是否好,或者是否有更好的方法来实现我的目标。

我的目标是创建一个运行正向和反向代理的容器。它将有多个正向代理,使用不同的 VPN 接口连接到不同的国家/地区或直接使用物理接口。并且所有其他容器都将连接到该代理容器,每个应用程序将选择要使用的适当代理。

为了连接这些容器,systemd-nspawn 支持多种选项。我想使用 macvlan,因为它似乎是所有选项中最轻量级(性能最佳)的。但我想确保容器不能直接连接到互联网,而是必须使用代理容器。我不想将 macvlan 接口绑定到物理接口。所以我在主机上创建了一个虚拟接口,并将 macvlan 接口绑定到该虚拟接口。我刚刚测试过,它可以正常工作,容器可以互相 ping 通。

答案1

回答我自己的问题。这是有效的。Docker 在 ipvlan 上执行此操作。 https://docs.docker.com/network/ipvlan/#prerequisites

如果未指定父接口或使用了 --internal 标志,则会为用户创建一个 netlink 类型虚拟父接口,并将其用作父接口,从而有效地完全隔离网络。

有关 macvlan 与 ipvlan 的更多信息。如果接口支持多个 mac 地址,macvlan 应该会更快。在虚拟接口或 Raspberry Pi 上,接口仅使用一个 macvlan 接口即可进入混杂模式,因此在这些情况下最好使用 ipvlan。

相关内容