บทความนี้จะอธิบายการเปลี่ยน Network Interface Card (NIC) โดยแทนที่การ์ดใบเก่า ด้วยการ์ดใบใหม่ที่มี MAC Address ไม่เหมือนกัน แต่ต้องการใช้งานเหมือนเดิม เช่นให้ใช้ชื่อเป็น eth0 และคอนฟิกต่างๆ เหมือนเดิม
โดยดีฟอลต์แล้วใน Fedora หรือ Linux Distribution อื่นๆ ที่เป็นเวอร์ชั่นใหม่ๆ จะมีโปรแกรมช่วยในการจัดการการเปลี่ยนแปลงอุปกรณ์ (Hardware) ของเครื่องโดยอัตโนมัติ ที่มีชื่อว่า udev โดยโปรแกรมนี้จะสร้างคอนฟิกแบบพื้นฐานเพื่อให้สามารถใช้งานได้เลย ซึ่งจะเก็บคอนฟิกไว้ใน /etc/udev/
ซึ่งทำให้เมื่อเปลี่ยน Network Interface Card เป็นการ์ดใบใหม่ โปรแกรม udev ตรวจสอบว่ามีการเปลี่ยนแปลงของอุปกรณ์ ซึ่งดูได้จาก MAC Address ที่เปลี่ยนแปลง โปรแกรม udev ก็จะสร้างคอนฟิกใหม่ ซึ่งอาจจะสร้างเป็น eth1 ได้
ดังนั้นถ้าคุณต้องการให้เป็นคอนฟิกแบบเดิมสามารถทำได้โดยวิธีดังต่อไปนี้
หมายเหตุ ตัวอย่างในบทความนี้จะเป็นการเปลี่ยน Network Interface จาก
- การ์ดใบเก่ามี MAC Address เป็น 00:11:11:11:11:11
- การ์ดใบใหม่มี MAC Address เป็น 00:22:22:22:22:22
คอนฟิก udev ในส่วนของ Network Interface Card ก่อนที่จะเปลี่ยนการ์ด
ตัวอย่างคอนฟิก udev ก่อนที่จะมีการเปลี่ยนการ์ด
[root@server ~]# 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. # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:11:11:11:11", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
คอนฟิก udev ในส่วนของ Network Interface Card หลังจากเปลี่ยนการ์ดเป็นใบใหม่
เมื่อเปลี่ยนการ์ดใบเก่าออก แล้วแทนที่ด้วยการ์ดใบใหม่ แล้วเปิดเครื่องขึ้นมานั้น โปรแกรม udev จะตรวจสอบเจอการ์ดใบใหม่ พร้อมทั้งสร้างคอนฟิกขึ้นมาใหม่ ซึ่งในส่วนของ network เราอาจใช้คำสั่ง ifconfig ตรวจสอบดู จะเห็นว่ามี eth1 ถูกสร้างขึ้นมา หรือดูในคอนฟิกของ udev ก็จะมีการแก้ไขไฟล์คอนฟิกดังนี้
[root@server ~]# 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. # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:11:11:11:11", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x1022:0x2000 (pcnet32) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:22:22:22:22", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
วิธีการแก้กลับให้เป็น eth0 เหมือนเดิม คือให้ลบบรรทัดที่ถูกสร้างขึ้นมาใหม่ แล้วนำ MAC Address ของการ์ดใบใหม่นี้ไปแทนที่บรรทัดของ eth0
ตัวอย่างการแก้ไขไฟล์คอนฟิก udev ในส่วนของ network
[root@server ~]# 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. # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:22:22:22:22", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
แก้ไขคอนฟิกไฟล์อื่นๆ
นอกจากแก้คอนฟิกของ udev แล้ว ต้องแก้ไขคอนฟิกในส่วนอื่นๆ อีกด้วย
ตัวอย่างการแก้ไข network-scripts ให้ใช้ MAC Address ใหม่
root@server ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] DEVICE=eth0 BOOTPROTO=none BROADCAST=192.168.1.255 HWADDR=00:22:22:22:22:22 IPADDR=192.168.1.11 NETMASK=255.255.255.0 NETWORK=192.16.1.0 ONBOOT=yes DNS1=192.168.1.1 SEARCH="your-domain.com" NM_CONTROLLED=no GATEWAY=192.168.1.1 TYPE=Ethernet
ปิด service ชื่อ NetworkManager แล้วมาใช้ network แทน
ตัวอย่างการปิด NetworkManager service
[root@server ~]# chkconfig --list NetworkManager NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@server ~]# chkconfig NetworkManager off [root@server ~]# chkconfig --list NetworkManager NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ตัวอย่างการเปิด network service
[root@server ~]# chkconfig --list network network 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@server ~]# chkconfig network on [root@server ~]# chkconfig --list network network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ขั้นสุดท้าย restart เครื่องใหม่อีกครั้ง ก็จะได้คอนฟิกที่ต้องการ