web-dev-qa-db-ja.com

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

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

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

14
muffel

これは役立つかもしれないし、役に立たないかもしれません。/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」を変更することにより、名前を好きな名前に変更できます。

6
John Orion

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を指す同じ名前のシンボリックリンクは構成ファイルを無効にする完全に(マスクされています)」。 <-Source

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

    systemd .linkの&udevルールにはフォルダー優先順位があります。 /etc/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インストールでそれらすべてをテストしました。すべてのメソッドは期待どおりに機能します。

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

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

3
user.dz

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

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

1
Jani Jaakkola

コメントするほどの評判はありませんが、マークされた答えに追加するだけで、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ファイルを許可します)。

0
dwillis77