ภาพรวม
บทความนี้จะพิจารณาวิธีกำหนดค่าเครือข่ายบน Linux CentOS/RHEL 7/8 และตั้งค่าอินเทอร์เฟซเครือข่ายโดยใช้ไฟล์กำหนดค่า ค้นพบเครื่องมือกำหนดค่าเครือข่ายพื้นฐาน เป็นหัวข้อที่เกี่ยวข้อง เนื่องจากการกำหนดค่าเซิร์ฟเวอร์ใดๆ เริ่มต้นจากการกำหนดค่าเครือข่ายบนมัน
บทความนี้ครอบคลุมด้านต่างๆ ของการกำหนดค่าเครือข่ายบน RHEL/CentOS 7 โดยใช้บริการ network มาตรฐาน เราจะศึกษาการใช้ NetworkManager (NM) เริ่มต้นใน CentOS/RHEL 8 สำหรับการกำหนดค่าเครือข่าย
การตั้งชื่ออุปกรณ์อินเทอร์เฟซเครือข่ายบน RHEL/CentOS
โครงร่างการตั้งชื่ออินเทอร์เฟซเครือข่ายแบบดั้งเดิมใน Linux กำหนดชื่ออย่าง eth0, eth1 เป็นต้น อย่างไรก็ตาม ชื่อเหล่านี้ไม่ได้ผูกมัดกับอินเทอร์เฟซอย่างแน่นอน และหลังจากรีบูท อินเทอร์เฟซหลายตัวอาจได้ชื่อที่ต่างกัน อาจก่อให้เกิดปัญหา เช่น เมื่อกำหนดค่าไฟร์วอลล์ผ่าน firewalld หรือ iptables เนื่องจากนั้น ตั้งแต่ RedHat 7 และ CentOS 7 จึงตัดสินใจกำหนดชื่ออินเทอร์เฟซเครือข่ายตามลำดับชั้นของโครงร่างการตั้งชื่อที่แตกต่างกัน โดยค่าเริ่มต้น systemd จะใช้โครงร่างการตั้งชื่อทีละอันเลือกอันแรกที่มีอยู่และใช้ได้ ชื่ออุปกรณ์เครือข่ายจะถูกกำหนดอัตโนมัติและคงที่แม้ฮาร์ดแวร์จะถูกเพิ่มหรือเปลี่ยน แต่นามสกุลอินเทอร์เฟซแบบนี้อ่านยากกว่า เช่น enp5s0 หรือ ens3 เทียบกับ eth0 หรือ eth1 แบบดั้งเดิม
คุณสามารถกลับไปใช้ชื่ออินเทอร์เฟซ Linux เริ่มต้นได้โดยทำดังนี้
แก้ไข /etc/default/grub:
# nano /etc/default/grub
เพิ่มต่อไปนี้ในบรรทัด GRUB_CMDLINE_LINUX:
net.ifnames=0 biosdevname=0
ตัวอย่างบรรทัด GRUB เต็ม:
GRUB_CMDLINE_LINUX="consoleblank=0 fsck.repair=yes crashkernel=auto nompath selinux=0 rhgb quiet net.ifnames=0 biosdevname=0"
รีเฟรชการกำหนดค่า grub:
# grub2-mkconfig -o /boot/grub2/grub.cfg
เปลี่ยนชื่อไฟล์กำหนดค่าอินเทอร์เฟซเครือข่าย:
# mv /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-eth0
และเปลี่ยนค่า DEVICE:

บันทึกไฟล์ รีบูทโฮสต์และตรวจสอบว่ามีการนำไปใช้:
# ip a

