Ngừng sử dụng ifconfig: Hướng dẫn quản trị mạng chuyên nghiệp với nmcli

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

Sự chuyển dịch từ Legacy Script sang NetworkManager

Nếu bạn vẫn đang gõ ifconfig để kiểm tra địa chỉ IP, bạn đang sử dụng một công cụ đã chính thức bị khai tử hơn một thập kỷ trước. Trong nhiều năm, các quản trị viên hệ thống (sysadmin) đã quản lý mạng Linux bằng cách can thiệp thủ công vào /etc/network/interfaces hoặc /etc/sysconfig/network-scripts/ifcfg-eth0. Đó là một quy trình mỏng manh. Chỉ một lỗi đánh máy trong tệp văn bản cũng có thể khiến bạn bị khóa khỏi máy chủ từ xa, buộc phải di chuyển trực tiếp đến trung tâm dữ liệu.

Các bản phân phối hiện đại như RHEL 9, Ubuntu 22.04 và Debian 12 hiện dựa vào NetworkManager như một nguồn quản lý tập trung duy nhất. Nhiều kỹ sư tránh sử dụng công cụ dòng lệnh của nó, nmcli, vì cú pháp có vẻ khó nhớ. Tuy nhiên, việc sử dụng các công cụ cũ trong môi trường NetworkManager là rất nguy hiểm. Bạn có thể thay đổi IP bằng ifconfig, nhưng chỉ 30 giây sau, daemon sẽ ghi đè các thiết lập của bạn trong quá trình làm mới DHCP hoặc khởi động lại dịch vụ.

Lựa chọn công cụ: Tại sao nmcli chiến thắng trong môi trường Production

Trong môi trường chuyên nghiệp, bạn thường có ba cách để cấu hình mạng. Dưới đây là hiệu quả thực tế của chúng:

1. Các tệp cấu hình thủ công

Cách này bao gồm việc chỉnh sửa các tệp Netplan YAML trong Ubuntu hoặc các key-file trong /etc/NetworkManager/system-connections/. Nó hoạt động tốt cho Infrastructure as Code (IaC) như Ansible. Tuy nhiên, nó lại chậm chạp khi cần xử lý sự cố trực tiếp. Một khoảng trắng bị thiếu trong tệp YAML có thể làm mất kết nối, khiến bạn phải vất vả tìm bảng điều khiển serial (serial console) vào lúc 2 giờ sáng.

2. Các tiện ích cũ (ifconfig/route)

Những công cụ này rất tuyệt để xem nhanh địa chỉ MAC trong 5 giây, nhưng chúng là “stateless” (không lưu trạng thái). Chúng chỉ thay đổi trạng thái hiện tại trong RAM. Nếu máy chủ khởi động lại, các thay đổi của bạn sẽ biến mất. Trên các hệ thống hiện đại, NetworkManager thường coi những thay đổi thủ công này là sự can thiệp “unmanaged” (không được quản lý) và sẽ chủ động hoàn tác chúng để duy trì chính sách đã xác định.

3. nmcli (Tiêu chuẩn chuyên nghiệp)

Đây là tiêu chuẩn vàng cho các sysadmin hiện đại. Nó giao tiếp trực tiếp với API của NetworkManager. Khi bạn chạy một lệnh nmcli, nó sẽ cập nhật đồng thời cấu hình vĩnh viễn và trạng thái hoạt động. Tôi đã sử dụng nó để quản lý các giao diện SFP+ 10Gbps và gắn thẻ VLAN tagging phức tạp mà không gây gián đoạn dịch vụ. Nó nhanh, đáng tin cậy và mặc định duy trì được sau khi khởi động lại.

Những sự đánh đổi

  • Ưu điểm:
    • Sự đồng nhất: Các lệnh bạn sử dụng trên máy trạm Fedora hoạt động hoàn toàn giống hệt trên máy chủ web Debian.
    • Tính vĩnh viễn: Bạn không cần lo lắng về các script post-up; các thay đổi luôn được lưu lại.
    • Tự động hóa: Nó trả về các mã thoát (exit codes) có thể dự đoán được, giúp nó trở nên hoàn hảo cho việc tự động hóa bằng Bash.
    • An toàn: Tính năng gợi ý bằng phím Tab giúp bạn tránh lỗi cú pháp trước khi nhấn Enter.
  • Nhược điểm:
    • Lệnh dài:nmcli connection modify tốn công hơn so với các cách cũ.
    • Khái niệm: Bạn phải học cách phân biệt giữa device (card mạng vật lý) và connection (hồ sơ phần mềm).

Bắt đầu: Chuẩn bị cho môi trường Production

Trước khi can thiệp vào máy chủ production, hãy đảm bảo NetworkManager thực sự đang quản lý giao diện đó. Nếu bạn thấy trạng thái “unmanaged” trong báo cáo, nmcli sẽ không thể giúp gì được. Hãy bắt đầu bằng cách kích hoạt dịch vụ:

systemctl enable --now NetworkManager

Các công thức nmcli thực tế

Để làm chủ nmcli, hãy nhớ quy tắc này: Bạn áp dụng **Connections** (hồ sơ) vào **Devices** (phần cứng).

1. Kiểm tra phần cứng của bạn

Luôn bắt đầu bằng việc xác định các giao diện của bạn. Một máy chủ có thể có bốn cổng Ethernet, nhưng chỉ có một cổng được cắm vào switch.

# Kiểm tra trạng thái của phần cứng vật lý và ảo
nmcli device status

# Liệt kê tất cả các hồ sơ cấu hình đã lưu
nmcli connection show

Các kết nối đang hoạt động sẽ xuất hiện màu xanh lá cây. Nếu một thiết bị được liệt kê là “disconnected”, nó đang ở trạng thái rảnh và chờ được gán một hồ sơ.

2. Cài đặt IP tĩnh (Cách đúng đắn)

Giả sử bạn cần thiết lập IP tĩnh trên eth0 cho một máy chủ cơ sở dữ liệu mới. Thay vì đi tìm tệp cấu hình, hãy sử dụng lệnh một dòng này. Chúng ta sẽ đặt tên hồ sơ là “Static-Internal” cho rõ ràng.

# Tạo hồ sơ với IP, Gateway và phương thức Manual (thủ công)
nmcli con add type ethernet con-name Static-Internal ifname eth0 ipv4.addresses 10.0.0.50/24 ipv4.gateway 10.0.0.1 ipv4.method manual

# Thêm các DNS resolver (Cloudflare và Google trong ví dụ này)
nmcli con mod Static-Internal ipv4.dns "1.1.1.1,8.8.8.8"

3. Chuyển từ DHCP sang IP tĩnh

Nếu máy chủ đang chạy DHCP và bạn cần cố định nó thành một địa chỉ tĩnh (ví dụ: 192.168.1.101), hãy chỉnh sửa hồ sơ “Wired connection 1” hiện có.

# Cập nhật hồ sơ hiện có
nmcli con mod "Wired connection 1" ipv4.addresses 192.168.1.101/24
nmcli con mod "Wired connection 1" ipv4.gateway 192.168.1.1
nmcli con mod "Wired connection 1" ipv4.method manual

# Kích hoạt các thay đổi
nmcli con up "Wired connection 1"

Lưu ý: Các thay đổi được ghi vào /etc/NetworkManager/system-connections/ ngay lập tức. Tuy nhiên, chúng sẽ không có hiệu lực cho đến khi bạn “up” kết nối đó. Để bảo mật hơn cho các truy vấn tên miền, bạn cũng có thể tìm hiểu về các DNS resolver có hỗ trợ mã hóa.

4. Xử lý nhiều IP (IP Aliasing)

Trong các thiết lập có tính sẵn sàng cao (high-availability), bạn thường cần một card mạng (NIC) chứa nhiều IP. nmcli giúp việc này gọn gàng hơn nhiều so với thủ thuật giao diện ảo eth0:0 cũ kỹ.

# Sử dụng tiền tố '+' để thêm địa chỉ thay vì thay thế nó
nmcli con mod Static-Internal +ipv4.addresses 10.0.0.51/24
nmcli con up Static-Internal

Mẹo “Lưới an toàn” cho SSH từ xa

Thay đổi cài đặt mạng qua SSH giống như việc bạn tự phẫu thuật cho chính mình. Nếu phạm sai lầm, bạn sẽ mất kết nối và máy chủ sẽ trở thành một “cục gạch”. Để ngăn chặn điều này, hãy sử dụng một chuỗi lệnh “rollback” (hoàn tác).

Chạy lệnh này khi áp dụng các thay đổi rủi ro:

nmcli con up NewConfig; sleep 60; nmcli con up OldConfig

Nếu cấu hình mới hoạt động, hãy nhấn Ctrl+C để hủy lệnh sleep. Nếu bạn bị văng ra ngoài, chỉ cần đợi 60 giây. Máy chủ sẽ tự động quay trở lại cấu hình cũ đang hoạt động và bạn có thể đăng nhập lại để sửa lỗi.

Làm chủ nmcli là việc chuyển từ quy trình “chỉnh sửa và cầu nguyện” sang một phương thức chuyên nghiệp hơn. Bằng cách sử dụng các công cụ gốc được thiết kế cho daemon, bạn đảm bảo mạng của mình ổn định, được ghi chép đầy đủ và sẵn sàng cho thời gian hoạt động (uptime) của môi trường production.

Share: