MAC address spoofing (日本語) - ArchWiki

# MAC address spoofing (日本語)

この記事では Media Access Control (MAC) アドレスを偽装 (変更) する方法を説明しています。

## 手動

MAC アドレスを偽装するには iproute2 (デフォルトでインストールされます) または macchanger (公式リポジトリからインストール可能) を使う2つの方法があります。どちらの方法も以下で示します。

### 方法 1: iproute2

まず、次のコマンドで現在の MAC アドレスを確認できます:

    # ip link show interface

`interface` はネットワークインターフェイスの名前に置き換えて下さい。

重要なのは "link/ether" の後に続く6桁の番号です。以下のように表示されているはずです:

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

MAC アドレスを偽装するために、まずはネットワークインターフェイスを下ろします。次のコマンドで行うことができます:

    # ip link set dev interface down

そして、実際に MAC の偽装を行います。16進数の値を使いますが、ネットワークによってはベンダーが一致しないクライアントに IP アドレスを割り当てないように設定されていることがあります。したがって、接続するネットワークを管理していない場合は、ランダム化するよりも既知の MAC を使ってテストすると良いでしょう。

MAC を変更するには、次のコマンドを実行します:

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

6桁の値は `XX:XX:XX:XX:XX:XX` という形式で入力する必要があります。

最後にネットワークインターフェイスを立ち上げます。次のコマンドで行えます:

    # ip link set dev interface up

MAC が偽装されたか確認したい場合は、`ip link show interface` をもう一度実行して 'link/ether' の値を確認してください。偽装されていれば、'link/ether' が変更したアドレスになっているはずです。

### 方法 2: macchanger

macchanger (別名 GNU MAC Changer) を使用する方法です。特定のベンダーに一致するように変更したり、完全にランダムにするなど、様々な機能が備わっています。

公式リポジトリから macchanger パッケージをインストールしてください。

偽装はインターフェイスごとに行うので、以下に記載されているコマンドを使うときは `interface` でネットワークインターフェイスを指定します。

MAC アドレスを完全にランダムなアドレスに偽装するには:

    # macchanger -r interface

ベンダーコードを除いてアドレスをランダム化するには (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

Note: デバイスを使用している (何らかの方法で接続されていたりインターフェイスが立ち上がっている) 間に MAC アドレスを変更することはできません。

## 自動

### 方法 1: systemd-networkd

systemd-networkd は link ファイルによる MAC アドレスの偽装をサポートしています (詳しくは `man systemd.link` を参照):

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

    [Match]
    MACAddress=permanent MAC

    [Link]
    MACAddress=spoofed MAC
    NamePolicy=kernel database onboard slot path

### 方法 2: systemd-udevd

Udev は udev ルールを書くことによる MAC アドレスの偽装をサポートしています。`ATTR` によって udev は適当なデバイスを見つけてその MAC アドレスを変更するので、`address` オプションは両方ともカスタマイズしてください:

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

    ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="02:03:09:xx:xx:xx", RUN+="/usr/bin/ip link set dev %k address c8:0a:a9:xx:xx:xx"

### 方法 3: systemd ユニット

#### ユニットの作成

以下は systemd のユニットを使って MAC アドレスを起動時に変更する2つの例です。片方は ip を使って固定 MAC を設定し、もう片方は macchanger を使ってランダムな MAC アドレスを指定します。Netctl, NetworkManager, systemd-networkd, dhcpcd などのネットワークマネージャのサービスが起動する前に MAC が変更されるように systemd の `network-pre.target` を使っています。

##### iproute2

あらかじめ決めておいた MAC アドレスに設定する systemd ユニット:

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=MAC Address Change %I
    Wants=network-pre.target
    Before=network-pre.target
    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

元の NIC ベンダーコードは維持しつつランダムなアドレスを設定する systemd ユニット。macchanger のインストールが必須です:

    /etc/systemd/system/macspoof@.service

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

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

    [Install]
    WantedBy=multi-user.target

完全にランダムなアドレスは `-r` オプションを使うことで設定できます。#方法_2: macchanger を参照。

#### サービスの有効化

サービスの名前に適当なネットワークインターフェイス (例: `eth0`) を追加してサービスを有効化してください:

    # systemctl enable macspoof@eth0.service

適切な順番でサービスを再起動・停止・起動してください。ネットワークを管理している場合は、ルーターの固定アドレスまたは DHCP アドレステーブルを確認して、偽装された MAC がルーターによって認識されているか確認してください。

## トラブルシューティング

### DHCPv4 ネットワークへの接続が失敗する

NetworkManager のデフォルトである dhcpcd を使っていて DHCPv4 ネットワークに接続できない場合、dhcpcd の設定を変更してリースを取得するようにしてみてください。

## 参照

- Macchanger GitHub ページ
- Article on DebianAdmin with more macchanger options

Categories:

- Networking (日本語)
- Security (日本語)