systemdを使用したUbuntu 16.04でのネットワークインターフェイスの名前変更が失敗する


14

enp5s0f0とenp5s0f1という名前の2つの物理ネットワークカードを備えたヘッドレスUbuntu 16.04 LTSサーバーを使用しています。

これらのインターフェースの名前を変更したいので、この例に従いました。したがって、次のようにファイルを作成しました/lib/systemd/network/70-myinterface.link(元のソースは機能していないようです)(正しいMACアドレスを設定しました)。

[Match]
MACAddress=12:34:56:78:9a:bc

[Link]
Name=dmz0

サーバーを再起動しました。残念ながら、udevadm構成ファイルが使用されていることが示されていても、インターフェースの名前は変更されませんでした。

$ udevadm info /sys/class/net/enp5s0f1
P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
E: ID_MODEL_ID=0x1096
E: ID_NET_DRIVER=e1000e
E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link  <-- my file
E: ID_NET_NAME_MAC=enx123456789abc
E: ID_NET_NAME_PATH=enp5s0f1
E: ID_OUI_FROM_DATABASE=Intel Corporation
E: ID_PATH=pci-0000:05:00.1
E: ID_PATH_TAG=pci-0000_05_00_1
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_VENDOR_ID=0x8086
E: IFINDEX=3
E: INTERFACE=enp5s0f1
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1
E: TAGS=:systemd:
E: USEC_INITIALIZED=1900192

名前の変更が機能しなかった理由をご存知ですか?


1
このファイルを作成するには、/ etc / systemd / networkが最適な場所だと思いました。
NGRhodes

@NGRhodes引用された例に基づいてタイプミスを想定していましたが、誰が知っていますか?
オタク長老

また、チェックNetworkManagerは、実行されていないsuperuser.com/a/948996/127393が優先権を持つNetworkManagerを示唆
NGRhodes

報奨金を置いた後、16.04に新しいudevルールファイルがあり、networkd 問い合わせる前に常にUSBアダプターのMACアドレスタイプの命名を強制すること気付きました(/lib/udev/rules.d/73-usb-net-by -mac.rules)。これはまったく正しくないと思います...ルールを完全に無効にしなければならなかったため、.linkファイルが再び機能するようになりました。しかし、それが最も正しいオプションであるかどうかはわかりません。」
アンティハパラ1​​6

使用MACAddress= [Match]linkてもファイルでは機能しないため、Path=代わりに使用することになりました。あなたも試してみてください。またlinkudevadm test-builtin net_setup_link /sys/class/net/enp5s0f1コマンドでデバイスに一致するファイルを確認することができます
-webKnjaZ

回答:


8

これは役立つかもしれないし、役に立たないかもしれません。./etc/udev/rules.dをチェックして、70-persistent-net.rulesがあるかどうかを確認します。そのファイルを使用して名前を変更できるはずです

私のものは次のようになります。

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

このファイルにカードのエントリがある場合、「NAME = TheNameYouWant」を変更することにより、名前を好きな名前に変更できます。


右に。興味深いことに、ネットワーク名を変更する@muffelの方法が機能しなかったと言っているUbuntuを使用している人が数人いるという興味深い答えを投稿しようとしていました。これは私がお勧めするつもりだった何だった... 1
anonymous2

賞金はここに行く必要があります。
EKons

5

Ubuntu 16.04および他の多くのLinuxバージョンで動作するudevルール(systemd-networkd .linkファイルの代替)を必要としないオプションは、

例:

ifconfig peth0 down  
ip link set peth0 name eth0  
ifconfig eth0 up 

上記の例では、peth0は元のインターフェイス名で、eth0は目的の名前です。peth0が現在ある名前と、eth0がどこかにある名前を入力します。再起動は不要であり、推奨されません。2番目のインターフェイスカードに対してプロセスを繰り返します。

カーネル4.4.0-36-generic#55-Ubuntuを使用してUbuntu 16.04でテスト済み

