我需要将子接口添加到 VLAN 上的现有接口。此外,子接口必须有自己的 MAC 地址。通过手册页,我发现这个语法在 CentOS/RH 上运行良好:
/usr/sbin/ip link add link eth0 name eth0.1 address 00:11:22:33:44:5F type vlan id 1
通过谷歌搜索,我发现一些发行版使用关键字“macvlan”而不是“vlan”来执行此命令。有谁知道哪些 Linux 发行版使用 macvlan 关键字而不是 vlan 关键字?
答案1
您可以使用以下ip
命令分配 VLAN MAC 地址:
# ip link add link <interface> name <vlan interface name> address <mac> type vlan id <vlan ID>
例子:
# ip link add link ens33 name myvlan123 address 00:0c:29:ed:ff:ff type vlan id 123
查看:
# ip a
....
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ed:ff:ea brd ff:ff:ff:ff:ff:ff
inet 192.168.101.180/24 brd 192.168.101.255 scope global ens33
valid_lft forever preferred_lft forever
3: myvlan123@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:ed:ff:ff brd ff:ff:ff:ff:ff:ff
inet6 fe80::2fda:8335:9f2:b9c7/64 scope link
valid_lft forever preferred_lft forever
主界面是00:0c:29:ed:ff:ea
,vlan 现在是00:0c:29:ed:ff:ff
。
您可以查看更多帮助:
# ip link help
另请检查您是否已加载 vlan 内核模块:
# lsmod | grep -i 8021q
某些发行版可能会以vlan
名称命名。您可能还需要安装vlan
或8021q
软件包(pacman、yum、apt、..)。
答案2
请注意,vlan 和 macvlan 是两个不同的东西。 vlan 是用于分隔广播域的通用标准 (802.1q)。这意味着您可以在物理网络上创建多个逻辑网络。所有使用的组件,包括网络交换机都需要兼容。
Macvlan 在 Linux 系统上用于提供独立的虚拟接口。这些可以在物理接口和 VLAN 接口上创建。 Macvlan 是非标准的,与其他网络设备无关。
首先,您应该创建 VLAN 接口,如示例中所示。之后,您应该添加一个或多个 macvlan 接口,如下所示:
ip link add macvlan1 link eth0.1 type macvlan
ip link add macvlan2 link eth0.1 type macvlan
使用ip link
命令检查是否创建了新接口。如果是这样,您很可能应该使用以下ip addr
命令分配 IP 地址并启动接口:
ip link set dev macvlan1 up
ip link set dev macvlan2 up
根据问题,我在示例中使用了 vlan 1。但请不要在生产环境中使用vlan 1;某些设备可以将此 id 解释为根本没有 VLAN。
Macvlan 在内核 2.6.23 中作为实验引入,在 3.9 中作为生产引入。 iproute2(ip 命令)包长期以来一直支持 macvlan,因此这应该适用于所有最新的 Linux 发行版,甚至包括 Red Hat 6。