Network Troubleshooting
Khi network có vấn đề, cần điều tra có hệ thống từ tầng dưới lên. Nguyên tắc: verify từng tầng OSI trước khi kết luận.
Quy trình điều tra Network
ping — Kiểm tra kết nối Layer 3
# Ping cơ bản
ping google.com # liên tục (Ctrl+C để dừng)
ping -c 4 google.com # 4 lần
ping -c 4 -i 0.5 192.168.1.1 # mỗi 0.5 giây
ping -s 1400 192.168.1.1 # kiểm tra MTU (gói 1400 bytes)
ping -M do -s 1472 192.168.1.1 # Don't Fragment — test MTU path
# Đọc output ping:
# PING google.com (142.250.x.x): 56 bytes of data
# 64 bytes from 142.250.x.x: icmp_seq=1 ttl=116 time=12.4 ms
# → time = RTT (round-trip time) — càng thấp càng tốt
# → ttl = time-to-live — mỗi hop giảm 1
# Ping nhiều host cùng lúc
for host in web01 web02 web03; do
ping -c 1 -W 1 $host > /dev/null && echo "$host: UP" || echo "$host: DOWN"
done
# fping — ping nhiều host nhanh
fping -a -g 192.168.1.0/24 2>/dev/null # scan cả subnet
traceroute / tracepath — Theo dấu đường đi
# traceroute
traceroute google.com # trace route (ICMP / UDP)
traceroute -T google.com # dùng TCP SYN (qua firewall tốt hơn)
traceroute -p 443 google.com # trace đến port cụ thể
traceroute -n google.com # không resolve hostname (nhanh hơn)
traceroute -m 20 google.com # max 20 hops
# tracepath — không cần root
tracepath google.com
tracepath -n google.com
# mtr — kết hợp ping + traceroute, real-time
mtr google.com # interactive
mtr --report google.com # report mode (chạy 10 lần rồi in)
mtr --report-wide google.com # rộng hơn
mtr -n google.com # không resolve hostname
# Đọc output mtr:
# Host Loss% Snt Last Avg Best Wrst StDev
# 1. 192.168.1.1 0.0% 10 0.5 0.5 0.4 0.6 0.1
# 2. 10.0.0.1 0.0% 10 2.1 2.0 1.9 2.3 0.1
# ...
# Loss% > 0% → packet loss ở hop đó
nmap — Network Scanner
nmap là công cụ scan network và kiểm tra port mạnh nhất:
# Port scan
nmap 192.168.1.10 # scan port thông thường
nmap 192.168.1.10 -p 80,443,22 # scan port cụ thể
nmap 192.168.1.10 -p 1-1000 # scan port range
nmap 192.168.1.10 -p- # scan tất cả 65535 port
# Scan types
nmap -sS 192.168.1.10 # SYN scan (stealth, cần root)
nmap -sT 192.168.1.10 # TCP connect scan
nmap -sU 192.168.1.10 -p 53,161 # UDP scan
nmap -sV 192.168.1.10 # service version detection
nmap -O 192.168.1.10 # OS detection
# Scan subnet
nmap 192.168.1.0/24 # scan cả subnet
nmap 192.168.1.0/24 -sn # chỉ ping scan (host discovery)
nmap 192.168.1.1-50 # range
# Nhanh hơn
nmap -F 192.168.1.10 # fast — chỉ top 100 port
nmap -T4 192.168.1.10 # aggressive timing
# Output
nmap 192.168.1.10 -oN output.txt # normal output
nmap 192.168.1.10 -oX output.xml # XML output
Sử dụng nmap có đạo đức
Chỉ scan host mà bạn có quyền. Scan hệ thống không được phép là vi phạm pháp luật.
ss / netstat — Xem kết nối và Port
# ss — thay thế netstat (nhanh hơn)
ss -tulpn # TCP/UDP Listening + process name
ss -tn # TCP connections
ss -s # statistics tóm tắt
ss -tp # TCP + process
ss -tulpn | grep :80 # ai đang listen port 80?
# Lọc theo state
ss -tn state ESTABLISHED # kết nối đang active
ss -tn state TIME-WAIT | wc -l # số TIME-WAIT connections
ss -tn state CLOSE-WAIT | wc -l # số CLOSE-WAIT (connection leak?)
# Top IP kết nối nhiều nhất
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# netstat (cũ hơn, cần net-tools)
netstat -tulpn # listen ports
netstat -an | grep ESTABLISHED
netstat -s | grep -i "failed\|overflow" # error statistics
tcpdump — Capture Packet
tcpdump là công cụ capture và phân tích packet ở command line:
# Capture cơ bản
sudo tcpdump -i eth0 # capture trên eth0
sudo tcpdump -i any # tất cả interface
# Filter
sudo tcpdump -i eth0 port 80 # chỉ HTTP
sudo tcpdump -i eth0 port 443 # chỉ HTTPS
sudo tcpdump -i eth0 host 192.168.1.10 # traffic từ/đến IP
sudo tcpdump -i eth0 src 192.168.1.10 # chỉ từ IP
sudo tcpdump -i eth0 dst 8.8.8.8 # chỉ đến IP
sudo tcpdump -i eth0 "port 80 and host 192.168.1.10"
# Kết hợp filter
sudo tcpdump -i eth0 "tcp port 80 or tcp port 443"
sudo tcpdump -i eth0 "not port 22" # loại trừ SSH
# Lưu file để phân tích bằng Wireshark
sudo tcpdump -i eth0 -w /tmp/capture.pcap
sudo tcpdump -i eth0 port 80 -w /tmp/http.pcap -c 1000 # dừng sau 1000 packets
# Đọc file đã capture
tcpdump -r /tmp/capture.pcap
tcpdump -r /tmp/capture.pcap -nn port 80 # không resolve, chỉ port 80
# Xem payload (ASCII)
sudo tcpdump -i eth0 port 80 -A # ASCII
sudo tcpdump -i eth0 port 80 -X # hex + ASCII
# Capture DNS
sudo tcpdump -i eth0 port 53 -vv
Ví dụ thực tế với tcpdump
# Debug kết nối đến service
sudo tcpdump -i eth0 "host 192.168.1.10 and port 5432" -nn
# Kiểm tra TCP handshake
sudo tcpdump -i eth0 "tcp[tcpflags] & (tcp-syn|tcp-fin) != 0" -nn
# Tìm HTTP request method và URL
sudo tcpdump -i eth0 port 80 -A 2>/dev/null | grep -E "GET|POST|PUT|DELETE"
# Đếm packet theo protocol
sudo tcpdump -i eth0 -nn -c 1000 2>/dev/null | awk '{print $NF}' | sort | uniq -c | sort -rn
dig / nslookup — Debug DNS
# dig — công cụ DNS mạnh nhất
dig google.com # A record
dig google.com AAAA # IPv6
dig google.com MX # Mail servers
dig google.com NS # Name servers
dig google.com TXT # TXT records
dig -x 8.8.8.8 # Reverse lookup
# Dùng DNS server cụ thể
dig @8.8.8.8 google.com # Google DNS
dig @1.1.1.1 google.com # Cloudflare DNS
dig @192.168.1.10 google.com # internal DNS
# Output ngắn gọn
dig google.com +short # chỉ IP
dig google.com MX +short
# Theo dõi query path (trace từ root)
dig google.com +trace
# Kiểm tra DNSSEC
dig google.com +dnssec
# Tính thời gian query
dig google.com | grep "Query time"
# nslookup
nslookup google.com # đơn giản
nslookup -type=MX google.com # MX records
nslookup google.com 8.8.8.8 # dùng DNS cụ thể
curl — HTTP Debugging
# Verbose — xem toàn bộ HTTP exchange
curl -v https://google.com 2>&1 | head -50
# Chỉ xem thời gian từng giai đoạn
curl -o /dev/null -s -w "
DNS: %{time_namelookup}s
Connect: %{time_connect}s
TLS: %{time_appconnect}s
TTFB: %{time_starttransfer}s
Total: %{time_total}s
HTTP: %{http_code}
" https://google.com
# Kiểm tra redirect
curl -v -L https://example.com 2>&1 | grep -E "< HTTP|Location:"
# Test port với curl
curl -v telnet://192.168.1.10:5432 # test TCP port
# Check SSL certificate
curl -vI https://google.com 2>&1 | grep -E "SSL|TLS|expire|cert"
Wireshark — GUI Packet Analyzer
Wireshark là GUI tool để phân tích pcap file từ tcpdump:
# Capture và mở Wireshark
sudo tcpdump -i eth0 -w /tmp/capture.pcap
wireshark /tmp/capture.pcap # mở GUI
# Display filters hữu ích:
# http → HTTP traffic
# tcp.port == 443 → HTTPS
# ip.addr == 192.168.1.10 → traffic của IP
# tcp.flags.syn == 1 → SYN packets
# http.response.code == 500 → HTTP 500 errors
# dns → DNS queries
# tcp.analysis.retransmission → TCP retransmissions (loss indicator)
Bảng lệnh troubleshoot nhanh
| Vấn đề | Lệnh điều tra |
|---|---|
| Server có response không? | ping -c 4 server_ip |
| Packet đi đến đâu bị chặn? | traceroute server_ip hoặc mtr server_ip |
| Port có mở không? | nc -zv server_ip port hoặc nmap -p port server_ip |
| AI đang listen port? | ss -tulpn | grep :80 hoặc lsof -i :80 |
| Nhiều TIME-WAIT connections? | ss -tn state TIME-WAIT | wc -l |
| DNS resolve được không? | dig domain +short |
| DNS chậm? | time dig domain |
| HTTP response code? | curl -o /dev/null -s -w "%{http_code}" url |
| Certificate hết hạn? | echo | openssl s_client -connect host:443 2>/dev/null | openssl x509 -noout -dates |
| Capture traffic? | sudo tcpdump -i eth0 port 80 -w /tmp/cap.pcap |