CentOS7でネットワークインターフェース名をethXに戻す方法

CentOS7からネットワークインタフェース名の表記が今までと異なり、enXXXXとなっています。これを旧式のethXという表記に戻す方法について記します。

1.ブートコマンドラインを編集する方法

  • /etc/default/grub を以下のように「net.ifnames=0」を追加するように編集します。

     GRUB_CMDLINE_LINUX=”rd.lvm.lv=centos/swap vconsole.font=latarcyrhebsun16
     vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto net.ifnames=0 rhgb quiet”

  • grub2-mkconfig -o /boot/grub2/grub.cfg を実行してgrubコンフィグファイルを生成します。

    この後リブートすれば、ネットワークインターフェース名がethXになります。 

2.udevのruleファイルを追加する方法

  • /etc/udev/rule.d/  以下にruleファイルを新規作成して追加します。
    例えば、ファイル名を「70-persistent-net.rules」として中身を以下のようにします。

     SUBSYTEM==”net” ACTION==”add” , ATTR{address}==”xx:xx:xx:xx:xx:xx” , NAME={eth0}

    “xx:xx:xx:xx:xx:xx” は搭載ネットワークインターフェースのMACアドレスを記述します。こうすることで、OSブート途中で、ethX > enpXXXX > ethX というように書き換わりが発生し、最終的にethXとなります。

ここで終わってもよいのですが、「1.ブートコマンドラインを編集する方法」について少し動作を確認してみます。

 

ブートコマンドラインを修正しない場合のブート状態を見ていきます。dmesgコマンドを確認します。

>dmesg | less

[ 1.444671] r8169 0000:03:00.0 eth0: RTL8168evl/8111evl at 0xffffc9000030a000,
ec:a8:6b:27:bf:b4, XID 0c900800 IRQ 42
[ 1.444676] r8169 0000:03:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
(中略)
[ 1.535258] systemd-udevd[248]: renamed network interface eth0 to enp3s0

udevによってインタフェース名が切り替えられていることが伺えます。

次にudevのruleファイルについて確認してみます。udevのruleファイルは、/etc/udev/rule.d と /usr/lib/udev/rule.d の2箇所にありますが、/etc/udev/rule.d にはネットワーク系のruleはないので、/usr/lib/rule.dをみていきます。

> cd /usr/lib/udev/rules.d

> grep net *.rules

60-net.rules:ACTION==”add”, SUBSYSTEM==”net”, DRIVERS==”?*”, ATTR{type}==”1″,
PROGRAM=”/lib/udev/rename_device”, RESULT==”?*”, NAME=”$result”
71-biosdevname.rules:SUBSYSTEM!=”net”, GOTO=”netdevicename_end”
71-biosdevname.rules:ACTION!=”add”, GOTO=”netdevicename_end”
71-biosdevname.rules:NAME==”?*”, GOTO=”netdevicename_end”
71-biosdevname.rules:ATTR{type}!=”1″, GOTO=”netdevicename_end”
71-biosdevname.rules:ENV{DEVTYPE}==”?*”, GOTO=”netdevicename_end”
71-biosdevname.rules:ENV{UDEV_BIOSDEVNAME}==”0″, GOTO=”netdevicename_end”
71-biosdevname.rules:ENV{UDEV_BIOSDEVNAME}==”1″, GOTO=”netdevicename_start”
71-biosdevname.rules:GOTO=”netdevicename_end”
71-biosdevname.rules:LABEL=”netdevicename_start”
71-biosdevname.rules:LABEL=”netdevicename_end”
75-net-description.rules:ACTION==”remove”, GOTO=”net_end”
75-net-description.rules:SUBSYSTEM!=”net”, GOTO=”net_end”
75-net-description.rules:IMPORT{builtin}=”net_id”
75-net-description.rules:SUBSYSTEMS==”usb”, GOTO=”net_end”
75-net-description.rules:LABEL=”net_end”
77-nm-olpc-mesh.rules:KERNEL==”msh*”, SUBSYSTEM==”net”, DRIVERS==”usb”, ATTRS{idVendor}==”1286″, ATTRS{idProduct}==”2001″, ENV{ID_NM_OLPC_MESH}=”1″
80-mm-candidate.rules:SUBSYSTEM==”net”, ENV{ID_MM_CANDIDATE}=”1″
80-net-name-slot.rules:ACTION!=”add”, GOTO=”net_name_slot_end”
80-net-name-slot.rules:SUBSYSTEM!=”net”, GOTO=”net_name_slot_end”
80-net-name-slot.rules:NAME!=””, GOTO=”net_name_slot_end”
80-net-name-slot.rules:IMPORT{cmdline}=”net.ifnames”
80-net-name-slot.rules:ENV{net.ifnames}==”0″, GOTO=”net_name_slot_end”
80-net-name-slot.rules:LABEL=”net_name_slot_end”
99-systemd.rules:# We need a hardware independent way to identify network devices. We
99-systemd.rules:SUBSYSTEM==”net”, KERNEL!=”lo”, TAG+=”systemd”, ENV{SYSTEMD_ALIAS}+=”/sys/subsystem/net/devices/$name”
99-systemd.rules:# Apply sysctl variables to network devices (and only to those) as they appear.
99-systemd.rules:ACTION==”add”, SUBSYSTEM==”net”, KERNEL!=”lo”,
RUN+=”/usr/lib/systemd/systemd-sysctl –prefix=/proc/sys/net/ipv4/conf/$name –prefix=/proc/sys net/ipv4/neigh/$name –prefix=/proc/sys/net/ipv6/conf/$name –prefix=/proc/sys/net/ipv6/neigh/$name”

関連しそうなのは赤字のファイルのようです。

以上から、次のような推測を立てました。カーネルは初回はethXでインタフェース名を構成していくが、60-net.rulesで指定されたrename_deviceというプログラムを使って名前を変更する。
そのときに、80-net-name-slotでenp3s0という名前を構成する中で数字の’3’と’0’を付加する。

そして、60-net.rulesのルールをコメントアウトした上でリブートしましたが、enpXXXXで立ち上がり状況はかわりませんでした。

次に、80-net-name-slot.ruleを見てみます。

 

ACTION!=”add”, GOTO=”net_name_slot_end”

SUBSYSTEM!=”net”, GOTO=”net_name_slot_end”
NAME!=””, GOTO=”net_name_slot_end”

IMPORT{cmdline}=”net.ifnames”
ENV{net.ifnames}==”0″, GOTO=”net_name_slot_end”

NAME==””, ENV{ID_NET_NAME_ONBOARD}!=””, NAME=”$env{ID_NET_NAME_ONBOARD}”
NAME==””, ENV{ID_NET_NAME_SLOT}!=””, NAME=”$env{ID_NET_NAME_SLOT}”
NAME==””, ENV{ID_NET_NAME_PATH}!=””, NAME=”$env{ID_NET_NAME_PATH}”

LABEL=”net_name_slot_end”

 

cmdlineにnet.ifnames=0とすれば番号の取得処理を飛ばすようになっています。

それで現状のカーネル起動コマンドラインを見てみます。
>less /proc/cmdline

BOOT_IMAGE=/vmlinuz-3.10.0-123.4.2.el7.x86_64
root=/dev/mapper/centos-root ro rd.lvm.lv=centos/swap
vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106
rd.lvm.lv=centos/root crashkernel=auto rhgb quiet LANG=ja_JP.UTF-8

特にnet.ifnamesという記述はありません。

そこで、1.ブートコマンドラインを編集する方法 を実施してみると、ethX へ書き換えができるようになりました。

コメント

タイトルとURLをコピーしました