อินเทอร์เฟซเรียกว่า eth0 ตอนนี้
การกำหนดค่าเครือข่ายเบื้องต้นระหว่างการติดตั้ง CentOS/RHEL
ในตอนแรก ระหว่างการติดตั้ง CentOS Linux คุณสามารถกำหนดค่าอินเทอร์เฟซเครือข่ายในโหมดกราฟิกโดยคลิก "Network & Hostname" ในเมนู ที่นี่คุณระบุชื่อเซิร์ฟเวอร์ เพิ่มที่อยู่ IP และเกตเวย์ DNS เป็นต้น ดูคู่มือโดยละเอียดเกี่ยวกับการกำหนดค่าเครือข่ายในขั้นตอนนี้ได้จากลิงก์ด้านบน
วิธีแก้ไขไฟล์กำหนดค่าอินเทอร์เฟซเครือข่ายบน CentOS/RHEL
แสดงรายการอินเทอร์เฟซเครือข่ายที่มีอยู่บนโฮสต์ Linux:
# ip a
ไฟล์กำหนดค่าเครือข่ายของโฮสต์ Linux จัดเก็บที่ /etc/sysconfig/network-scripts เดมอน NetworkManager สร้างไฟล์เหล่านี้สำหรับแต่ละอินเทอร์เฟซเครือข่าย ในกรณีของเรา ไฟล์กำหนดค่าชื่อ ifcfg-eth0 (อาจมีชื่อต่างกันไปขึ้นอยู่กับโครงร่างการตั้งชื่ออินเทอร์เฟซเครือข่ายของคุณ)
มาศึกษาพารามิเตอร์หลัก:
DEVICE— ชื่อของอะดัปเตอร์เครือข่ายที่ตรงกับชื่อในระบบ (คือ eth0 ในตัวอย่าง)BOOTPROTOคือวิธีการกำหนดที่อยู่ IP (static คือค่าที่ป้อนด้วยมือ, dhcp หมายถึงที่อยู่ IP ถูกกำหนดอัตโนมัติ)IPADDR— ที่อยู่ IPNETMASK— 넷มาสก์เครือข่ายGATEWAY— เกตเวย์เริ่มต้นDNS1คือเซิร์ฟเวอร์ DNS หลักDNS2คือเซิร์ฟเวอร์ DNS สำรองONBOOTคือวิธีเริ่มอินเทอร์เฟซเครือข่าย (yes — อัตโนมัติ, no — ด้วยมือ)UUIDคือตัวระบุเฉพาะของอินเทอร์เฟซเครือข่าย สร้างได้ด้วยคำสั่ง uuidgenIPV4_FAILURE_FATALปิดใช้งานอินเทอร์เฟซเครือข่าย IPv4 หากมีการกำหนดค่าผิด (yes — ปิด, no — เปิดใช้งาน)IPV6_FAILURE_FATALปิดใช้งานอินเทอร์เฟซเครือข่าย IPv6 หากมีการกำหนดค่าผิด (yes — ปิด, no — เปิดใช้งาน)IPV6_AUTOCONFอนุญาตหรือปฏิเสธการกำหนดค่า IPv6 อัตโนมัติIPV6_INITเปิดใช้งานการกำหนดที่อยู่ IPv6 (yes — ใช้การกำหนดที่อยู่ IPv6, no — ไม่ใช้)PEERROUTESตั้งลำดับความสำคัญของการกำหนดค่าเกตเวย์เริ่มต้นเมื่อใช้ DHCPIPV6_PEERROUTESตั้งลำดับความสำคัญของการกำหนดค่าเกตเวย์เริ่มต้นเมื่อใช้ DHCP สำหรับ IPv6
มากำหนดค่าอินเทอร์เฟซเครือข่ายจากข้อมูลนี้
วิธีกำหนดที่อยู่ IP แบบคงที่ใน CentOS/RHEL
เปิดไฟล์กำหนดค่าเครือข่ายเพื่อแก้ไข:
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

ในตัวอย่างนี้ ผมระบุที่อยู่ IP แบบคงที่ 넷มาสก์ย่อย เกตเวย์ และเซิร์ฟเวอร์ DNS หลายตัว เปิดใช้งานการบูทอินเทอร์เฟซอัตโนมัติ:
ONBOOT="yes"
หลังจากทำการเปลี่ยนแปลง ให้รีสตาร์ทบริการ network หากต้องการจะเห็นรายการดังนี้:
# service network restart
Restarting network (via systemctl): [ OK ]
นอกจากนี้ คุณอาจเพียงโหลดโปรไฟล์การเชื่อมต่อทั้งหมดใหม่:
# nmcli connection reload
วิธีรับที่อยู่ IP แบบไดนามิกจาก DHCP
หากเซิร์ฟเวอร์ของคุณต้องรับที่อยู่ IP แบบไดนามิกจากเซิร์ฟเวอร์ DHCP บนเครือข่าย ให้เปิดไฟล์กำหนดค่าอินเทอร์เฟซและเปลี่ยนการตั้งค่า:

เราได้ลบพารามิเตอร์ทั้งหมดที่เกี่ยวข้องกับที่อยู่ IP และ넷มาสก์ และเปลี่ยนวิธีการกำหนดที่อยู่ IP เป็น dhcp (BOOTPROTO="dhcp") หลังจากทำการเปลี่ยนแปลงทั้งหมด อย่าลืมโหลดบริการเครือข่ายใหม่
วิธีปิดใช้งาน IPv6 บน RHEL/CentOS
ในช่วงที่บทความเขียน ipv6 ยังไม่ได้ถูกใช้งานอย่างกว้างขวาง และผู้ดูแลระบบมักเลือกใช้ ipv4 หากเป็นไปได้ ดังนั้น หากคุณไม่ได้ใช้โปรโตคอล IPv6 ให้ปิดใช้งานบนเซิร์ฟเวอร์ของคุณ หากคุณแน่ใจว่าไม่มีบริการใดของคุณถูกกำหนดค่าให้ทำงานกับ ipv6 คุณสามารถดำเนินการกำหนดค่าอินเทอร์เฟซเครือข่ายต่อได้ มิฉะนั้น עדיף เริ่มจากการตรวจสอบ ให้รันคำสั่ง:
# netstat -tulnp

ผมมีเซิร์ฟเวอร์ทดสอบ ดังนั้น ipv6 ใช้ได้แค่ sshd และ chronyd อาจตรวจจับได้จาก ":::”
เพื่อป้องกันปัญหาหลังจากปิดใช้งาน ipv6 ในการกำหนดค่าเครือข่าย ให้ปิดโปรโตคอลสำหรับบริการที่ใช้บนเซิร์ฟเวอร์ของคุณ ตัวอย่าง เปิดไฟล์กำหนดค่า sshd:
# mcedit /etc/ssh/sshd_config
และยกเลิกความคิดเห็นบรรทัดเหล่านี้:
#AddressFamily any #ListenAddress 0.0.0.0
จากนั้นรีสตาร์ทบริการ:
# service sshd restart

เห็นได้ว่า ipv6 ไม่พร้อมใช้งานสำหรับ sshd แล้ว ทำเช่นเดียวกันสำหรับบริการอื่นๆ
มาปิดใช้งานโปรโตคอล ipv6 ในการตั้งค่าเครือข่าย เปิด /etc/sysctl.conf:
# nano /etc/sysctl.conf
และเพิ่มบรรทัดต่อไปไปที่นั่น:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
บันทึกไฟล์และนำไปใช้ด้วย:
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
จากนั้นเปิด /etc/sysconfig/network เพิ่มการกำหนดค่านี้:
NETWORKING_IPV6=no IPV6INIT=no

ลบบรรทัดต่อไปนี้ออกจากไฟล์กำหนดค่าอินเทอร์เฟซเครือข่าย /etc/sysconfig/network-scripts/ifcfg-eth0:
IPV6INIT="yes"
และสุดท้าย ห้ามใช้ ipv6 ใน grub:
# nano /etc/default/grub
เพิ่มต่อไปนี้ท้ายบรรทัด GRUB_CMDLINE_LINUX:
ipv6.disable=1

หลังจากทำการเปลี่ยนแปลงทั้งหมด บันทึกไฟล์และอัปเดต grub:
# grub2-mkconfig -o /boot/grub2/grub.cfg
รีบูทเซิร์ฟเวอร์และตรวจสอบการกำหนดค่าเครือข่าย:
# ifconfig
โปรโตคอล ipv6 ถูกปิดใช้งานบนเซิร์ฟเวอร์ของคุณแล้ว
การตั้งค่า DNS Nameservers บน CentOS/RHEL
คุณสามารถกำหนดค่า DNS nameservers สำหรับโฮสต์โดยใช้ /etc/resolv.conf หรือระบุในการตั้งค่าอินเทอร์เฟซเครือข่าย เมื่อตั้งค่าคอนฟิกแบบคงที่สำหรับอินเทอร์เฟซเครือข่าย Linux เราได้ระบุเซิร์ฟเวอร์ DNS แล้วโดยใช้พารามิเตอร์:
DNS1= DNS2= DNS3=
ตั้งค่าเซิร์ฟเวอร์ DNS ที่คุณต้องการและรีสตาร์ทบริการ network
DNS nameservers จะถูกลงทะเบียนอัตโนมัติใน /etc/resolv.conf โดยดึงจากไฟล์กำหนดค่าเครือข่าย หากคุณไม่ได้ระบุเซิร์ฟเวอร์ DNS ระหว่างการกำหนดค่าเครือข่าย ให้ทำด้วยมือใน /etc/resolv.conf:
nameserver 1.1.1.1 nameserver 8.8.8.8 nameserver 8.8.4.4
สร้างที่อยู่ IP หลายตัวให้อินเทอร์เฟซเครือข่ายเดียวบน RHEL/CentOS
หากคุณต้องการใช้ที่อยู่ IP หลายตัวในอินเทอร์เฟซเครือข่าย สามารถกำหนดค่าผ่านอีเลียสของอินเทอร์เฟซ หรือเพิ่มที่อยู่ IP เพิ่มเติมในไฟล์กำหนดค่าหลัก
# nano /etc/sysconfig/network-scripts/ifcfg-eth0
เปลี่ยนเป็นแบบนี้:
# Generated by parse-kickstart UUID="b8bccd4c-fb1b-4d36-9d45-044c7c0194eb" IPADDR1="*.*.*.*" IPADDR2="*.*.*.*" GATEWAY="*.*.*.*" NETMASK="255.255.255.0" BOOTPROTO="static" DEVICE="eth0" ONBOOT="yes" DNS1=1.1.1.1 DNS2=8.8.8.8 DNS3=8.8.4.4
โดย:
IPADDR1 — ที่อยู่ IP แรก
IPADDR2 — ที่อยู่ IP ที่สอง
GATEWAY — เกตเวย์หลัก
หรือสร้าง alias ให้ไฟล์กำหนดค่าหลัก:
# nano /etc/sysconfig/network-scripts/ifcfg-eth0:1
และเพิ่มบรรทัดบางส่วน แต่อย่าระบุเกตเวย์:

หลังจากกำหนดค่าการตั้งค่าทั้งหมด ให้รีสตาร์ทบริการเครือข่าย:
# service network restart
บน Windows คุณยังสามารถกำหนดค่าที่อยู่ IP หลายตัว (อีเลียส) บนอินเทอร์เฟซเครือข่ายเดียวได้
กำหนดค่า VLAN (802.1Q) Tagging บน RHEL/CentOS
เราได้อธิบายเพิ่มเติมเกี่ยวกับการกำหนดค่า VLAN หลายตัวสำหรับอินเทอร์เฟซเครือข่ายใน CentOS/RHEL/Fedora ในบทความ: How To Configure 802.1Q VLAN Tagging on RHEL/CentOS Linux
การกำหนดค่าอินเทอร์เฟซเครือข่ายหลายตัวบน RHEL/CentOS
หากคุณมีอินเทอร์เฟซเครือข่ายหลายตัวบนเซิร์ฟเวอร์ คุณสามารถระบุที่อยู่ IP ต่างๆ สำหรับแต่ละตัว มาเรียนรู้วิธีทำ หากมีอินเทอร์เฟซเครือข่ายมากกว่าหนึ่งบนเซิร์ฟเวอร์ คำสั่ง "ip a" ควรแสดงข้อมูลนี้:
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:52:42:54:2c:36 brd ff:ff:ff:ff:ff:ff
inet 15.*.*.*/16 brd 15.*.*.255 scope global eth0 valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 52:52:42:54:2c:b8 brd ff:ff:ff:ff:ff:f
เพื่อกำหนดค่าอินเทอร์เฟซที่สอง ให้สร้างไฟล์สำหรับมัน:
# nano /etc/sysconfig/network-scripts/ifcfg-eth1
และเพิ่มการกำหนดค่าต่อไปนี้:
IPADDR="*.*.*.*" GATEWAY="*.*.*.*" NETMASK="255.255.255.0" BOOTPROTO="static" DEVICE="eth1" ONBOOT="yes"

จากนั้นคุณต้องตั้งค่าเกตเวย์เริ่มต้นบนเซิร์ฟเวอร์ ตรวจสอบว่าตอนนี้ตั้งค่าเกตเวย์อะไรและเปลี่ยนหากจำเป็น:
# netstat -nr
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 15.*.*.1 0.0.0.0 UG 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 15.*.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 15.*.*.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
อินเทอร์เฟซ eth1 เป็นเกตเวย์หลัก ผมอยากใช้ eth0 มาเปลี่ยนกัน:
# route add default gw *.*.*.*– แทนที่เกตเวย์ด้วยอันที่ระบุใน eth0# route delete default gw *.*.*.*— ลบเกตเวย์ eth1

