Trong bài viết này, chúng ta sẽ xem xét cách cấu hình mạng trên Linux CentOS/RHEL 7/8 và thiết lập các giao diện mạng bằng file cấu hình, khám phá các công cụ cấu hình mạng cơ bản, v.v. Đây là chủ đề liên quan, vì cấu hình bất kỳ máy chủ nào đều bắt đầu từ cấu hình mạng trên nó.
Bài viết này 다루 các khía cạnh cấu hình mạng trên RHEL/CentOS 7 sử dụng dịch vụ network tiêu chuẩn. Chúng ta cũng sẽ học cách sử dụng NetworkManager (NM) mặc định trong CentOS/RHEL 8 để cấu hình mạng.
Quy tắc đặt tên thiết bị giao diện mạng trên RHEL/CentOS
Quy tắc đặt tên giao diện mạng truyền thống trong Linux gán tên như eth0, eth1, v.v. Tuy nhiên, các tên này không gắn chặt với các giao diện, và sau khi reboot, nhiều giao diện có thể nhận được tên khác nhau. Điều này có thể gây ra một số vấn đề, ví dụ, khi bạn cấu hình tường lửa qua firewalld hoặc iptables. Do đó, bắt đầu từ RedHat 7 và CentOS 7, đã quyết định gán tên giao diện mạng dựa trên thứ tự ưu tiên của các sơ đồ đặt tên khác nhau. Mặc định, systemd sẽ áp dụng các sơ đồ đặt tên lần lượt, chọn cái đầu tiên có sẵn và áp dụng được. Tên thiết bị mạng được gán tự động và không thay đổi ngay cả khi phần cứng được thêm hoặc thay đổi. Mặt khác, các tên giao diện này kém dễ đọc hơn, ví dụ enp5s0 hoặc ens3 so với truyền thống eth0 hoặc eth1.
Bạn có thể quay lại tên giao diện Linux mặc định bằng cách thực hiện các hành động sau.
Chỉnh sửa /etc/default/grub:
# nano /etc/default/grub
Thêm sau vào dòng GRUB_CMDLINE_LINUX:
net.ifnames=0 biosdevname=0
Ví dụ dòng GRUB đầy đủ:
GRUB_CMDLINE_LINUX="consoleblank=0 fsck.repair=yes crashkernel=auto nompath selinux=0 rhgb quiet net.ifnames=0 biosdevname=0"
Làm mới cấu hình grub:
# grub2-mkconfig -o /boot/grub2/grub.cfg
Đổi tên file cấu hình giao diện mạng:
# mv /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-eth0
Và thay đổi giá trị DEVICE:

Lưu file, reboot máy chủ và đảm bảo thay đổi đã được áp dụng:
# ip a

Giao diện giờ gọi là eth0.
Cấu hình mạng ban đầu trong quá trình cài đặt CentOS/RHEL
Ban đầu, trong quá trình cài đặt CentOS Linux, bạn có thể cấu hình giao diện mạng ở chế độ đồ họa bằng cách nhấn "Network & Hostname" trong menu. Tại đây bạn chỉ định tên máy chủ, thêm địa chỉ IP và gateway, DNS, v.v. Xem hướng dẫn chi tiết về cấu hình mạng ở bước này theo liên kết trên.
Cách chỉnh sửa file cấu hình giao diện mạng trên CentOS/RHEL?
Hãy hiển thị danh sách các giao diện mạng có sẵn trên máy chủ Linux:
# ip a
File cấu hình mạng của máy chủ Linux được lưu trữ trong /etc/sysconfig/network-scripts. Daemon NetworkManager tạo các file này cho mỗi giao diện mạng. Trong trường hợp của chúng ta, file cấu hình gọi là ifcfg-eth0 (bạn có thể có tên khác tùy thuộc vào sơ đồ đặt tên giao diện mạng).
Hãy tìm hiểu các tham số chính:
DEVICE— tên bộ chuyển mạng khớp với tên của nó trong hệ thống (là eth0 trong ví dụ)BOOTPROTOlà cách gán địa chỉ IP (static là giá trị nhập thủ công, dhcp nghĩa là IP được gán tự động)IPADDR— địa chỉ IPNETMASK— mặt nạ mạngGATEWAY— gateway mặc địnhDNS1là máy chủ DNS chínhDNS2là máy chủ DNS thay thếONBOOTlà phương pháp khởi động giao diện mạng (yes — tự động, no — thủ công)UUIDlà định danh duy nhất của giao diện mạng. Bạn có thể tự tạo bằng lệnh uuidgenIPV4_FAILURE_FATALvô hiệu hóa giao diện mạng IPv4 nếu cấu hình sai (yes — vô hiệu hóa, no — để bật)IPV6_FAILURE_FATALvô hiệu hóa giao diện mạng IPv6 nếu cấu hình sai (yes — vô hiệu hóa, no — để bật)IPV6_AUTOCONFcho phép hoặc từ chối tự cấu hình IPv6IPV6_INITbật sử dụng địa chỉ IPv6 (yes — dùng IPv6, no — không dùng)PEERROUTESđặt ưu tiên cấu hình gateway mặc định khi dùng DHCPIPV6_PEERROUTESđặt ưu tiên cấu hình gateway mặc định khi dùng DHCP cho IPv6
Hãy cấu hình giao diện mạng dựa trên thông tin này.
Cách cấu hình địa chỉ IP tĩnh trên CentOS/RHEL?
Mở file cấu hình mạng để chỉnh sửa:
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

Trong ví dụ này, tôi đã chỉ định địa chỉ IP tĩnh, mặt nạ mạng, gateway, và một số máy chủ DNS. Bật khởi động tự động giao diện:
ONBOOT="yes"
Sau khi thay đổi, khởi động lại dịch vụ network. Nếu OK, bạn sẽ thấy:
# service network restart
Restarting network (via systemctl): [ OK ]
Cũng có thể chỉ reload tất cả profile kết nối:
# nmcli connection reload
Cách lấy địa chỉ IP động từ DHCP?
Nếu máy chủ phải lấy địa chỉ IP động từ máy chủ DHCP trên mạng, mở file cấu hình giao diện và thay đổi cài đặt:

Chúng ta đã xóa tất cả tham số liên quan đến địa chỉ IP và mặt nạ, và thay đổi cách gán IP thành dhcp (BOOTPROTO="dhcp"). Sau khi làm tất cả thay đổi, đừng quên reload dịch vụ mạng.
Cách vô hiệu hóa IPv6 trên RHEL/CentOS?
Vào thời điểm bài viết được viết, ipv6 chưa được sử dụng rộng rãi, và quản trị viên thường thích dùng ipv4 nếu có thể. Vì vậy, nếu bạn không sử dụng giao thức IPv6, hãy vô hiệu hóa nó trên máy chủ. Nếu bạn chắc chắn rằng không dịch vụ nào được cấu hình làm việc với ipv6, bạn có thể tiến hành cấu hình giao diện mạng. Ngược lại, tốt hơn nên bắt đầu bằng kiểm tra. Bạn cần kiểm tra dịch vụ nào đang dùng IPv6 và vô hiệu hóa giao thức trong cấu hình dịch vụ. Chạy lệnh này:
# netstat -tulnp

Tôi có máy chủ test, nên ipv6 chỉ dùng cho sshd và chronyd. Có thể phát hiện bằng ":::".
Để tránh vấn đề sau khi vô hiệu hóa ipv6 trong cấu hình mạng, hãy vô hiệu hóa giao thức cho các dịch vụ dùng nó trên máy chủ. Ví dụ, mở file cấu hình sshd:
# mcedit /etc/ssh/sshd_config
Và bỏ comment các dòng:
#AddressFamily any #ListenAddress 0.0.0.0
Sau đó khởi động lại dịch vụ:
# service sshd restart

Như bạn thấy, ipv6 không còn khả dụng cho sshd. Làm tương tự cho các dịch vụ khác.
Hãy vô hiệu hóa giao thức ipv6 trong cài đặt mạng. Mở /etc/sysctl.conf:
# nano /etc/sysctl.conf
Và thêm các dòng sau:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
Lưu file và áp dụng thay đổi bằng:
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
Sau đó mở /etc/sysconfig/network. Thêm cấu hình này vào:
NETWORKING_IPV6=no IPV6INIT=no

Xóa dòng sau khỏi file cấu hình giao diện mạng /etc/sysconfig/network-scripts/ifcfg-eth0:
IPV6INIT="yes"
Và cuối cùng, cấm sử dụng ipv6 trong grub:
# nano /etc/default/grub
Thêm sau vào cuối dòng GRUB_CMDLINE_LINUX:
ipv6.disable=1

Sau khi làm tất cả thay đổi, lưu file và cập nhật grub:
# grub2-mkconfig -o /boot/grub2/grub.cfg
Reboot máy chủ và kiểm tra cấu hình mạng:
# ifconfig
Giao thức ipv6 đã bị vô hiệu hóa trên máy chủ.
Thiết lập DNS Nameservers trên CentOS/RHEL
Bạn có thể cấu hình DNS nameservers cho máy chủ bằng /etc/resolv.conf hoặc chỉ định chúng trong cài đặt giao diện mạng. Khi thiết lập cấu hình tĩnh cho giao diện mạng Linux, chúng ta đã chỉ định máy chủ DNS bằng các tham số sau:
DNS1= DNS2= DNS3=
Đặt máy chủ DNS bạn cần và khởi động lại dịch vụ network.
DNS nameservers tự động được đăng ký trong /etc/resolv.conf lấy từ file cấu hình mạng. Nếu bạn không chỉ định DNS server trong cấu hình mạng, hãy làm thủ công trong /etc/resolv.conf:
nameserver 1.1.1.1 nameserver 8.8.8.8 nameserver 8.8.4.4
Tạo nhiều địa chỉ IP cho một giao diện mạng trên RHEL/CentOS
Nếu bạn muốn sử dụng nhiều địa chỉ IP trong giao diện mạng, bạn có thể cấu hình qua alias giao diện hoặc thêm địa chỉ IP bổ sung vào file cấu hình chính.
# nano /etc/sysconfig/network-scripts/ifcfg-eth0
Thay đổi như sau:
# 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
Trong đó:
IPADDR1 — địa chỉ IP đầu tiên
IPADDR2 — địa chỉ IP thứ hai
GATEWAY — gateway chính
Hoặc tạo alias cho file cấu hình chính:
# nano /etc/sysconfig/network-scripts/ifcfg-eth0:1
Và thêm một số dòng, nhưng không chỉ định gateway:

Sau khi cấu hình tất cả cài đặt, khởi động lại dịch vụ mạng:
# service network restart
Trên Windows, bạn cũng có thể cấu hình nhiều địa chỉ IP (aliases) trên một giao diện mạng đơn lẻ.
Cấu hình VLAN (802.1Q) Tagging trên RHEL/CentOS
Chúng tôi đã nói nhiều hơn về cấu hình nhiều VLAN cho giao diện mạng trong CentOS/RHEL/Fedora trong bài: How To Configure 802.1Q VLAN Tagging on RHEL/CentOS Linux.
Cấu hình nhiều giao diện mạng trên RHEL/CentOS
Nếu bạn có nhiều giao diện mạng trên máy chủ, bạn có thể chỉ định địa chỉ IP khác nhau cho chúng. Hãy học cách làm. Nếu bạn có hơn một giao diện mạng, lệnh "ip a" sẽ hiển thị thông tin này:
# 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
Để cấu hình giao diện thứ hai, tạo file cho nó:
# nano /etc/sysconfig/network-scripts/ifcfg-eth1
Và thêm cấu hình sau:
IPADDR="*.*.*.*" GATEWAY="*.*.*.*" NETMASK="255.255.255.0" BOOTPROTO="static" DEVICE="eth1" ONBOOT="yes"

