Skip to content

Instantly share code, notes, and snippets.

@tovin07
Created April 7, 2025 20:08
Show Gist options
  • Save tovin07/a8eebce9fbbcdcede4f703f3ca6806ba to your computer and use it in GitHub Desktop.
Save tovin07/a8eebce9fbbcdcede4f703f3ca6806ba to your computer and use it in GitHub Desktop.
NFS error

Rất hay, bạn đã đi sâu đến mức kiểm tra trạng thái TCP connection trên NFS server (A) — điều này cực kỳ hữu ích để khoanh vùng lỗi kết nối khi mount NFS.


🧠 Tình huống bạn mô tả:

Server Mô tả khi kết nối đến NFS server (A) Trạng thái TCP ở phía A
B Mount NFS thành công ESTABLISHED
C Mount NFS thất bại SYN_RECV

✅ Giải nghĩa trạng thái TCP:

  • ESTABLISHED (trường hợp B): kết nối TCP đã được thiết lập thành công 3-way handshake (SYN → SYN-ACK → ACK) → giao tiếp bình thường.
  • SYN_RECV (trường hợp C): server (A) đã nhận gói SYN từ client (C), gửi lại SYN-ACK, nhưng client không trả ACK lại → handshake không hoàn tất.

🔍 Kết luận: C gửi SYN nhưng không nhận được SYN-ACK phản hồi hoặc phản hồi bị chặn

→ Đây là dấu hiệu rõ ràng lỗi mạng hoặc firewall trên đường về từ A → C, hoặc bị chặn chiều về.


📌 Nguyên nhân thường gặp

1. 🔥 Firewall trên server C (client) chặn gói SYN-ACK từ A

  • Client gửi SYN nhưng chặn phản hồi → TCP không thiết lập được kết nối.
  • Có thể là ufw, iptables, hoặc nhóm bảo mật (security group nếu dùng cloud).

✅ Kiểm tra từ server C:

sudo iptables -L -n
sudo ufw status

2. 🚧 Thiết bị mạng trung gian chặn hoặc drop gói trả về

  • Switch, router, hoặc cloud VPC firewall chặn chiều A → C, dù chiều C → A đi được.
  • Trường hợp này rất phổ biến trong cloud, ví dụ AWS/NCP/Google Cloud nếu security group hoặc subnet firewall không cho phép return traffic.

3. 🌐 Server C có route sai, hoặc không nhận được gói từ A

  • Kiểm tra bảng định tuyến (ip route)
  • Nếu có nhiều NIC hoặc subnet, có thể route default không đi qua interface có kết nối với A

4. ❌ Không có dịch vụ rpcbind trên server A, hoặc A không phản hồi kịp

  • Nhưng nếu B vẫn mount được bình thường, khả năng này gần như loại trừ.

✅ Gợi ý kiểm tra cụ thể:

Trên server C (client):

  1. Kiểm tra firewall:
sudo ufw status
sudo iptables -L -n
  1. Kiểm tra có nhận được gói từ A không:
sudo tcpdump -i any host <nfs-server-ip> and port 2049

Nếu bạn thấy SYN gửi đi nhưng không có phản hồi → khả năng bị chặn chiều về.

  1. Kiểm tra route:
ip route
  1. Kiểm tra nếu có nhiều NIC:
ip addr

Trên server A (NFS server):

  1. Dùng ss hoặc netstat để quan sát:
ss -tn src :2049 | grep <ip-c>

→ Nếu thấy SYN-RECV liên tục → xác nhận handshake không xong.

  1. Kiểm tra log:
journalctl -u nfs-server -e

🧠 Tổng kết nhanh:

Tình trạng Giải nghĩa
SYN-RECV (mãi không thành ESTABLISHED) Client gửi SYN, server gửi SYN-ACK, nhưng client không nhận được hoặc drop
→ 99% lỗi nằm ở chiều về từ server A đến client C (mạng hoặc firewall)

Nếu bạn cần giúp phân tích cấu hình firewall hoặc muốn test chiều A → C, mình có thể hướng dẫn dùng ncat, tcpdump, hoặc traceroute để bắt và xác nhận luồng mạng nhé!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment