Linux

Các Lệnh Mạng Trong Linux Cho SysAdmin: ping, curl, ip, ss Và dig

phongdhphongdh
15 phút đọc
Chia sẻ:
Zalo
Các Lệnh Mạng Trong Linux Cho SysAdmin: ping, curl, ip, ss Và dig

“Website không vào được” là câu báo sự cố mơ hồ nhất mà quản trị viên nhận được, vì nguyên nhân có thể nằm ở bất cứ đâu: máy chủ mất mạng, DNS phân giải sai, dịch vụ web đã dừng hoặc cổng bị tường lửa chặn. Muốn khoanh vùng nhanh, bạn cần các lệnh mạng trong Linux để kiểm tra từng lớp một cách có hệ thống: địa chỉ IP bằng ip, kết nối bằng ping, dịch vụ web bằng curl, cổng đang mở bằng ss và DNS bằng dig. Bài viết hướng dẫn các lệnh mạng trong Linux theo đúng thứ tự chẩn đoán thực tế, kèm ảnh chạy lệnh thật trên máy chủ Ubuntu.

1. Lệnh ip: xem địa chỉ IP, card mạng và gateway

Lệnh ip là công cụ xem và cấu hình mạng hiện đại trên Linux, thay thế cho lệnh ifconfig đời cũ. Cú pháp xem nhanh toàn bộ địa chỉ là ip -brief addr, liệt kê từng card mạng (interface) cùng địa chỉ IP của chúng trên một dòng gọn. Card lo là giao diện loopback nội bộ với địa chỉ 127.0.0.1, card còn lại thường mang tên như eth0 hoặc ens3 là đường mạng thật của máy.

Xem địa chỉ IP các card mạng bằng ip addr và bảng định tuyến bằng ip route

Lệnh thứ hai trong ảnh, ip route, cho biết bảng định tuyến mà dòng quan trọng nhất là default via ..., chính là địa chỉ gateway, cửa ngõ để máy đi ra Internet. Khi máy chủ “mất mạng”, hai thông tin cần kiểm tra đầu tiên là card mạng có địa chỉ IP hợp lệ không và gateway có đúng không, cả hai đều nằm trong kết quả của lệnh ip.

Mẹo hay dùng: hostname -I in nhanh địa chỉ IP của máy mà không kèm thông tin thừa, rất tiện khi chỉ cần biết máy đang dùng IP nào. Còn nếu cần xem chi tiết một card cụ thể, dùng ip addr show eth0. Trong số các lệnh mạng trong Linux, nhóm lệnh ip là nơi mọi cuộc chẩn đoán nên bắt đầu.

Mọi cuộc chẩn đoán mạng bài bản đều bắt đầu từ lệnh ip, nền móng của các lệnh mạng trong Linux hiện đại.

2. Lệnh ping trong Linux: kiểm tra kết nối đến một máy

Lệnh ping gửi các gói tin ICMP nhỏ tới một máy đích và chờ phản hồi, qua đó đo được hai điều: máy đích có đang trực tuyến hay không và đường truyền mất bao lâu. Cú pháp cơ bản là ping địa-chỉ, và khác với Windows, ping trên Linux chạy liên tục cho đến khi bạn nhấn Ctrl + C. Muốn giới hạn số gói, thêm tham số -c, ví dụ ping -c 3 127.0.0.1.

Ping kiểm tra kết nối với ba gói tin và đọc kết quả thời gian phản hồi

Kết quả ping thành công gồm từng dòng phản hồi với thời gian tính bằng mili giây, và phần tổng kết cho biết đã gửi bao nhiêu gói, nhận lại bao nhiêu, tỷ lệ mất gói là 0% trong ảnh. Nếu tỷ lệ mất gói lớn hoặc thời gian phản hồi nhảy loạn, đường truyền đang có vấn đề. Lệnh ping trong Linux tuy đơn giản nhưng là phép thử kết nối cơ bản nhất trước mọi chẩn đoán sâu hơn.

