如何在 FreeBSD 11.1 上更改网络接口的 MAC 地址

如何在 FreeBSD 11.1 上更改网络接口的 MAC 地址

我正在尝试更改运行 FreeBSD 的系统上的网卡(使用英特尔芯片组的通用网卡)的 MAC 地址 ( FREEBSD 11.1-RELEASE-p7)。

当我发出时,我得到以下输出ifconfig

egbo: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether NN:NN:NN:NN:NN:NN
hwaddr NN:NN:NN:NN:NN:NN
inet6 aann::aann:aann....
nd6 ...
media: Ethernet autoselect
status: no carrier

我努力了:

ifconfig egb0 down
ifconfig egb0 ether XX:XX:XX:XX:XX:XX
ifconfig egb0 up

这只会改变列出的“以太”MAC 地址,而不会改变 HWADDR MAC 地址。

我也尝试过:

ifconfig egb0 down
ifconfig egb0 lladdrr XX:XX:XX:XX:XX:XX
ifconfig egb0 up

这(也)只改变ETHER地址而不改变HWADDR地址。

我需要克隆,因为我已经更换了路由器,并且我的 ISP 拒绝注册它,因为它不是“他们的”!

答案1

我在 11.2-STABLE 下执行此操作的方法是创建一个文件/etc/start_if.iface_name,在我的例子中,/etc/start_if.bge0该文件包含:

ifconfig $1 link de:ad:be:ef:ca:fe

或您需要的任何 MAC 地址。

/etc/start_if.bge0从 /etc/network.subr 的函数调用ifscript_up。所启动接口的具体名称被传递给ifscript_upas,$1这就是为什么$1in/etc/start_if.bge0可以将接口名称传递给 ifconfig。

系统启动后,bge0 如下所示:

$ ifconfig bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
        ether de:ad:be:ef:ca:fe
        hwaddr f0:1f:af:e3:59:fa
        inet 10.16.231.24 netmask 0xffffffc0 broadcast 10.16.231.63
        inet 10.16.231.25 netmask 0xffffffff broadcast 10.16.231.25
        inet 10.16.231.50 netmask 0xffffffff broadcast 10.16.231.50
        inet 10.16.231.49 netmask 0xffffffff broadcast 10.16.231.49
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active

我的 ARP 表如下:

? (10.16.231.1) at 00:00:0c:9f:f0:e7 on bge0 expires in 1033 seconds [ethernet]
? (10.16.231.25) at de:ad:be:ef:ca:fe on bge0 permanent [ethernet]
? (10.16.231.24) at de:ad:be:ef:ca:fe on bge0 permanent [ethernet]
? (10.16.231.50) at de:ad:be:ef:ca:fe on bge0 permanent [ethernet]
? (10.16.231.49) at de:ad:be:ef:ca:fe on bge0 permanent [ethernet]

如果遇到困难,请验证基础知识。以下命令来自具有 igb 网络接口的系统,就像您的系统一样。

存在哪些接口?

# ifconfig -l
igb0 igb1 lo0

所需接口的现状是怎样的?

# ifconfig igb0
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=6403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
    ether ac:1f:6b:45:b0:ac
    hwaddr ac:1f:6b:45:b0:ac
    inet 10.10.176.76 netmask 0xffffff00 broadcast 10.10.176.255 
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active

您的start_if脚本的具体内容是什么?

# ls -l /etc/start_if.igb0 
-rw-r--r--  1 root  wheel  228 Feb 14 12:43 /etc/start_if.igb0
# cat /etc/start_if.igb0
(
date
echo "Attempting 'ifconfig $1 link de:ad:be:ef:ca:fe'"
if ifconfig $1 link de:ad:be:ef:ca:fe; then
        echo "ifconfig succeeded"
else
        echo "ifconfig failed with exit code $?"
fi
) >> /tmp/start_if.$1.log 2>&1

如果您的 start_if 脚本包含详细调试,它会显示什么?

# cat /tmp/start_if.igb0.log
Thu Feb 14 12:46:16 PST 2019
Attempting 'ifconfig igb0 link de:ad:be:ef:ca:fe'
ifconfig succeeded

如果您手动运行该命令会发生什么?

请注意,通过远程网络连接(例如通过 ssh)执行此操作可能会导致 MAC 地址发生变化时失去连接。

# ifconfig ibg0 link de:ad:be:ef:ca:fe
ifconfig: interface ibg0 does not exist

啊哈!您输入了接口名称。:) 再试一次。正确的响应应该是 ifconfig 成功:

# ifconfig igb0 link de:ad:be:ef:ca:fe
#

一旦您能够无错误地运行“ifconfig”,那么 ifconfig 和 arp 表之后会是什么样子?

# ifconfig igb0
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=6403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
        ether de:ad:be:ef:ca:fe
        hwaddr ac:1f:6b:45:b0:ac
        inet 10.10.176.76 netmask 0xffffff00 broadcast 10.10.176.255 
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
# arp -an
? (10.10.176.76) at de:ad:be:ef:ca:fe on igb0 permanent [ethernet]
? (10.10.176.137) at 18:03:73:34:39:66 on igb0 expires in 1170 seconds [ethernet]
? (10.10.176.1) at 00:00:0c:07:ac:03 on igb0 expires in 1050 seconds [ethernet]

如果一切仍失败,请编辑你的问题包括您已采取的上面列出的其他具体步骤以及获得的输出。 复制并粘贴您的结果,这样我们就不会花时间尝试解决在转录您的输入和输出时出现的印刷错误。

答案2

您无法更改 HWADDR。它已编码在固件中。在启动接口之前,请设置所需的 MAC。接口应将更改后的 MAC 报告给其他路由器。测试一下。

答案3

对于最新的 FreeBSD,你可以使用ether random例如rc.conf

cloned_interfaces="vlan0"
create_args_vlan0="vlan 4000 vlandev em0 mtu 1400 fib 1"
ifconfig_vlan0="ether random"

或者

# ifconfig vlan0 ether random

使用 ("random") 关键字设置随机生成的 MAC 地址。随机生成的 MAC 地址可能与网络中已使用的 MAC 地址相同。 https://www.freebsd.org/cgi/man.cgi?ifconfig

答案4

ifconfig_igb3="lladdr de:ad:be:ef:ca:01 up 描述桥" FreeBSD sg 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC amd64

相关内容