หากคุณต้องการเก็บการตั้งค่านี้หลังจากรีบูทเซิร์ฟเวอร์ ให้เพิ่มคำสั่งเหล่านี้ลงใน rc.local (ดูบทความ How to Start Services Automatically on Boot on RHEL/CentOS?)
คำสั่งเครือข่ายที่มีประโยชน์บน RHEL/CentOS
ifdown eth1— ปิดใช้งานอินเทอร์เฟซเครือข่ายที่ระบุifup eth1– เปิดใช้งานอินเทอร์เฟซเครือข่ายที่ระบุifconfig– แสดงข้อมูลเกี่ยวกับอินเทอร์เฟซเครือข่ายทั้งหมดifconfig -a | grep ether | gawk '{print $2}'— คำสั่งแสดงที่อยู่ MAC ของอินเทอร์เฟซip a | grep ether | gawk '{print $2}'— เหมือนด้านบนแต่ใช้ ip aservice network restartหรือsystemctl restart network– รีสตาร์ทบริการเครือข่ายด้วย systemctlsystemctl restart NetworkManager.service– รีสตาร์ท NMip routeหรือip route show— แสดงตารางเส้นทางบน Linuxping host– ping โฮสต์ที่ระบุwhois domain– แสดงข้อมูล whois เกี่ยวกับโดเมนdig domain– แสดงข้อมูล DNS เกี่ยวกับโดเมน
เครื่องมือการจัดการเครือข่ายบน RHEL/CentOS
หากเซิร์ฟเวอร์ทำงานมาสักพัก หรือไม่ได้ถูกกำหนดค่าโดยคุณ สิ่งแรกที่ควรทำคือเรียนรู้ว่ามีอินเทอร์เฟซอะไรบนเซิร์ฟเวอร์ เพื่อความสะดวก ติดตั้งเครื่องมือที่จำเป็นจากที่เก็บพื้นฐาน:
# yum install net-tools -y
หลังติดตั้ง สามารถใช้ ifconfig:
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 15.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255
เห็นได้ว่าชื่ออินเทอร์เฟซเครือข่ายของเราคือ eth0
หากคุณยังไม่ได้ติดตั้ง net-tools สามารถดูอินเทอร์เฟซได้ด้วยคำสั่ง:
# ip a
เอาต์พุตจะเกือบเหมือนกัน
การจัดการเครือข่ายด้วย NetworkManager ใน CentOS/RHEL 8
บน RHEL/CentOS 8 แนะนำให้ใช้ NetworkManager เท่านั้นสำหรับการกำหนดค่าเครือข่าย บริการนี้จัดการการเชื่อมต่อเครือข่าย ควบคุมการตั้งค่าและนำไปใช้กับอะดัปเตอร์เครือข่าย
เพื่อตรวจสอบสถานะ NM ใช้คำสั่ง:
# systemctl status NetworkManager.service

CentOS นำเสนอให้ใช้คอนโซลคำสั่ง nmcli หรือเครื่องมือกราฟิก nmtui เพื่อกำหนดค่าเครือข่าย
เพื่อเข้าสู่โหมดกำหนดค่าเครือข่าย ให้ป้อนคำสั่ง:
# nmtui

หลังเลือกตัวเลือกแรก จะเห็นหน้าต่างเลือกอินเทอร์เฟซเครือข่ายเพื่อแก้ไข:

เลือกอินเทอร์เฟซและแก้ไข:

คุณสามารถแก้ไขชื่ออุปกรณ์ ที่อยู่ IP เกตเวย์ และเซิร์ฟเวอร์ DNS ได้ ยังสามารถเปลี่ยนวิธีการกำหนดที่อยู่ IP เป็น DHCP ในเมนูโต้ตอบของ NM:

เปลี่ยน "manual" เป็น "automatic":

จากนั้นบันทึกการเปลี่ยนแปลง ด้วย nmtui คุณสามารถทำงานกำหนดค่าเดียวกันในโหมดกราฟิกเหมือนกับในไฟล์กำหนดค่า หากคุณชอบใช้บรรทัดคำสั่งในการกำหนดค่าอินเทอร์เฟซ สามารถใช้ nmcli ตัวอย่างเช่น คำสั่งต่อไปนี้จะเปลี่ยนที่อยู่ IP เกตเวย์ และเซิร์ฟเวอร์ DNS สำหรับ eth1
# nmcli con mod eth1 ipv4.addresses 192.168.11.24/24
# nmcli con mod eth1 ipv4.gateway 192.168.11.1
# nmcli con mod eth1 ipv4.dns "8.8.4.4"
เพื่อนำไปใช้ ให้รีสตาร์ทอินเทอร์เฟซ:
# nmcli con up eth1
หากสะดวกกว่าทำงานกับไฟล์กำหนดค่า ให้ติดตั้งแพ็กเกจพิเศษ network-scripts (โดยค่าเริ่มต้น CentOS 8 ไม่มี) โดยใช้ yum
# yum install network-scripts -y
Upgraded: initscripts-10.00.1-1.el8_0.1.x86_64 Installed: network-scripts-10.00.1-1.el8_0.1.x86_64 network-scripts-team-1.27-10.el8.x86_64 Complete!
หลังติดตั้ง สามารถแก้ไขการตั้งค่าเครือข่ายในไฟล์กำหนดค่าได้เหมือนที่อธิบายไว้ก่อนหน้า