Thực hành chuẩn khi nghi ngờ mất mạng trên máy chủ thật là ping theo từng chặng từ gần đến xa: ping gateway để kiểm tra mạng nội bộ, ping một địa chỉ IP công cộng như 8.8.8.8 để kiểm tra đường ra Internet, cuối cùng ping theo tên miền như ping -c 3 phongdinh.info.vn để kiểm tra cả DNS. Chặng nào gãy chính là nơi sự cố nằm, thay vì kiểm tra lan man khắp nơi.

Từ ip đến dig, các lệnh mạng trong Linux tạo thành một chuỗi kiểm tra khép kín cho mọi sự cố kết nối trên máy chủ.

Đơn giản nhưng không thể thay thế, lệnh ping trong Linux là phép thử đầu tiên cho mọi nghi ngờ về kết nối mạng.

3. Lệnh curl: kiểm tra website và API ngay từ terminal

Lệnh curl gửi yêu cầu HTTP trực tiếp từ terminal, cho phép kiểm tra một website có đang sống hay không mà không cần mở trình duyệt. Dạng dùng chẩn đoán nhất là curl -I địa-chỉ-website, chỉ lấy phần tiêu đề phản hồi (header) của máy chủ web. Dòng đầu tiên cho biết mã trạng thái: 200 là thành công, 301 hoặc 302 là chuyển hướng, 404 là không tìm thấy trang, 500 là lỗi phía máy chủ.

Kiểm tra phản hồi HTTP của website bằng curl -I và lấy địa chỉ IP công cộng bằng curl

Trong ảnh, website trả về mã 200 OK kèm các header thông tin về máy chủ. Lệnh thứ hai, curl -s https://api.ipify.org, gọi một dịch vụ công cộng để biết địa chỉ IP công cộng mà máy bạn đang dùng khi ra Internet, tham số -s giúp ẩn thanh tiến trình cho kết quả gọn gàng. Đây là mẹo kinh điển khi cần xác minh máy chủ đang đi qua đường mạng hay VPN nào.

Khi website báo lỗi, curl giúp phân định lỗi nằm ở đâu: curl ngay trên chính máy chủ về địa chỉ localhost mà vẫn lỗi thì vấn đề ở dịch vụ web hoặc ứng dụng; curl từ máy ngoài vào không được nhưng trong máy chủ được thì vấn đề nằm ở mạng hoặc tường lửa. Thêm tham số -v khi cần xem toàn bộ quá trình kết nối chi tiết để gỡ lỗi sâu hơn.

Nếu ping trả lời câu hỏi đường có thông không, thì curl trả lời câu hỏi dịch vụ có khỏe không, hai mặt bổ trợ của các lệnh mạng trong Linux.

4. Lệnh ss trong Linux: xem cổng nào đang mở

Mỗi dịch vụ trên máy chủ lắng nghe ở một cổng (port): web ở 80 và 443, SSH ở 22, cơ sở dữ liệu MySQL ở 3306. Lệnh ss liệt kê các kết nối và cổng đang mở trên máy, thay thế cho lệnh netstat đời cũ với tốc độ nhanh hơn. Cú pháp chẩn đoán kinh điển là ss -tuln: -t xem cổng TCP, -u xem UDP, -l chỉ lấy cổng đang lắng nghe, -n hiển thị dạng số.

Liệt kê các cổng đang lắng nghe trên máy chủ bằng lệnh ss -tuln

Đọc kết quả ss, cột Local Address:Port cho biết dịch vụ đang lắng nghe ở địa chỉ và cổng nào. Địa chỉ 0.0.0.0 nghĩa là lắng nghe trên mọi card mạng, còn 127.0.0.1 nghĩa là chỉ máy nội bộ mới kết nối được, một khác biệt cực kỳ quan trọng về bảo mật. Thêm tham số -p, lệnh ss trong Linux còn cho biết tiến trình nào đang giữ từng cổng.

Kịch bản ứng dụng quen thuộc: người dùng báo không vào được website, bạn kiểm tra bằng ss và thấy không có tiến trình nào lắng nghe ở cổng 443. Kết luận ngay được rằng dịch vụ web chưa chạy hoặc đã sập, cần kiểm tra systemctl chứ không phải lỗi mạng. Ngược lại cổng có lắng nghe mà vẫn không vào được thì nghi phạm chuyển sang tường lửa hoặc đường truyền phía trước máy chủ.

