linuxネットワークカードのMACを変更する
4915 ワード
いくつかのNICを购入した出荷MACアドレスが同じに競合しているため、ローカルエリアネットワークのテストを行うときにトラブルを引き起こすことがあります.そこで、linuxがNICのMACを修正する需要があります.
NIC MACアドレスの表示
IPコマンドを使用すると、MACアドレスを表示できます.
ip link show ${interface}
2: enp0s25: mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether f0??f1:ad:1d:f0 brd ff:ff:ff:ff:ff:ff
このうちlink/etherの後ろの列は、分割された6バイトの16進数がNICのMACアドレス、つまりf 0??f 1:ad:1 d:f 0手動でMACアドレスを修正する
IPコマンドを使用してMACアドレスを変更することもできますが、root権限が必要です.
自動変更
Systemd-networkdサービスはlinkファイル(下位物理ネットワークデバイス構成)によってMACアドレスを設定することができる
[Match]セクションを使用してNICを照合し、[Link]セクションを使用してNICを構成します.
「[Match]」セクションの各セクションがNICと一致している場合は、リンクファイルがNICと一致しているとみなされます.「[Match]」セクションが空の場合は、任意のNICに一致します.
一致に使用できるすべてのオプションは次のとおりです.
MACAddressマッチングNICの物理アドレス(MACアドレス)
OriginalNameは、NICの「INTERFACE」属性値(NICのカーネル名)と一致します.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).ユーザースペースによって名前が変更されたNICを一致させるには使用できません.NICのカーネル名が不安定になる可能性があるため、このオプションを使用することに注意してください.
Pathは、NICの「ID_PATH」属性値(NICのバスパス)と一致します.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).
Driverは、NICの「DRIVER」属性値(NICのドライバ名)に一致します.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).NICのDRIVERプロパティが存在しない場合は、「ethool-i」コマンドで出力されるドライバ名が使用されます.
Typeは、NICの「DEVTYPE」属性値(NICのデバイスタイプ)にマッチします.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).
ホストのホストに一致するホストのホスト名または「machine ID」はsystemdを参照してください.unit(5)の「ConditionHost=」オプション.
Virtualizationは、特定の仮想環境で実行されているかどうかを確認します.systemdを参照してください.unit(5)の「ConditionVirtualization=」オプション.
KernelCommandLineは、systemdを参照して、特定のカーネルブートオプションが設定されているかどうかを確認します.unit(5)の[ConditionKernelCommandLine=]オプション.
Architecture特定のハードウェアプラットフォームで動作するかどうかを確認し、systemdを参照してください.unit(5)の「ConditionArchitecture=」オプション.リンクセクション
Linkセクションでは、MACの変更に関するオプションとして、NICを複数構成できます.
MACAddressPolicy
NICのMACアドレスを設定する方法:
カーネルがNICハードウェア固有のMACアドレス(ほとんどのNICにある)を使用している場合は、何もせずにカーネルのMACアドレスを直接使用します.そうでなければ、複数の起動間で一定のMACアドレス(所与のマザーボードとNIC)が維持されることを保証する新しいMACアドレスがランダムに生成されます.自動生成MACアドレスの特性は、NICにID_が存在する必要があるNET_NAME_* 属性を指定しないと、自動的にMACアドレスを生成できません.
カーネルがランダムに生成されたMACアドレス(NICハードウェア固有のMACアドレスではなく)を使用している場合、何もせずにカーネルのMACアドレスを直接使用します.そうでなければ、ネットワークカードが出現するたびに(通常は起動中に)ランダムに新しいMACアドレスが生成される.上記のいずれの方法で生成されたMACアドレスを使用しても、「unicast」と「locally administered」ビットが設定されます.
カーネルのMACアドレスを無条件に直接使用します.
MACAddressは、「MACAddressPolicy=」が設定されていない場合に使用されるMACアドレスです.また、Linkセクションでは、NICの名前を付ける必要があります.そのため、NamePolicyまたはNameオプションがあるに違いありません.
NamePolicyがNICの名前を設定する方法は、「net.ifnames=0」カーネル・ブート・オプションを使用していない場合にのみ意味があります.各ポリシーを1つのスペースで区切ったポリシー・リストで順番に試行し、最初の成功したポリシーに準じます.名前は、NICのID_NET_NAMEプロパティの設定に使用されます.なお、デフォルトのudevルールでは、「ID_NET_NAME」の値で「NAME」プロパティ(つまり、NICの名前)が設定されます.NICが空のユーザースペースに名前が付けられている場合、名前の変更は行われません.使用可能なポリシーは次のとおりです.
カーネルがこのNICに固定予測可能な名前を設定している場合は、名前の変更は行われません.
NICの名前は、NICのID_NET_NAME_FROM_DATABASEプロパティ値(udevハードウェアデータベースから)に基づいて設定されます.
NICの名前は、NICのID_NET_NAME_ONBOARD属性値(オンボードNICファームウェアから)に基づいて設定されます.
NICの名前は、NICの「ID_NET_NAME_SLOT」属性値(挿抜可能なNICファームウェアから)に基づいて設定されます.
NICの名前は、NICの「ID_NET_NAME_PATH」属性値(NICのバス位置から)に基づいて設定されます.
NICの名前は、NICの「ID_NET_NAME_MAC」属性値(NICからの固定MACアドレス)に基づいて設定されます.
NamePolicy=が無効な場合に使用するNICの名前.無効な場合は、(1)NamePolicy=が設定されていません.(2)NamePolicy=のポリシーはすべて失敗しました.(3)「net.ifnames=0〃カーネルブートオプション
注意:udevが名前を割り当てるときにカーネルと競合し、予期せぬ結果をもたらす可能性のある他のネットワークポートの名前(例えば「eth 0」)を設定しないでください.最善の方法は、衝突の原因にならない名前や接頭辞、例えば「internal 0」external 0」または「lan 0」lan 1」/「lan 3」を使用することです.
CENTOS
ネット上にはlinuxの下でMACアドレスを修正する方法がたくさんありますが、多くはひょうたんに基づいてひょうたんを描いていて、検証したことがないようで、修正の目的に達していません.私の詳細なテストを経て、最終的にこの問題を解決することに成功しました.
エラー1:#ifconfig eth 0 down#ifconfig eth 0 hw ether 00:AA:BB:CC:DD:EE#ifconfig eth 0 upホストを再起動します.結論:この方法でMACアドレスを修正し、ホストシステムを再起動すると、MACアドレスが自動的に復元されます.
誤区2:#ifconfig eth 0 down#cd/etc/sysconfig/network-scripts#vi ifcfg-eth 0「HWADDR=xx:xx:xx:xx:xx:xx」#ifconfig eth 0 up#service network start結論:この方法でMACアドレスを変更するとネットワークが有効にならず、次のような提案があります:“Bringing up interface eth 0:ice Deviceh 0 has different MAC address than expected,ignoring.”
では、linux環境では、修正後のMACアドレスの永続保存をどのように保証しますか?正しい手順は次のとおりです.
キーワード:HWADDRとMACADDRには違いがあります.
NIC MACアドレスの表示
IPコマンドを使用すると、MACアドレスを表示できます.
ip link show ${interface}
2: enp0s25: mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether f0??f1:ad:1d:f0 brd ff:ff:ff:ff:ff:ff
このうちlink/etherの後ろの列は、分割された6バイトの16進数がNICのMACアドレス、つまりf 0??f 1:ad:1 d:f 0手動でMACアドレスを修正する
IPコマンドを使用してMACアドレスを変更することもできますが、root権限が必要です.
sudo ip link set dev ${interface} down
MAC
MAC IP , MAC , 。
sudo ip link set dev ${interface} address ${new_mac}
MAC
ip link show ${interface}
2: enp0s25: mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether f0:de:f1:ff:ff:ff brd ff:ff:ff:ff:ff:ff
MAC .
sudo ip link set dev ${interface} up
自動変更
Systemd-networkdサービスはlinkファイル(下位物理ネットワークデバイス構成)によってMACアドレスを設定することができる
[Match]セクションを使用してNICを照合し、[Link]セクションを使用してNICを構成します.
「[Match]」セクションの各セクションがNICと一致している場合は、リンクファイルがNICと一致しているとみなされます.「[Match]」セクションが空の場合は、任意のNICに一致します.
一致に使用できるすべてのオプションは次のとおりです.
MACAddressマッチングNICの物理アドレス(MACアドレス)
OriginalNameは、NICの「INTERFACE」属性値(NICのカーネル名)と一致します.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).ユーザースペースによって名前が変更されたNICを一致させるには使用できません.NICのカーネル名が不安定になる可能性があるため、このオプションを使用することに注意してください.
Pathは、NICの「ID_PATH」属性値(NICのバスパス)と一致します.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).
Driverは、NICの「DRIVER」属性値(NICのドライバ名)に一致します.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).NICのDRIVERプロパティが存在しない場合は、「ethool-i」コマンドで出力されるドライバ名が使用されます.
Typeは、NICの「DEVTYPE」属性値(NICのデバイスタイプ)にマッチします.スペースで区切られたマッチングモードのリストを受信します(shellスタイルのワイルドカードを使用します).
ホストのホストに一致するホストのホスト名または「machine ID」はsystemdを参照してください.unit(5)の「ConditionHost=」オプション.
Virtualizationは、特定の仮想環境で実行されているかどうかを確認します.systemdを参照してください.unit(5)の「ConditionVirtualization=」オプション.
KernelCommandLineは、systemdを参照して、特定のカーネルブートオプションが設定されているかどうかを確認します.unit(5)の[ConditionKernelCommandLine=]オプション.
Architecture特定のハードウェアプラットフォームで動作するかどうかを確認し、systemdを参照してください.unit(5)の「ConditionArchitecture=」オプション.リンクセクション
Linkセクションでは、MACの変更に関するオプションとして、NICを複数構成できます.
MACAddressPolicy
NICのMACアドレスを設定する方法:
“persistent”
カーネルがNICハードウェア固有のMACアドレス(ほとんどのNICにある)を使用している場合は、何もせずにカーネルのMACアドレスを直接使用します.そうでなければ、複数の起動間で一定のMACアドレス(所与のマザーボードとNIC)が維持されることを保証する新しいMACアドレスがランダムに生成されます.自動生成MACアドレスの特性は、NICにID_が存在する必要があるNET_NAME_* 属性を指定しないと、自動的にMACアドレスを生成できません.
“random”
カーネルがランダムに生成されたMACアドレス(NICハードウェア固有のMACアドレスではなく)を使用している場合、何もせずにカーネルのMACアドレスを直接使用します.そうでなければ、ネットワークカードが出現するたびに(通常は起動中に)ランダムに新しいMACアドレスが生成される.上記のいずれの方法で生成されたMACアドレスを使用しても、「unicast」と「locally administered」ビットが設定されます.
“none”
カーネルのMACアドレスを無条件に直接使用します.
MACAddressは、「MACAddressPolicy=」が設定されていない場合に使用されるMACアドレスです.また、Linkセクションでは、NICの名前を付ける必要があります.そのため、NamePolicyまたはNameオプションがあるに違いありません.
NamePolicyがNICの名前を設定する方法は、「net.ifnames=0」カーネル・ブート・オプションを使用していない場合にのみ意味があります.各ポリシーを1つのスペースで区切ったポリシー・リストで順番に試行し、最初の成功したポリシーに準じます.名前は、NICのID_NET_NAMEプロパティの設定に使用されます.なお、デフォルトのudevルールでは、「ID_NET_NAME」の値で「NAME」プロパティ(つまり、NICの名前)が設定されます.NICが空のユーザースペースに名前が付けられている場合、名前の変更は行われません.使用可能なポリシーは次のとおりです.
“kernel”
カーネルがこのNICに固定予測可能な名前を設定している場合は、名前の変更は行われません.
“database”
NICの名前は、NICのID_NET_NAME_FROM_DATABASEプロパティ値(udevハードウェアデータベースから)に基づいて設定されます.
“onboard”
NICの名前は、NICのID_NET_NAME_ONBOARD属性値(オンボードNICファームウェアから)に基づいて設定されます.
“slot”
NICの名前は、NICの「ID_NET_NAME_SLOT」属性値(挿抜可能なNICファームウェアから)に基づいて設定されます.
“path”
NICの名前は、NICの「ID_NET_NAME_PATH」属性値(NICのバス位置から)に基づいて設定されます.
“mac”
NICの名前は、NICの「ID_NET_NAME_MAC」属性値(NICからの固定MACアドレス)に基づいて設定されます.
NamePolicy=が無効な場合に使用するNICの名前.無効な場合は、(1)NamePolicy=が設定されていません.(2)NamePolicy=のポリシーはすべて失敗しました.(3)「net.ifnames=0〃カーネルブートオプション
注意:udevが名前を割り当てるときにカーネルと競合し、予期せぬ結果をもたらす可能性のある他のネットワークポートの名前(例えば「eth 0」)を設定しないでください.最善の方法は、衝突の原因にならない名前や接頭辞、例えば「internal 0」external 0」または「lan 0」lan 1」/「lan 3」を使用することです.
CENTOS
ネット上にはlinuxの下でMACアドレスを修正する方法がたくさんありますが、多くはひょうたんに基づいてひょうたんを描いていて、検証したことがないようで、修正の目的に達していません.私の詳細なテストを経て、最終的にこの問題を解決することに成功しました.
エラー1:#ifconfig eth 0 down#ifconfig eth 0 hw ether 00:AA:BB:CC:DD:EE#ifconfig eth 0 upホストを再起動します.結論:この方法でMACアドレスを修正し、ホストシステムを再起動すると、MACアドレスが自動的に復元されます.
誤区2:#ifconfig eth 0 down#cd/etc/sysconfig/network-scripts#vi ifcfg-eth 0「HWADDR=xx:xx:xx:xx:xx:xx」#ifconfig eth 0 up#service network start結論:この方法でMACアドレスを変更するとネットワークが有効にならず、次のような提案があります:“Bringing up interface eth 0:ice Deviceh 0 has different MAC address than expected,ignoring.”
では、linux環境では、修正後のMACアドレスの永続保存をどのように保証しますか?正しい手順は次のとおりです.
キーワード:HWADDRとMACADDRには違いがあります.