ローカルネットワークのイーサネットMACアドレスを変更するスクリプトを作成しています。次のように動作します。
- 最初はeth0が終了します。
- MAC は ifconfig ユーティリティを使用して変更されます。
- eth0が始まります
#!/bin/sh
sleep 5
ifconfig eth0 down
sleep 10
ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX
sleep 1
ifconfig eth0 up
上記のスクリプトを実行すると、MACの変更が成功し、パネルのネットワークアイコンにも「接続」ステータスが表示されます。数秒後eth0 がネットワークに再接続されます。その後、コードの機能を向上させるためにいくつかの行を追加しました。
/sbin/ifconfig eth0| grep 'inet addr:'
ifconfig eth0 | awk '/HWaddr/ {print $5}'
ping 192.168.1.107 -c 2
上の行は新しいIPアドレス、MACアドレスを示し、ネットワークが正しく機能していることを確認するためにping要求を送信します。しかし、私が直面している問題は、上記の行を追加した後にpingが失敗し、パネルのネットワークアイコンに「接続中」のステータスが表示されることです。スクリプトが完全に実行された後、数秒後、eth0が完全に接続されています。 (Pingすることができます)ので、次の行の後にスリープ30を追加してみました。
ifconfig eth0 up
pingの問題が解決されたと仮定します。ただし、スクリプトに記載されているpingはまだ失敗し、スクリプトを実行した後にネットワークが完全な接続を確立するのに時間がかかります。
この問題をどのように解決するのですか?
答え1
どのディストリビューションを使用していますか?デフォルトでは、MACアドレスの変更はNetworkManagerを起動する前に行う必要があります。可能なオプションは次のとおりです。
- eth0のカスタムudevルールをインストールします。
- 初期化システム(sysvinit、upstart、systemdなど)で動作するスクリプトを作成します。
- 使用システムリンクシステム化された機能。
私が見つけたArchlinux Wikiに関する有用な情報。また、これに興味がある可能性がありますマイチェンジグリッド、これはさまざまなディストリビューションで共通です。