Thực hành đủ lâu, bạn sẽ tự xây dựng được quy trình chẩn đoán riêng dựa trên các lệnh mạng trong Linux đã học trong bài này.

Nhìn vào kết quả của lệnh ss trong Linux, bạn biết ngay dịch vụ của mình có thực sự đang lắng nghe ở cổng cần thiết hay không.

5. Lệnh dig và host: tra cứu DNS của tên miền

DNS là hệ thống dịch tên miền thành địa chỉ IP. Khi người dùng gõ tên miền mà trình duyệt báo không tìm thấy máy chủ, khả năng cao khâu dịch này đang trục trặc. Lệnh dig là công cụ tra cứu DNS đầy đủ nhất, và dạng gọn dig +short tên-miền chỉ in ra địa chỉ IP mà tên miền phân giải tới, vừa đủ cho nhu cầu kiểm tra nhanh.

Tra cứu địa chỉ IP của tên miền bằng dig +short và kiểm tra nhanh bằng lệnh host

Ảnh trên cho thấy tên miền phân giải thành công về một địa chỉ IP, kèm bản ghi thư điện tử khi tra bằng lệnh host, một công cụ tra cứu giản lược hơn dig. Lệnh dig trong Linux còn truy vấn được từng loại bản ghi cụ thể như dig MX tên-miền cho máy chủ email hay dig NS tên-miền cho nameserver, những thông tin sống còn khi cấu hình tên miền cho website và email doanh nghiệp.

Mẹo chẩn đoán phân biệt hai lớp sự cố: nếu ping 8.8.8.8 thành công nhưng ping theo tên miền thất bại, mạng vẫn tốt và lỗi nằm ở DNS. Nếu dig trả về IP khác với IP bạn vừa trỏ, có thể bản ghi chưa lan truyền xong (DNS propagation) hoặc bạn đang sửa nhầm bản ghi ở nhà cung cấp khác. Công cụ tra cứu trực tuyến như DNS Checker giúp đối chiếu kết quả phân giải từ nhiều nơi trên thế giới.

Tra cứu bằng lệnh dig trong Linux cho bạn bức tranh DNS đầy đủ và chính xác hơn bất kỳ công cụ đồ họa nào.

6. Xem DNS server đang dùng và địa chỉ của chính máy

Máy chủ lấy thông tin DNS từ các máy chủ phân giải (resolver) khai báo trong file /etc/resolv.conf. Lệnh grep nameserver /etc/resolv.conf cho biết máy đang hỏi DNS ở đâu. Nếu danh sách này trống hoặc trỏ sai, hiện tượng điển hình là ping được IP nhưng mọi tên miền đều không phân giải được.

Xem địa chỉ IP của máy bằng hostname -I và DNS server đang cấu hình trong resolv.conf

Kết hợp với hostname -I ở cùng ảnh, bạn có bức tranh định danh cơ bản của máy: tên máy, địa chỉ IP nội bộ của nó và nơi nó tra cứu DNS. Bộ ba thông tin này là thứ đồng nghiệp hỗ trợ kỹ thuật sẽ hỏi đầu tiên khi bạn báo sự cố mạng, vì vậy việc lấy chúng trong vài giây bằng các lệnh mạng trong Linux là kỹ năng nên thành phản xạ.

Lưu ý trên Ubuntu hiện đại, file resolv.conf thường do dịch vụ systemd-resolved quản lý tự động, sửa tay trực tiếp có thể bị ghi đè khi khởi động lại. Khi cần đổi DNS lâu dài, hãy cấu hình qua Netplan hoặc công cụ quản lý mạng của hệ thống thay vì sửa file này một cách thủ công.

Đừng quên lệnh ss trong Linux mỗi khi một dịch vụ báo đang chạy mà người dùng vẫn không kết nối được.

Ba chặng ping từ gần đến xa biến lệnh ping trong Linux thành một quy trình khoanh vùng sự cố hoàn chỉnh.

7. Kịch bản thực tế: lần theo sự cố “website không vào được”

