NAT Troubleshooting – Những lỗi “kinh điển” khiến NAT/PAT hoạt động sai và cách xử lý
NAT là một trong những công nghệ mà gần như kỹ sư mạng nào cũng từng cấu hình. Nhìn qua thì có vẻ đơn giản: ánh xạ địa chỉ private sang public để thiết bị nội bộ đi ra Internet. Nhưng khi hệ thống không hoạt động, NAT lại trở thành một trong những thành phần gây đau đầu nhất trong quá trình troubleshooting.
Chỉ cần sai một dòng lệnh nhỏ, thiếu một keyword, hoặc quảng bá route chưa đúng là traffic có thể “đi mà không về”.
Dựa trên tài liệu gốc , chúng ta cùng phân tích cách troubleshooting NAT theo góc nhìn thực chiến.
1. Cấu hình NAT/PAT mẫu
Ví dụ một cấu hình Dynamic NAT kết hợp PAT:
R1# show run
interface FastEthernet1/0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface GigabitEthernet0/0
ip address 203.0.113.1 255.255.255.248
ip nat outside
!
ip nat pool OUTSIDE_POOL 203.0.113.3 203.0.113.6 netmask 255.255.255.248
ip nat inside source list 1 pool OUTSIDE_POOL overload
access-list 1 permit 10.1.1.0 0.0.0.255
Ý nghĩa:
Thoạt nhìn đơn giản. Nhưng rất nhiều lỗi có thể xảy ra.
2. Những lỗi cấu hình NAT phổ biến
2.1 Inside/Outside interface cấu hình sai
NAT hoạt động dựa trên việc router biết:
Ví dụ đúng:
ip nat inside
và
ip nat outside
Nếu đảo ngược:
inside thành outside
outside thành inside
thì translation sẽ không bao giờ hoạt động đúng.
Triệu chứng:
Kiểm tra:
show ip nat statistics
2.2 NAT Pool cấu hình sai
Ví dụ:
ip nat pool OUTSIDE_POOL 203.0.113.3 203.0.113.6 netmask 255.255.255.248
Nếu nhập sai:
203.0.113.30
hoặc netmask không đúng:
255.255.255.0
thì NAT mapping sẽ lỗi.
Router vẫn nhận cấu hình nhưng translation không đúng như mong đợi.
2.3 Public IP không reachable
Đây là lỗi cực kỳ phổ biến.
NAT chỉ đổi địa chỉ.
Nó không tự động làm cho Internet biết đường quay lại.
Ví dụ host nội bộ:
10.1.1.10
được NAT thành:
203.0.113.4
Remote server sẽ reply về:
203.0.113.4
Nhưng nếu ISP không biết route tới subnet này thì gói phản hồi bị drop.
Triệu chứng:
Kiểm tra:
show ip route
và xác minh ISP đã quảng bá subnet public.
2.4 ACL xác định sai inside local addresses
ACL quyết định host nào được NAT.
Ví dụ đúng:
access-list 1 permit 10.1.1.0 0.0.0.255
Nếu cấu hình nhầm:
access-list 1 permit 10.1.2.0 0.0.0.255
thì host thật:
10.1.1.10
sẽ không match ACL.
Kết quả:
Không NAT.
2.5 Mapping ACL với pool sai
Lệnh quan trọng:
ip nat inside source list 1 pool OUTSIDE_POOL overload
Đây là nơi “ghép đôi”:
Nếu:
thì NAT fail.
Ví dụ:
ip nat inside source list 10 pool OUTSIDE_POOL overload
trong khi ACL thật là:
access-list 1 ...
=> mismatch.
2.6 Thiếu keyword overload
Nếu muốn PAT mà quên:
overload
thì router chỉ làm Dynamic NAT.
Khác biệt:
Dynamic NAT:
PAT:
Nếu số lượng host lớn mà không overload:
pool sẽ nhanh chóng hết IP.
Triệu chứng:
3. Những vấn đề troubleshooting thực tế với NAT
NAT over VPN
Một số giao thức VPN kiểm tra checksum để đảm bảo packet integrity.
Ví dụ IPsec.
Trước NAT:
Source IP = 10.1.1.10
Sau NAT:
Source IP = 203.0.113.4
Checksum thay đổi.
VPN peer có thể hiểu packet đã bị chỉnh sửa và reject.
Đây là lý do NAT traversal (NAT-T) tồn tại.
NAT che giấu IP thật
Ví dụ:
Client:
10.1.1.25
bị NAT thành:
203.0.113.5
Firewall log chỉ thấy:
203.0.113.5
Không thấy IP private gốc.
Điều này làm troubleshooting end-to-end khó hơn rất nhiều.
Lệnh hữu ích:
show ip nat translations
Ứng dụng không tương thích NAT
Một số ứng dụng nhúng IP address vào payload.
Ví dụ:
NAT chỉ sửa header Layer 3/4.
Nếu payload vẫn chứa:
10.1.1.10
remote peer sẽ cố reply về địa chỉ private.
=> fail.
NAT tạo thêm độ trễ
NAT không miễn phí về mặt xử lý.
Router phải:
Nếu router xử lý hàng triệu flows:
latency tăng rõ rệt.
Đặc biệt với router CPU yếu.
4. Các lệnh troubleshooting NAT quan trọng
show ip nat translations
Lệnh số 1.
show ip nat translations
Ví dụ:
Pro Inside global Inside local Outside local Outside global
tcp 192.168.1.27:23 192.168.0.27:23 192.168.1.50:1158 192.168.1.50:1158
Ý nghĩa:
Nếu không thấy entry động:
host chưa được NAT.
clear ip nat translation *
Xóa toàn bộ dynamic translations:
clear ip nat translation *
Hữu ích khi:
Lưu ý:
Không xóa static NAT entries.
show ip nat statistics
Rất hữu ích.
show ip nat statistics
Ví dụ:
Total active translations : 4
Outside interfaces:
FastEthernet0/0
Inside interfaces:
FastEthernet0/1
Hits: 10
Misses: 0
Quan sát:
Nếu misses tăng mạnh:
traffic không match NAT rule.
debug ip nat
Lệnh mạnh nhưng nguy hiểm.
debug ip nat
Ví dụ:
NAT: s=192.168.1.11->192.168.1.27
Nghĩa là:
192.168.1.11
được dịch thành:
192.168.1.27
Nhược điểm:
debug có thể làm router CPU tăng mạnh.
Theo tài liệu, cần dùng cực kỳ cẩn thận vì có thể làm router crash
Trong production:
chỉ bật ngắn hạn.
5. Quy trình troubleshooting NAT thực chiến
Khi NAT lỗi, nên đi theo thứ tự:
Bước 1:
Kiểm tra routing
show ip route
Bước 2:
Kiểm tra inside/outside
show ip nat statistics
Bước 3:
Kiểm tra ACL
show access-lists
Bước 4:
Kiểm tra translation
show ip nat translations
Bước 5:
Clear translation
clear ip nat translation *
Bước 6:
Debug nếu cần
debug ip nat
Kết luận cho bài NAT Troubleshooting
NAT nhìn đơn giản nhưng khi sự cố xảy ra, nguyên nhân có thể nằm ở nhiều lớp:
Một nguyên tắc thực chiến rất đáng nhớ:
Nếu routing đúng mà traffic vẫn không đi, hãy kiểm tra NAT ngay lập tức.
NAT là một trong những công nghệ mà gần như kỹ sư mạng nào cũng từng cấu hình. Nhìn qua thì có vẻ đơn giản: ánh xạ địa chỉ private sang public để thiết bị nội bộ đi ra Internet. Nhưng khi hệ thống không hoạt động, NAT lại trở thành một trong những thành phần gây đau đầu nhất trong quá trình troubleshooting.
Chỉ cần sai một dòng lệnh nhỏ, thiếu một keyword, hoặc quảng bá route chưa đúng là traffic có thể “đi mà không về”.
Dựa trên tài liệu gốc , chúng ta cùng phân tích cách troubleshooting NAT theo góc nhìn thực chiến.
1. Cấu hình NAT/PAT mẫu
Ví dụ một cấu hình Dynamic NAT kết hợp PAT:
R1# show run
interface FastEthernet1/0
ip address 10.1.1.1 255.255.255.0
ip nat inside
!
interface GigabitEthernet0/0
ip address 203.0.113.1 255.255.255.248
ip nat outside
!
ip nat pool OUTSIDE_POOL 203.0.113.3 203.0.113.6 netmask 255.255.255.248
ip nat inside source list 1 pool OUTSIDE_POOL overload
access-list 1 permit 10.1.1.0 0.0.0.255
Ý nghĩa:
- Mạng nội bộ: 10.1.1.0/24
- Router inside interface: 10.1.1.1
- Router outside interface: 203.0.113.1
- NAT pool: 203.0.113.3 → 203.0.113.6
- ACL 1 xác định host nào được NAT
- overload cho phép PAT
Thoạt nhìn đơn giản. Nhưng rất nhiều lỗi có thể xảy ra.
2. Những lỗi cấu hình NAT phổ biến
2.1 Inside/Outside interface cấu hình sai
NAT hoạt động dựa trên việc router biết:
- đâu là inside
- đâu là outside
Ví dụ đúng:
ip nat inside
và
ip nat outside
Nếu đảo ngược:
inside thành outside
outside thành inside
thì translation sẽ không bao giờ hoạt động đúng.
Triệu chứng:
- ping ra Internet thất bại
- không thấy translation entry
- routing vẫn đúng nhưng traffic fail
Kiểm tra:
show ip nat statistics
2.2 NAT Pool cấu hình sai
Ví dụ:
ip nat pool OUTSIDE_POOL 203.0.113.3 203.0.113.6 netmask 255.255.255.248
Nếu nhập sai:
203.0.113.30
hoặc netmask không đúng:
255.255.255.0
thì NAT mapping sẽ lỗi.
Router vẫn nhận cấu hình nhưng translation không đúng như mong đợi.
2.3 Public IP không reachable
Đây là lỗi cực kỳ phổ biến.
NAT chỉ đổi địa chỉ.
Nó không tự động làm cho Internet biết đường quay lại.
Ví dụ host nội bộ:
10.1.1.10
được NAT thành:
203.0.113.4
Remote server sẽ reply về:
203.0.113.4
Nhưng nếu ISP không biết route tới subnet này thì gói phản hồi bị drop.
Triệu chứng:
- translation xuất hiện
- packet đi ra
- không có return traffic
Kiểm tra:
show ip route
và xác minh ISP đã quảng bá subnet public.
2.4 ACL xác định sai inside local addresses
ACL quyết định host nào được NAT.
Ví dụ đúng:
access-list 1 permit 10.1.1.0 0.0.0.255
Nếu cấu hình nhầm:
access-list 1 permit 10.1.2.0 0.0.0.255
thì host thật:
10.1.1.10
sẽ không match ACL.
Kết quả:
Không NAT.
2.5 Mapping ACL với pool sai
Lệnh quan trọng:
ip nat inside source list 1 pool OUTSIDE_POOL overload
Đây là nơi “ghép đôi”:
- ACL
- NAT pool
Nếu:
- ACL sai
- pool sai tên
- mapping sai list number
thì NAT fail.
Ví dụ:
ip nat inside source list 10 pool OUTSIDE_POOL overload
trong khi ACL thật là:
access-list 1 ...
=> mismatch.
2.6 Thiếu keyword overload
Nếu muốn PAT mà quên:
overload
thì router chỉ làm Dynamic NAT.
Khác biệt:
Dynamic NAT:
- 1 private IP → 1 public IP
PAT:
- nhiều private IP → 1 hoặc vài public IP qua port translation
Nếu số lượng host lớn mà không overload:
pool sẽ nhanh chóng hết IP.
Triệu chứng:
- một vài host ra được
- host còn lại fail
3. Những vấn đề troubleshooting thực tế với NAT
NAT over VPN
Một số giao thức VPN kiểm tra checksum để đảm bảo packet integrity.
Ví dụ IPsec.
Trước NAT:
Source IP = 10.1.1.10
Sau NAT:
Source IP = 203.0.113.4
Checksum thay đổi.
VPN peer có thể hiểu packet đã bị chỉnh sửa và reject.
Đây là lý do NAT traversal (NAT-T) tồn tại.
NAT che giấu IP thật
Ví dụ:
Client:
10.1.1.25
bị NAT thành:
203.0.113.5
Firewall log chỉ thấy:
203.0.113.5
Không thấy IP private gốc.
Điều này làm troubleshooting end-to-end khó hơn rất nhiều.
Lệnh hữu ích:
show ip nat translations
Ứng dụng không tương thích NAT
Một số ứng dụng nhúng IP address vào payload.
Ví dụ:
- SIP
- H.323
- FTP active mode
- một số VoIP protocol
NAT chỉ sửa header Layer 3/4.
Nếu payload vẫn chứa:
10.1.1.10
remote peer sẽ cố reply về địa chỉ private.
=> fail.
NAT tạo thêm độ trễ
NAT không miễn phí về mặt xử lý.
Router phải:
- kiểm tra translation table
- tạo mapping
- sửa packet header
- tính lại checksum
Nếu router xử lý hàng triệu flows:
latency tăng rõ rệt.
Đặc biệt với router CPU yếu.
4. Các lệnh troubleshooting NAT quan trọng
show ip nat translations
Lệnh số 1.
show ip nat translations
Ví dụ:
Pro Inside global Inside local Outside local Outside global
tcp 192.168.1.27:23 192.168.0.27:23 192.168.1.50:1158 192.168.1.50:1158
Ý nghĩa:
- Inside local = IP private gốc
- Inside global = IP sau NAT
- Outside global = destination thật
Nếu không thấy entry động:
host chưa được NAT.
clear ip nat translation *
Xóa toàn bộ dynamic translations:
clear ip nat translation *
Hữu ích khi:
- test lại từ đầu
- reset stale sessions
- xác minh translation mới
Lưu ý:
Không xóa static NAT entries.
show ip nat statistics
Rất hữu ích.
show ip nat statistics
Ví dụ:
Total active translations : 4
Outside interfaces:
FastEthernet0/0
Inside interfaces:
FastEthernet0/1
Hits: 10
Misses: 0
Quan sát:
- interface inside/outside đúng chưa?
- có translation không?
- hits tăng không?
Nếu misses tăng mạnh:
traffic không match NAT rule.
debug ip nat
Lệnh mạnh nhưng nguy hiểm.
debug ip nat
Ví dụ:
NAT: s=192.168.1.11->192.168.1.27
Nghĩa là:
192.168.1.11
được dịch thành:
192.168.1.27
Nhược điểm:
debug có thể làm router CPU tăng mạnh.
Theo tài liệu, cần dùng cực kỳ cẩn thận vì có thể làm router crash
Trong production:
chỉ bật ngắn hạn.
5. Quy trình troubleshooting NAT thực chiến
Khi NAT lỗi, nên đi theo thứ tự:
Bước 1:
Kiểm tra routing
show ip route
Bước 2:
Kiểm tra inside/outside
show ip nat statistics
Bước 3:
Kiểm tra ACL
show access-lists
Bước 4:
Kiểm tra translation
show ip nat translations
Bước 5:
Clear translation
clear ip nat translation *
Bước 6:
Debug nếu cần
debug ip nat
Kết luận cho bài NAT Troubleshooting
NAT nhìn đơn giản nhưng khi sự cố xảy ra, nguyên nhân có thể nằm ở nhiều lớp:
- interface role
- ACL matching
- NAT pool
- overload
- routing
- ứng dụng
- VPN interaction
- performance bottleneck
Một nguyên tắc thực chiến rất đáng nhớ:
Nếu routing đúng mà traffic vẫn không đi, hãy kiểm tra NAT ngay lập tức.