RHEL7 の NIC が eth0 じゃないのがキモチワルイ

RHEL7 は Fedora 19 ベースだそうで、なるほど Fedora で取り入れられた作法が RHEL7 にも入っています。

Fedora 18 から NIC の名前が eth0 じゃなくて em とか eno とか p1 とかいう感じの名前に変わるようになったようで、僕は vmware player に入れてみたのですが、見事に不思議な名前が付きました。

[root@rhel7rc ~]# ip add
2: eno16777736: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b8:a9:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.6/24 brd 192.168.0.255 scope global dynamic eno16777736
       valid_lft 3541sec preferred_lft 3541sec
    inet6 fe80::20c:29ff:feb8:a97d/64 scope link
       valid_lft forever preferred_lft forever</broadcast,multicast,up,lower_up>

なにこれメンドクサイ… eno16777736 とかどうしたの…

起動時のログを見てると、eth0 をわざわざ書き換えてくれています。

[    2.511984] systemd-udevd[370]: renamed network interface eth0 to eno16777736

余計なことを…

Features/SystemdPredictableNetworkInterfaceNames - FedoraProject によると、udev のルールが無かった場合は eth0 , eth1, wlan0 などの名称は起動時のデバイス認識順序によっては入れ替わってしまうから危ないのでハードウェアの識別子ベースの名前にしといたよ、っていうことらしい。

というわけなので /etc/udev/rules.d/60-net.rules を作ってみた。MAC アドレスをベースに eth0 とか eth1 とかの名称を固定するっていうルール。

SUBSYSTEM=="net",ACTION=="add",BUS=="pci",KERNEL=="eth*",SYSFS{address}=="00:0c:29:b8:a9:7d",NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci",KERNEL=="eth*",SYSFS{address}=="00:0c:29:b8:a9:87",NAME="eth1"

再起動してみたけれど、 udev のルールを作っただけでは使ってくれない。

Networking on RHEL 7 Installations - Red Hat Customer Portal によると、カーネルパラメータに net.ifnames=0 を追加するといいらしいので /boot/grub2/grub.conf 内に net.ifnames=0 を足してみて再起動。

あとは /etc/sysconfig/network-scripts/ifcfg-* を eth0 とかに合わせて書き換えるのを忘れずに。

[root@rhel7rc ~]# ip add
2: eth0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b8:a9:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.6/24 brd 192.168.0.255 scope global dynamic eth0
       valid_lft 3122sec preferred_lft 3122sec
    inet6 fe80::20c:29ff:feb8:a97d/64 scope link
       valid_lft forever preferred_lft forever
</broadcast,multicast,up,lower_up>

無事、eth0 の名前が戻ってきました。