Đặt mọi lệnh vào một quy trình chẩn đoán có thứ tự. Bước một, ngay trên máy chủ, chạy curl -I http://localhost: nếu không có phản hồi 200 hoặc 301/302, dịch vụ web đang có vấn đề, chuyển sang kiểm tra systemctl và log của web server. Nếu trong máy chủ chạy ngon, bước hai là ss -tuln xác nhận web server có thật sự lắng nghe ở cổng 80 và 443 trên mọi địa chỉ hay chỉ localhost.

Bước ba, từ một máy bên ngoài hoặc chính máy chủ, ping địa chỉ IP công cộng của máy chủ để kiểm tra đường truyền và xem có bị mất gói không. Bước bốn, dùng dig kiểm tra tên miền có phân giải đúng về IP công cộng đó không. Bước năm, curl theo tên miền từ bên ngoài: nếu IP đúng mà curl vẫn lỗi, nghi phạm cuối là tường lửa của nhà cung cấp cloud hoặc cấu hình bảo mật chặn cổng.

Điểm mạnh của quy trình này là mỗi bước loại trừ hẳn một lớp nguyên nhân, từ ứng dụng xuống dịch vụ, cổng, mạng rồi DNS. Chỉ với năm lệnh cơ bản, thời gian khoanh vùng sự cố rút từ hàng giờ đoán mò xuống còn vài phút kiểm tra có phương pháp. Đây là giá trị thực tế lớn nhất của việc thành thạo các lệnh mạng trong Linux.

Khi đã quen tay, bạn sẽ thấy các lệnh mạng trong Linux không hề khó, phần khó là nhớ đúng thứ tự áp dụng chúng khi sự cố xảy ra.

8. Bảng tổng hợp các lệnh mạng trong Linux

Bảng dưới đây tóm tắt bộ lệnh đã dùng trong bài cùng một số lệnh đồng hành thường gặp, giúp bạn tra nhanh đúng lệnh cho đúng câu hỏi chẩn đoán.

LệnhCông dụngVí dụ
ip addrXem địa chỉ IP các card mạngip -brief addr
ip routeXem gateway và bảng định tuyếnip route
pingKiểm tra kết nối tới một máyping -c 3 8.8.8.8
curlKiểm tra HTTP của website/APIcurl -I https://example.com
ssXem cổng đang lắng nghess -tuln
digTra cứu bản ghi DNSdig +short example.com
hostTra cứu DNS dạng gọnhost example.com
hostname -IXem nhanh IP của máyhostname -I
ip route getXem đường đi tới một IPip route get 8.8.8.8
curl ifconfig.meXem IP công cộngcurl -s ifconfig.me

Nếu để ý, mỗi lệnh trong bảng trả lời một câu hỏi chẩn đoán riêng: máy có IP chưa, cửa ngõ ở đâu, đường có thông không, dịch vụ web có trả lời không, cổng có mở không, tên miền có dịch đúng không. Học thuộc câu hỏi đi kèm từng lệnh quan trọng hơn học thuộc cú pháp, vì cú pháp luôn tra lại được trong vài giây.

DNS là lớp hay bị bỏ quên nhất khi chẩn đoán, và lệnh dig trong Linux chính là công cụ đưa lớp này ra ánh sáng.

9. Lỗi thường gặp khi kiểm tra mạng trên Linux

Lỗi ngộ nhận thứ nhất: ping thất bại liền kết luận máy đích đã sập. Nhiều hệ thống và nhà cung cấp cloud tắt phản hồi ICMP trong tường lửa, máy vẫn sống và website vẫn chạy bình thường dù ping không thông. Hãy luôn kiểm chứng chéo bằng curl vào đúng dịch vụ cần kiểm tra trước khi kết luận.

Lỗi thứ hai là nhầm lẫn giữa lỗi DNS và lỗi mạng, dẫn đến sửa nhầm chỗ suốt nhiều giờ. Phép phân biệt rất đơn giản đã nêu trong bài: ping bằng địa chỉ IP thành công nhưng bằng tên miền thất bại thì đích thị là DNS. Ngược lại cả IP cũng không ping được mới là chuyện của đường truyền hoặc tường lửa chặn ICMP.

