MAC アドレス偽装

提供: ArchWiki
移動先: 案内検索

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

自動

方法 1: systemd-networkd

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

/etc/systemd/network/00-default.link
[Match]
MACAddress=permanent MAC

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

起動毎に MAC アドレスをランダムに設定したい場合は、MACAddress=spoofed MACMACAddressPolicy=random に置き換えてください。

方法 2: systemd-udevd

Udevudev ルールを書くことによる 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
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

元の NIC ベンダーコードは維持しつつランダムなアドレスを設定する 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 オプションを使うことで設定できます。#方法_2: macchanger を参照。

サービスの有効化

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

# systemctl enable macspoof@eth0.service

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

方法 4: netctl インターフェイス

netctl フックを使うことで特定のネットワークインターフェイスで netctl プロファイルが起動するときにコマンドを実行することができます。interface は適宜置き換えてください:

/etc/netctl/interfaces/interface
#!/usr/bin/env sh
/usr/bin/macchanger -r interface

スクリプトに実行可能属性を付与:

chmod +x /etc/netctl/interfaces/interface

ソース: akendo.eu

方法 5: NetworkManager

NetworkManger がインターフェイスの立ち上げの前に実行するスクリプトを使うことができます。スクリプトを配置するパスは /usr/local/etc/NetworkManager/dispatcher.d/pre-up.d/macspoof.sh または /etc/NetworkManager/dispatcher.d/pre-up.d/macpoof.sh です。$1 はインターフェイスの名前に置き換わります。

#!/bin/bash
ip link set dev $1 down
macchanger -e $1
ip link set dev $1 up

トラブルシューティング

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

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

参照