使用带有欺骗 MAC 地址的 iproute2 "ip link" 命令创建虚拟网络接口

nel*_*aro 4 linux ethernet mac-address iproute2

如何创建类似于以下ifconfig命令的虚拟接口?

$ sudo ifconfig eth1 hw ether 00:01:02:aa:bb:cc  
SIOCSIFHWADDR: No such device  
Run Code Online (Sandbox Code Playgroud)

这不起作用。我想设置 MAC 地址来测试我的 DHCP 服务器的配置。

我将如何iproute2使用 ip link 命令对套件执行此操作?

$ sudo ip link add type veth  
Run Code Online (Sandbox Code Playgroud)

这有效,但它会随机分配一个 MAC 地址。这仍然很有用,但我想dhcpd用一些特定的 MAC 地址测试我的服务器,以查看它如何处理我设置的类。

我目前的设置1

$ ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 60:eb:69:1b:a0:88 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.93/24 brd 172.16.0.255 scope global eth0
    inet6 fe80::62eb:69ff:fe1b:a088/64 scope link 
       valid_lft forever preferred_lft forever
7: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
8: veth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 3a:50:38:2e:24:c4 brd ff:ff:ff:ff:ff:ff
Run Code Online (Sandbox Code Playgroud)

[1]:请注意,此设置不是由执行上述命令产生的。特别是ip link add type veth会导致创建一对veth1@veth2/以veth2@veth1这种方式编号,因为veth0存在。

use*_*686 5

你有没有尝试过...

ip link add type veth addr 00:01:02:aa:bb:cc
Run Code Online (Sandbox Code Playgroud)

或者

ip link set dev veth0 addr 00:01:02:aa:bb:cc
Run Code Online (Sandbox Code Playgroud)


小智 3

我想设置 MAC 地址来测试 DHCP 服务器的配置

下有(至少?)两种方法可以实现这一点。

最简单直接但风险很高的方法是修改物理接口的然而,要做到这一点,您必须关闭界面,因此这不是最安全的方法,而且如果远程操作,肯定是一种高风险的方法!如果您可以物理访问主机或类似的设备,那么它可以是一个选项。

更安全的方法是使用正确的 mac 地址在物理接口上定义您始终可以使用与更改物理接口 mac 地址类似的命令来更改此 mac 地址。例如,这可以方便地测试多个 IP/MAC 对,而无需创建/删除许多接口。

我说“更安全”是因为根据网络上的安全措施,如果您的网络禁止在物理链路上使用不同的 mac 地址,您也有可能因 macvlan 链路而失去连接。在某些情况下,您的主机连接到的网络设备可能会认为您正在调整安全性并关闭链接。

以下命令需要linux下的

在远程主机上使用以下命令之前,请阅读上面的文本!

要添加 macvlan 链接,您可以使用:

ip link add link eth0 type macvlan
Run Code Online (Sandbox Code Playgroud)

该接口将以第一个数字命名,例如不存在该名称的接口macvlanXX

您可以在创建时使用类似的名称来命名接口(vif0例如)

ip link add name vif0 link eth0 type macvlan
Run Code Online (Sandbox Code Playgroud)

有一个名为 的接口vif0

获得接口后,您可以00:11:22:33:44:55使用以下命令更改其 mac 地址(例如):

ip link set address 00:11:22:33:44:55 dev macvlan0
Run Code Online (Sandbox Code Playgroud)

该命令可用于更改其他接口的 mac 地址。您可以使用它来更改物理链路的 MAC 地址。

当然,您可以一次性添加 macvlan 链接并设置其地址:

ip link add name vif0 address 00:11:22:33:44:55 link eth0 type macvlan
Run Code Online (Sandbox Code Playgroud)

配置 mac 地址后,不要忘记将接口设置为 up。接口名为vif0

ip link set dev vif0 up
Run Code Online (Sandbox Code Playgroud)

请注意,这些命令的某些部分是选项,可以按不同的顺序放置,其他部分是语法的一部分,需要放置在正确的位置。此外,在不损害含义的情况下,可以省略某些部分1。以上面的命令为例,dev可以省略。

创建的 macvlan 默认类型是 VEPA,它阻止物理接口和虚拟接口之间的直接通信。它应该适合这个用例。还可以使用其他模式,请参阅RedHat《Linux 虚拟网络接口简介》中有关macvlan 的章节

希望它会有所帮助... ...其他人路过这里。


1:如果您有(非常)糟糕的主意来命名接口,则不能省略它dev