Di Linux, network interface card (NIC) Ethernet dikenali dengan simbol eth
. Masing-masing interface punya nomor yang unik. Misalnya bila cuma ada 1 interface maka namanya adalah eth0
. Bila ada 2, maka kita bisa lihat akan ada 2 interface : eth0
dan eth1
. Penomoran ini diatur udev
(Dynamic Device Management). Saat proses booting, udev
akan mencocokan data perangkat yang aktif dengan aturan yang sudah ada sebelumnya. Misalnya untuk NIC, udev
menyimpan aturan (rule) penomoran NIC dalam berkas /etc/udev/rules.d/70-persistent-net.rules
seperti contoh berikut ini.
root@rhel6:~# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x100e (e1000) # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:d9:19:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" root@rhel6:~#
Pada contoh di atas ada 2 NIC yang terdaftar. Ethernet dengan MAC address “08:00:27:d9:19:33
” akan selalu diberi nama eth0
sedangkan NIC dengan MAC Address “08:00:27:14:05:a7
” akan diberi nama eth1
. Misalnya ada penambahan NIC baru pada komputer, udev
akan otomatis menambahkan 1 nomor sehingga NIC tersebut akan dikenali sebagai eth2
.
Selain rule untuk perangkat jaringan di atas, udev
juga memiliki beberapa berkas lain seperti misalnya :
[root@dummyuim rules.d]# ll total 36 -rw-r--r--. 1 root root 1652 Nov 20 2010 60-fprint-autosuspend.rules -rw-r--r--. 1 root root 153 Oct 10 2013 60-ipath.rules -rw-r--r--. 1 root root 1060 Jul 25 2010 60-pcmcia.rules -rw-r--r--. 1 root root 316 Oct 12 2013 60-raw.rules -rw-r--r--. 1 root root 530 Oct 1 22:43 70-persistent-cd.rules -rw-r--r--. 1 root root 585 Oct 2 07:50 70-persistent-net.rules -rw-r--r--. 1 root root 320 Dec 20 2012 90-alsa.rules -rw-r--r--. 1 root root 83 May 21 2011 90-hal.rules -rw-r--r--. 1 root root 292 Nov 18 2013 98-kexec.rules [root@dummyuim rules.d]#
Proses udev
akan melakukan scanning pada semua perangkat yang terdeteksi oleh kernel Linux saat proses booting berlangsung. Tidak cuma mengatur penomoran masing-masing perangkat, udev
juga bertanggung jawab untuk menjalankan program yang diperlukan untuk mengaktifkan perangkat. Misalnya dengan udev
kita bisa menentukan driver module mana yang diperlukan oleh sebuah perangkat (udev
akan memanggil program modprobe
untuk mengaktifkan driver tersebut).
Kembali ke soal penamaan network interface tadi, biasanya penomoran Ethernet akan relatif statis tidak pernah berubah-ubah. Penomoran Ethernet akan berubah pada kasus tertentu saja; misalnya ada penggantian NIC yang rusak. Tentu hal semacam itu relatif jarang terjadi. Berbeda halnya saat saya menggunakan VirtualBox, saya bisa dengan mudah menggonta-ganti NIC & MAC Address-nya dengan mudah. Gambar berikut adalah contoh cara mengganti MAC Address pada sebuah virtual machine (VirtualBox akan otomatis menghasilkan MAC Address baru):
Misalnya VM RedHat Linux saya awalnya memiliki 1 buah NIC dengan MAC Address “08:00:27:d9:19:33
”. NIC tersebut dikenali oleh Linux sebagai eth0
. Lalu saya sengaja mengganti MAC Address-nya “08:00:27:14:05:a7
”. Karena pada contoh ini saya menggunakan Network Manager & DHCP, Network Manager akan otomatis mengaktifkan NIC tersebut. Akibatnya saya mendapati NIC saya berubah menjadi eth1
seperti contoh berikut ini :
root@rhel6:ttirtawi# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:14:05:a7 brd ff:ff:ff:ff:ff:ff inet 192.168.56.2/24 brd 192.168.56.255 scope global eth1 inet6 fe80::a00:27ff:fe14:5a7/64 scope link valid_lft forever preferred_lft forever root@rhel6:ttirtawi#
Bila saya cek udev
rule saya mendapati 2 baris yang mengatur Ethernet seperti ini :
root@rhel6:~# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x100e (e1000) # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:d9:19:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" root@rhel6:~#
Bila saya ingin mengembalikan nama eth0
pada NIC tersebut saya bisa memodifikasi berkas 70-persistent-net.rules
tadi menjadi seperti ini :
root@rhel6:~# vi /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x100e (e1000) # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" root@rhel6:~#
Saya hapus saja baris yang masih mengatur NIC eth0
& MAC Address lama (“08:00:27:d9:19:33
”). Lalu saya ubah baris berisi eth1
menjadi eth0
(untuk baris berisi MAC Address “08:00:27:14:05:a7
”). Untuk mengaktifkan rule baru tersebut, cara paling mudah adalah dengan me-restart VM ini. Bila saya perlu melakukannya tanpa me-restart mesin, saya bisa menggunakan perintah udevadm
.
Jadi setelah mengubah berkas 70-persistent-net.rules
tadi, saya perlu menonaktifkan interface eth1
terlebih dulu seperti contoh berikut ini :
root@rhel6:~# ifconfig eth1 down
Barulah saya bisa menggunakan perintah udevadm
seperti berikut ini :
root@rhel6:~# udevadm trigger --attr-match=subsystem=net
Perintah tersebut “memaksa” proses udev
untuk membaca ulang rules yang dimilikinya & mengatur ulang penomoran Ethernet. Dengan begitu NIC yang awalnya menggunakan nama eth1
sekarang otomatis berubah menjadi eth0
.
root@rhel6:~# ifconfig -a eth0 Link encap:Ethernet HWaddr 08:00:27:14:05:A7 inet addr:192.168.56.2 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe14:5a7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:37 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1180 (1.1 KiB) TX bytes:2482 (2.4 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:757 errors:0 dropped:0 overruns:0 frame:0 TX packets:757 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:65098 (63.5 KiB) TX bytes:65098 (63.5 KiB) root@rhel6:~#
Kira-kira begitu catatan saya untuk mengubah penamaan network interface Ethernet pada RedHat Linux.