編集:再起動後も存続する永続的なソリューションを探している場合は、Ubuntu 16.04のネットワークインターフェイス名の変更を参照してください。

ソース:https : //www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

テスト。

注:@ antti-haapalaメソッドは以前に機能し、突然停止したため、「特別な場合として、空のファイル(ファイルサイズ0)または/ dev / nullを指す同じ名前のシンボリックリンクは構成ファイルを無効にする完全に(マスクされています)」。<-ソース


私はあなたの応答に非常に役立ちました、ありがとう+ 1 @ElderGeek

1
@アルベルト助けてくれてうれしい!
オタク長老

悲しいことに、それは永続的ではありませんが、それでも+ 1
delfiler

@delfilerコメントありがとうございます。私があなたを正しく理解しているなら、あなたは再起動後も生き残る解決策を探しています。私はそれについて明確ですか?
オタク長老


3
  • systemd:Predictable Network Interface Namesで説明されている3つのカスタム命名方法はすべて、udevルールに関連しています。

    systemd .linkの&udevルールにはフォルダー優先順位があります。/etcoverridesをオーバーライドし/runます/lib

    現在の設定を確認してください。

    # links
    ls -l /*/systemd/network/
    
    # rule that read links
    ls -l /*/udev/rules.d/80-net-setup-link.rules
    
    # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames
    ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    

    これらのudevルールの変更(オーバーライドファイルの追加/削除)が有効になると、ブートRAMディスクを更新する必要があります。

    sudo update-initramfs -u
    

    デフォルトでは、これらが唯一のファイルです

    ~$ ls -l /*/systemd/network/
    /etc/systemd/network/:
    total 0
    
    /lib/systemd/network/:
    total 12
    -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface)
    -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface)
    -rw-r--r-- 1 root root  80 Jul 12 17:28 99-default.link
    
    
    ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules
    -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules
    
    ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules
    

    以下のリンクに記載されているように、VBoxの新しい16.04インストールでそれらすべてをテストしました。すべてのメソッドは期待どおりに動作します。

    Ubuntu 16.04複雑なインターフェイス名

  • /etc/udev/rules.d/70-persistent-net-rulessystemd .linkに置き換えられた古いリリースのものですが(自動作成されません)、AnttiHaapalaの場合ではなく、特定の問題の存在を確認するためにここに追加しました 。


1

実行中にudevがすでにこれらの設定を適用するためinitrd、次のようなもので更新する必要があります。update-initramfs -k all -cinitrd

Ubuntu 16.04には70-persistent-net-rulesファイルがありません。


1
それは奇妙です、この16.04システムはします。ああ、それはアップグレードされたシステムです。フレッシュインストールには存在しないことは正しいです。
オタク長老

0

コメントするほどの評判はありませんが、マークされた答えに追加するだけで、Ubuntu 16.04のクリーンインストールには/etc/udev/rules.d/70-persistent-net.rulesファイルが存在しません。ただし、手動で作成する場合は、ここの答えに示すように行を追加できますが、古いバージョンと同じように機能しますが、1つの顕著な違いがあります-KERNELパラメータは、デフォルトでインターフェース。たとえば、システムがインターフェイスに「ens160」という名前を付けて、「eth0」に変更する場合、行は次のようになります。

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

これは、指定されたMAC(ATTR {address}パラメーターで)と一致するインターフェースとKERNELパラメーターと一致するカーネル名でのみ一致するようにルールに指示します。あるいは、おそらくKERNELパラメーターを完全に省略することもできますが、これも同様に機能するはずです。

編集:既に述べたように、.linkファイルメソッドを使用する場合は、initramfsを更新して有効にする必要があります。また、カスタム.linkファイルは/ lib / systemd / networkではなく/ etc / systemd / networkに作成する必要があることに注意してください(どちらでも機能しますが、ベストプラクティスは/ etc / systemd / networkを使用することです。 / lib / systemd / networkのデフォルトを上書きするカスタム.linkファイルを許可します)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.