Skip to main content

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