Lỗi thứ ba: dịch vụ chỉ lắng nghe ở 127.0.0.1 nên trong máy chủ tự kiểm tra thì được mà bên ngoài không vào nổi. Kết quả ss cho thấy rõ điều này ở cột địa chỉ. Muốn dịch vụ phục vụ ra ngoài, cần cấu hình nó lắng nghe ở 0.0.0.0 hoặc địa chỉ IP thật, đồng thời mở cổng tương ứng trên tường lửa một cách có chủ đích.

Thành thạo các lệnh mạng trong Linux nghĩa là biến một báo cáo sự cố mơ hồ thành danh sách kiểm tra rõ ràng từng bước.

10. Câu hỏi thường gặp về các lệnh mạng trong Linux

Nên dùng lệnh ip hay ifconfig? Dùng ip, vì ifconfig thuộc bộ công cụ net-tools đã lỗi thời và vắng mặt trên nhiều bản cài đặt tối thiểu hiện nay. Lệnh ip là tiêu chuẩn hiện hành trong số các lệnh mạng trong Linux, mọi tài liệu mới đều dùng nó. Lệnh ss cũng theo cùng logic thay thế cho netstat cũ.

Vì sao curl trong máy chủ được mà từ ngoài vào không được? Vì còn các lớp nằm ngoài máy chủ: tường lửa của hệ điều hành, nhóm bảo mật (security group) của nhà cung cấp cloud, hoặc cân bằng tải phía trước. Hãy kiểm tra lần lượt từng lớp theo quy trình chẩn đoán trong bài thay vì chỉ chăm chăm vào cấu hình web server.

Dig không có trên máy thì dùng gì? Một số bản cài tối thiểu thiếu dig vì nó thuộc gói dnsutils. Bạn có thể cài bằng apt, hoặc tạm dùng lệnh host và nslookup trong cùng gói, hoặc dùng getent hosts tên-miền vốn có sẵn trên hầu hết hệ thống để kiểm tra phân giải cơ bản.

Làm sao biết cổng 443 bị chặn bởi tường lửa hay dịch vụ chưa chạy? Chạy ss trước: không thấy cổng 443 trong danh sách lắng nghe nghĩa là dịch vụ chưa chạy, xử lý ở tầng ứng dụng. Có lắng nghe mà kết nối từ ngoài vẫn bị từ chối hoặc treo, đó mới là dấu hiệu của tường lửa chặn đường vào.

11. Lời kết

Xuyên suốt bài viết, các lệnh mạng trong Linux đã được xếp thành một quy trình chẩn đoán hoàn chỉnh: xác nhận địa chỉ và gateway bằng ip, kiểm tra đường truyền bằng ping, kiểm tra dịch vụ web bằng curl, xác nhận cổng lắng nghe bằng ss và kiểm tra phân giải tên miền bằng dig. Nắm vững năm lệnh này, phần lớn sự cố mạng thường gặp trên máy chủ sẽ được khoanh vùng trong vài phút.

Hãy thực hành ngay trên máy chủ hoặc máy ảo của bạn bằng cách chạy lần lượt từng lệnh và tự giải thích kết quả trước khi xem đáp án trong bài. Khi các lệnh mạng trong Linux trở thành phản xạ, cụm từ “website không vào được” sẽ không còn là một báo động mơ hồ, mà là một bài toán có quy trình giải rõ ràng từng bước.

Chia sẻ bài viết này:
Zalo
phongdh

phongdh

Tác giả bài viết • Content Creator

Chào mọi người, mình là Phong - hiện đang công tác tại Phòng Kỹ thuật AZDIGI. Trong quá trình làm việc mình có cơ hội được tiếp xúc với khá nhiều các vấn đề liên quan đến Website/Email/Hosting/VPS/Server, do đó mình viết lại các hướng dẫn này nhằm chia sẻ kiến thức, cũng như tạo một môi trường để chúng ta giao lưu và học hỏi lẫn nhau.

Kết nối:

Bài viết liên quan

Những bài viết bạn có thể quan tâm

Thảo luận 0 bình luận Viết bình luận

Email được bảo mật và không hiển thị công khai.

Chưa có bình luận. Hãy là người mở đầu cuộc trò chuyện.

Zalo