Mạng Cơ Bản trên Linux
Server là để phục vụ qua mạng, nên khi có sự cố ("không kết nối được", "dịch vụ không lên") bạn cần chẩn đoán mạng. Bài này dạy các lệnh mạng cốt lõi trên Linux — đủ để trả lời: máy có IP gì, cổng nào đang mở, có ra ngoài được không, DNS có hoạt động không.
Cài công cụ (Ubuntu tối giản thiếu sẵn):
apt update && apt install -y iproute2 iputils-ping curl dnsutils
Lưu ý: các lệnh cũ
ifconfig,netstat,routeđã lỗi thời, thay bằng bộipvàss(góiiproute2) hiện đại hơn. Tài liệu cũ trên mạng hay dùng lệnh cũ; bài này dùng lệnh mới.
Địa chỉ IP: ip addr
Xem địa chỉ IP của các giao diện mạng (interface):
ip addr # đầy đủ
ip -br addr # gọn (-br = brief)
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 172.17.0.5/16
- lo là loopback (
127.0.0.1) — chính máy này, dùng để các tiến trình trên cùng máy nói chuyện với nhau. - eth0 là card mạng thật, ở đây IP
172.17.0.5. Phần/16là subnet mask (dải mạng).
Định tuyến: ip route
Gói tin ra ngoài mạng đi đâu? Xem bảng định tuyến:
ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 ...
Dòng default via ... là gateway mặc định — mọi lưu lượng không thuộc mạng nội bộ đều đi qua đây để ra Internet. Nếu máy "không ra được mạng", một trong những thứ cần kiểm tra là có default route không.
Cổng đang nghe: ss
Một dịch vụ (web server, database) "lắng nghe" trên một cổng (port). Xem cổng nào đang mở:
ss -tlnp
-tTCP,-lchỉ socket đang nghe (listening),-nhiện số cổng (không phân giải tên),-phiện tiến trình nào (cần quyền root).
State Local Address:Port Process
LISTEN 0.0.0.0:80 users:(("nginx",pid=...))
LISTEN 127.0.0.1:5432 users:(("postgres",pid=...))
Đây là lệnh cực hữu ích khi gỡ lỗi "dịch vụ không truy cập được": kiểm tra nó có thực sự đang nghe không, và nghe ở đâu. Để ý sự khác biệt:
0.0.0.0:80— nghe trên mọi interface, truy cập được từ bên ngoài.127.0.0.1:5432— chỉ nghe trên loopback, chỉ truy cập được từ chính máy đó.
Lỗi kinh điển: dịch vụ chỉ bind 127.0.0.1 nên bên ngoài không vào được, dù dịch vụ vẫn "chạy".
Kiểm tra kết nối: ping, curl
ping kiểm tra có tới được một host không (ở mức mạng):
ping -c 2 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=43.2 ms
-c 2 gửi 2 gói rồi dừng (không có -c, nó ping mãi, Ctrl+C để dừng). Ping được nghĩa là tầng mạng tới đích thông.
curl kiểm tra ở mức ứng dụng (HTTP) — thường hữu ích hơn ping cho dịch vụ web:
curl -sI https://example.com # -s im lặng, -I chỉ lấy header
HTTP/2 200
HTTP/2 200 nghĩa là kết nối tới web server thành công. curl (hoặc wget) cũng để tải file, gọi API — công cụ vạn năng cho HTTP trên dòng lệnh.
DNS: phân giải tên thành IP
Khi bạn gõ example.com, máy phải tra ra IP của nó — đó là DNS. Kiểm tra phân giải tên:
getent hosts example.com # cách di động, dùng cơ chế phân giải của hệ thống
dig example.com +short # chi tiết hơn (gói dnsutils)
nslookup example.com
104.20.23.154 example.com
Hai file cấu hình liên quan:
/etc/resolv.conf— danh sách DNS server hệ thống dùng (nameserver ...)./etc/hosts— ánh xạ tên→IP cục bộ, được tra trước DNS. Thêm một dòng1.2.3.4 myhostở đây để ép một tên trỏ tới IP cố định (hay dùng để test, hoặc trỏ tên nội bộ).
Quy trình chẩn đoán "không kết nối được"
Ghép lại thành một trình tự khi một dịch vụ không truy cập được:
1. DNS có phân giải tên ra IP không? → getent hosts <tên> / dig
2. Có tới được host không (mạng)? → ping <ip>
3. Dịch vụ có nghe đúng cổng/interface? → ss -tlnp (trên server đích)
4. Tới được cổng đó không? → curl <url> / nc -zv <host> <port>
5. Có gì chặn ở giữa (firewall)? → kiểm tra firewall / security group
Đi lần lượt từ trên xuống thường khoanh vùng được vấn đề: tên sai (DNS), mạng đứt (ping), dịch vụ không lên hoặc bind nhầm (ss), hay bị chặn (firewall).
🧹 Dọn dẹp
Bài này chủ yếu là lệnh xem, không tạo gì cần dọn.
Tổng kết
Bộ lệnh mạng cốt lõi (hiện đại): ip addr xem IP, ip route xem định tuyến/gateway, ss -tlnp xem cổng đang nghe (và bind ở 0.0.0.0 hay 127.0.0.1), ping/curl kiểm tra kết nối ở tầng mạng/ứng dụng, và DNS qua getent/dig với cấu hình ở /etc/resolv.conf và /etc/hosts. Quy trình DNS → ping → ss → curl khoanh vùng được hầu hết sự cố kết nối.
Biết kiểm tra mạng rồi, Bài 14 học cách vào server qua mạng: SSH — kết nối từ xa, xác thực bằng key, và truyền file với scp/rsync.