Sau đó bạn phải đặt gateway mặc định trên máy chủ. Kiểm tra gateway nào được đặt bây giờ và thay đổi nếu cần:
# 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
Giao diện eth1 là gateway chính. Tôi muốn dùng eth0. Hãy thay đổi:
# route add default gw *.*.*.*– thay thế gateway bằng cái chỉ định trong eth0# route delete default gw *.*.*.*— xóa gateway eth1

Nếu bạn muốn giữ cài đặt này sau reboot, thêm các lệnh này vào rc.local (xem bài How to Start Services Automatically on Boot on RHEL/CentOS?).
Các lệnh mạng hữu ích trên RHEL/CentOS
ifdown eth1— tắt giao diện mạng chỉ địnhifup eth1– bật giao diện mạng chỉ địnhifconfig– hiển thị thông tin về tất cả giao diện mạngifconfig -a | grep ether | gawk '{print $2}'— lệnh hiển thị địa chỉ MAC của giao diệnip a | grep ether | gawk '{print $2}'— tương tự trên dùng ip aservice network restarthoặcsystemctl restart network– khởi động lại dịch vụ mạng bằng systemctlsystemctl restart NetworkManager.service– khởi động lại NMip routehoặcip route show— hiển thị bảng định tuyến trên Linuxping host– ping máy chủ chỉ địnhwhois domain– hiển thị thông tin whois về domaindig domain– hiển thị thông tin DNS về domain
Công cụ quản trị mạng trên RHEL/CentOS
Nếu máy chủ đã hoạt động một thời gian hoặc chưa được cấu hình bởi bạn, điều đầu tiên bạn nên làm là tìm hiểu các giao diện nào có trên máy chủ. Để thuận tiện hơn, cài đặt các công cụ cần thiết từ kho cơ bản:
# yum install net-tools -y
Sau khi cài đặt, bạn có thể dùng ifconfig:
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 15.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255
Như bạn thấy, tên giao diện mạng của chúng ta là eth0.
Nếu bạn chưa cài net-tools, bạn có thể xem giao diện bằng lệnh:
# ip a
Đầu ra sẽ gần như giống nhau.
Quản lý mạng bằng NetworkManager trên CentOS/RHEL 8
Trên RHEL/CentOS 8, khuyến nghị chỉ dùng NetworkManager để cấu hình mạng. Dịch vụ này quản lý kết nối mạng, kiểm soát cài đặt và áp dụng thay đổi cho bộ chuyển mạng.
Để kiểm tra trạng thái NM, dùng lệnh:
# systemctl status NetworkManager.service

CentOS cung cấp console dòng lệnh nmcli hoặc công cụ đồ họa nmtui để cấu hình mạng.
Để vào chế độ cấu hình mạng, nhập lệnh:
# nmtui

Sau khi chọn mục đầu tiên, bạn sẽ thấy cửa sổ chọn giao diện mạng để chỉnh sửa:

Chọn giao diện và chỉnh sửa:

Bạn có thể chỉnh sửa tên thiết bị, địa chỉ IP, gateway và máy chủ DNS. Cũng có thể thay đổi cách gán IP thành DHCP trong menu tương tác NM:

Thay đổi "manual" thành "automatic":

Sau đó lưu thay đổi. Sử dụng nmtui, bạn có thể làm các tác vụ cấu hình tương tự ở chế độ đồ họa như bạn làm trong file cấu hình. Nếu bạn thích dùng dòng lệnh để cấu hình giao diện, bạn có thể dùng nmcli. Ví dụ, các lệnh sau sẽ thay đổi IP, gateway và DNS cho 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"
Để áp dụng thay đổi, khởi động lại giao diện:
# nmcli con up eth1
Nếu bạn thích làm việc với file cấu hình, cài gói đặc biệt network-scripts (mặc định CentOS 8 không có) bằng 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!
Sau khi cài đặt, bạn có thể chỉnh sửa cài đặt mạng trong file cấu hình như mô tả trước.
