MAC address spoofing (简体中文) - ArchWiki

Jump to content

# MAC address spoofing (简体中文)

From ArchWiki

这篇文章文章将会介绍几个修改 MAC 地址的方法。

## 手动更改

有两种方法可以修改 MAC 地址：安装并配置 iproute2 或 macchanger。下面来说明一下这两种方法。

### iproute2

首先，你可以用下面的命令来检查当前的 MAC 地址

    # ip link show interface

`interface` 是你的 网卡 的名字

我们现在要关注的是跟在“link/ether”后面的那一串带冒号的十六进制字节。它看起来可能是这样：

    link/ether 00:1d:98:5a:d1:3a

修改 MAC 地址的第一步是禁用网卡，它可以通过下面的命令来完成：

    # ip link set dev interface down

接下来，我们要开始修改我们的 MAC 地址。只要每个字节都是十六进制值就可以，但有的网络运营商可能会拒绝为不正确的 MAC 分配 IP 地址。所以，除非你是你连接的网络的管理员，否则你应该使用真实的 MAC 地址前缀（一般是前三个字节），剩下三个字节可以随便设置（只要是十六进制值）。如果想了解更多内容，请访问 Wikipedia:Organizationally unique identifier.

要更改 MAC 地址，我们要运行这个命令：

    # ip link set dev interface address XX:XX:XX:XX:XX:XX

这6位 `XX:XX:XX:XX:XX:XX` 就是你要设置的 MAC 地址。

最后一步是重新启用网卡，输入这行命令：

    # ip link set dev interface up

如果你想验证你的 MAC 地址是否成功修改，只需要再次运行 `ip link show interface` ，然后检查“link/ether”后面的值。如果成功修改，“link/ether”后面应该跟着你刚刚设置的 MAC 地址。

### macchanger

另一个方法是通过 macchanger (a.k.a., the GNU MAC Changer)。它有一些方便的功能，比如改变 MAC 地址以匹配某个运营商，或者完全随机化地址。

从官方仓库里安装 这个包 macchanger .

由于更改 MAC 地址基于网卡，我们需要用 网卡名 来替换每行命令中的 `interface` 。

用这行命令我们可以将 MAC 地址完全随机化：

    # macchanger -r interface

要随机化当前 MAC 地址的后三位字节 (这样运营商会认为这个 MAC 地址是注册过的 MAC 地址，就可以避免被断网的风险)，你可以运行这个命令

    # macchanger -e interface

要把 MAC 地址改成指定的值，请运行：

    # macchanger --mac=XX:XX:XX:XX:XX:XX interface

把 `XX:XX:XX:XX:XX:XX` 改成你想要的 MAC 地址。

最后，如果想把 MAC 地址恢复成出厂值，运行这个：

    # macchanger -p interface

注意： 在更改 MAC 地址的时候，设备将无法使用（无论是以任何方式连接，或是试图启用这个设备）

## 自动更改

### systemd-networkd

systemd-networkd 支持通过 link files 设置 MAC 地址（细节请查看 systemd.link(5)）.

要设置一个静态 MAC 地址，修改这个文件为：

    /etc/systemd/network/00-default.link

    [Match]
    MACAddress=原始 MAC

    [Link]
    MACAddress=更改后的 MAC
    NamePolicy=kernel database onboard slot path

如要在每次启动时随机化 MAC 地址，把 `MACAddress=更改后的 MAC` 改成 `MACAddressPolicy=random`。

### systemd-udevd

udev (简体中文) 允许你创建 udev 规则 来更改 MAC 地址。使用 `address` 参数来用原始 MAC 地址来匹配设备，然后用 ip 命令来更改 MAC 地址:

    /etc/udev/rules.d/75-mac-spoof.rules

    ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="XX:XX:XX:XX:XX:XX", RUN+="/usr/bin/ip link set dev %k address YY:YY:YY:YY:YY:YY"

其中，`XX:XX:XX:XX:XX:XX` 是原始 MAC 地址，`YY:YY:YY:YY:YY:YY` 是目标 MAC 地址

### systemd 单元

#### 创建单元

下面写了两个用 Systemd (简体中文) 来在启动时更改 MAC 地址的例子，其中一个用 ip 来设置静态 MAC，另一个用 macchanger 来设置随机 MAC。systemd 的 `network-pre.target` 可以确保 MAC 地址在网络管理器如 netctl (简体中文)、NetworkManager (简体中文)、systemd-networkd 或 dhcpcd (简体中文) 启动之前就已经更改好。

##### iproute2

设置静态 MAC 地址的 Systemd (简体中文) 单元:

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=MAC Address Change %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/ip link set dev %i address 36:aa:88:c8:75:3a
    ExecStart=/usr/bin/ip link set dev %i up

    [Install]
    WantedBy=multi-user.target

##### macchanger

设置随机 MAC 地址的 Systemd (简体中文) 单元，同时保留原始的运营商字节。请确保您已安装了 macchanger:

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=macchanger on %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    ExecStart=/usr/bin/macchanger -e %I
    Type=oneshot

    [Install]
    WantedBy=multi-user.target

或者用 `-r` 选项来使 MAC 地址完全随机化，参见 #macchanger。

#### 启用服务

将所需的网络接口 (如：`eth0`) 附加到服务名称后面 (如`macspoof@eth0.service`)，然后启用服务.

重启，或者按照适当的顺序重启依赖的服务。如果你是局域网管理员，请通过路由器检查其中的静态或 DHCP 地址表，验证 MAC 是否已成功修改。

### netctl 接口

你可以使用 netctl hook 来在每次启动或重启网卡的时候运行特定命令。把 `interface` 替换为你的网络接口:

    /etc/netctl/interfaces/interface

    #!/usr/bin/env sh
    /usr/bin/macchanger -r interface

使脚本可执行：

    chmod +x /etc/netctl/interfaces/interface

来源: akendo.eu

### NetworkManager

参见 NetworkManager#Configuring MAC address randomization.

## 故障排除

### 连接到 DHCPv4 网络失败

如果您无法连接到 DHCPv4网络，而且您使用的是 NetworkManager 默认的 dhcpcd，你可能需要 修改 dhcpd 配置 来续租。

## 另见

- Wikipedia:MAC spoofing
- Macchanger GitHub page
- DebianAdmin 上的文章 with more macchanger options

Categories:

- Networking (简体中文)
- Security (简体中文)