使用 macvlan 接口的 Linux 网络

使用 macvlan 接口的 Linux 网络

此设置满足我的需求,但我不明白它为何如此,这让我很担心,例如,我认为系统更新可能会破坏此功能,如果我不明白,我该如何修复/恢复它。此外,我愿意接受更好/更合适的工作方式,因此欢迎在这里学到任何见解。

这是关于 linux 网络、macvlan 接口以及最终的 docker 容器,但我更关心的是 OS 网络和我拥有的 2/3 层结果。我的主机是 Synology DS1019+ NAS。

使用位于 /etc/sysconfig/network-scripts/ 中的配置文件,我可以针对 eth0 创建一个新的 br0 接口。新 br0 接口的 mac 与 eth0 接口相同。在此配置中,我不再有针对 eth0 的 IPv4,只有 br0 有地址并且可以在我的子网上路由。我目前的理解是,上述内容是合理的,符合预期。

以上是我的理解,这也是让我对下一部分产生疑问的原因。

我没有使用 /etc/sysconfig/network-scripts/ 中的配置文件,而是使用 linux ip 命令来实现类似的结果。

ip link add link eth0 name br0 type macvlan mode bridge

在阅读了许多其他提出此方法的文章后,我现在有一个 IPv4 地址两个都链接的 eth0(物理)接口以及新创建的 br0 接口上的地址,并且 br0 具有完全独特的 mac 地址。需要明确的是,每个接口上的子网是不同的。两个接口都可以工作,我可以在主机上以及从我的局域网中的远程设备访问它们,对于远程设备,唯一的额外步骤是在我的路由器上放置一个指向我的 nas 的静态路由,用于新的 br0 子网。

我不明白 eth0 如何仍然具有 IPv4 地址,并且我不明白 br0 如何根据我对命令的期望以及它是 macvlan 桥而具有自己唯一的 mac 地址。

我修改前的界面布局……

eth0:192.168.1.0/24,eth1:断开连接

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    
    link/ether 00:11:32:c0:fb:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::211:32ff:fec0:fb37/64 scope link
       valid_lft forever preferred_lft forever
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:11:32:c0:fb:38 brd ff:ff:ff:ff:ff:ff
    inet 169.254.6.42/16 brd 169.254.255.255 scope global eth1
       valid_lft forever preferred_lft forever
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000    
    link/ether 02:42:ad:6c:d4:7f brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:adff:fe6c:d47f/64 scope link
       valid_lft forever preferred_lft forever

我发出如下 3 个命令来创建 br0 并将其置于单独的子网中...

ip link add link eth0 name br0 type macvlan mode bridge
ip addr add 192.168.10.1/24 dev br0
ip link set br0 up

然后将我的界面布局改为......

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    
    link/ether 00:11:32:c0:fb:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::211:32ff:fec0:fb37/64 scope link
       valid_lft forever preferred_lft forever
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:11:32:c0:fb:38 brd ff:ff:ff:ff:ff:ff
    inet 169.254.6.42/16 brd 169.254.255.255 scope global eth1
       valid_lft forever preferred_lft forever
5: br0@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
    link/ether 76:31:e6:37:27:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.1/24 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::7431:e6ff:fe37:2797/64 scope link
       valid_lft forever preferred_lft forever
6: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000    
    link/ether 02:42:ad:6c:d4:7f brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:adff:fe6c:d47f/64 scope link
       valid_lft forever preferred_lft forever

我注意到 br0 接口的“状态未知”,但它确实有效!

相关内容