MAC アドレス偽装
この記事では 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
自動
方法 1: systemd-networkd
systemd-networkd は link ファイル による MAC アドレスの偽装をサポートしています (詳しくは systemd.link(5) を参照):
/etc/systemd/network/00-default.link
[Match] MACAddress=permanent MAC [Link] MACAddress=spoofed MAC NamePolicy=kernel database onboard slot path
起動毎に MAC アドレスをランダムに設定したい場合は、MACAddress=spoofed MAC
を MACAddressPolicy=random
に置き換えてください。
方法 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 $name 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
NetworkManager#MAC アドレスのランダム化の設定 を見てください。
トラブルシューティング
DHCPv4 ネットワークへの接続が失敗する
NetworkManager のデフォルトである dhcpcd を使っていて DHCPv4 ネットワークに接続できない場合、dhcpcd の設定を変更 してリースを取得するようにしてみてください。
参照
- Wikipedia:MAC spoofing
- Macchanger GitHub ページ
- Article on DebianAdmin with more macchanger options