NAT là gì?
Network Address Translation (NAT) là kỹ thuật thay đổi địa chỉ IP nguồn hoặc đích của gói tin khi đi qua router. NAT là thành phần thiết yếu trong mọi hệ thống mạng — cho phép nhiều thiết bị LAN chia sẻ một địa chỉ IP public để truy cập Internet.
VyOS hỗ trợ đầy đủ các loại NAT thông qua nftables backend:
- Source NAT (SNAT): Thay đổi IP nguồn — dùng cho LAN truy cập Internet
- Masquerade: Dạng đặc biệt của SNAT, tự động dùng IP của outbound interface
- Destination NAT (DNAT): Thay đổi IP đích — dùng cho port forwarding
- 1:1 NAT: Map 1 IP public sang 1 IP private và ngược lại
- NPTv6: Network Prefix Translation cho IPv6
Source NAT — Cho LAN ra Internet
Topology cơ bản
LAN Clients VyOS Router Internet
192.168.1.0/24 --- [eth1: 192.168.1.1] [eth0: 203.0.113.10] --- ISP Gateway
Source NAT: 192.168.1.x → 203.0.113.10
Cấu hình Source NAT với IP tĩnh
Khi WAN interface có IP tĩnh, sử dụng Source NAT với translation address:
configure
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address '203.0.113.10'
commit
save
Giải thích từng dòng:
rule 100: Số thứ tự rule (1–999), VyOS xử lý từ nhỏ đến lớnoutbound-interface name 'eth0': Áp dụng cho traffic đi ra interface eth0 (WAN)source address: Traffic từ subnet LAN 192.168.1.0/24translation address: Thay IP nguồn thành IP WAN tĩnh
Masquerade — SNAT tự động
Khi WAN nhận IP qua DHCP (IP thay đổi), dùng masquerade thay vì chỉ định IP cụ thể:
configure
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address masquerade
commit
save
Khi nào dùng masquerade vs SNAT? Dùng masquerade khi WAN IP là DHCP (thay đổi). Dùng SNAT với IP cụ thể khi WAN IP tĩnh — hiệu suất tốt hơn một chút vì không cần lookup IP mỗi packet.
Destination NAT — Port Forwarding
Destination NAT cho phép chuyển tiếp traffic từ Internet vào server nội bộ. Ví dụ: forward port 80/443 từ WAN vào web server 192.168.1.100.
configure
# Forward HTTP (port 80) vào web server
set nat destination rule 10 description 'HTTP to Web Server'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 destination port '80'
set nat destination rule 10 translation address '192.168.1.100'
# Forward HTTPS (port 443) vào web server
set nat destination rule 20 description 'HTTPS to Web Server'
set nat destination rule 20 inbound-interface name 'eth0'
set nat destination rule 20 protocol 'tcp'
set nat destination rule 20 destination port '443'
set nat destination rule 20 translation address '192.168.1.100'
commit
save
Port Forwarding với đổi port
Forward traffic đến port khác trên server nội bộ:
# Forward port 8080 trên WAN vào port 80 trên server nội bộ
set nat destination rule 30 description 'Alt HTTP to Web Server'
set nat destination rule 30 inbound-interface name 'eth0'
set nat destination rule 30 protocol 'tcp'
set nat destination rule 30 destination port '8080'
set nat destination rule 30 translation address '192.168.1.100'
set nat destination rule 30 translation port '80'
commit
save
Forward nhiều ports cùng lúc
# Forward port range
set nat destination rule 40 description 'Game Server Ports'
set nat destination rule 40 inbound-interface name 'eth0'
set nat destination rule 40 protocol 'udp'
set nat destination rule 40 destination port '27015-27020'
set nat destination rule 40 translation address '192.168.1.200'
commit
save
1:1 NAT
1:1 NAT map một IP public sang một IP private — cả chiều inbound lẫn outbound. Hữu ích khi bạn có nhiều IP public và muốn mỗi server có IP public riêng.
configure
# Source NAT: server 192.168.1.100 đi ra với IP 203.0.113.20
set nat source rule 200 outbound-interface name 'eth0'
set nat source rule 200 source address '192.168.1.100'
set nat source rule 200 translation address '203.0.113.20'
# Destination NAT: traffic vào 203.0.113.20 chuyển đến 192.168.1.100
set nat destination rule 200 inbound-interface name 'eth0'
set nat destination rule 200 destination address '203.0.113.20'
set nat destination rule 200 translation address '192.168.1.100'
commit
save
Lưu ý: Để 1:1 NAT hoạt động, bạn cần đảm bảo IP 203.0.113.20 được route đến VyOS router (thường ISP cần cấu hình hoặc bạn dùng proxy ARP).
NPTv6 — Network Prefix Translation cho IPv6
Trong IPv6, không sử dụng NAT truyền thống. Thay vào đó, VyOS hỗ trợ NPTv6 để translate prefix:
configure
set nat nptv6 rule 10 description 'NPTv6 for LAN'
set nat nptv6 rule 10 outbound-interface name 'eth0'
set nat nptv6 rule 10 source prefix 'fd00::/64'
set nat nptv6 rule 10 translation prefix '2001:db8:1::/64'
commit
save
NAT Rule Ordering
Thứ tự xử lý NAT rules rất quan trọng:
- VyOS xử lý rules theo số thứ tự tăng dần (rule 10 trước rule 100)
- Rule đầu tiên match sẽ được áp dụng, các rule sau bị bỏ qua
- Nên đánh số cách nhau (10, 20, 30...) để dễ chèn rule mới
- Destination NAT được xử lý trước routing decision
- Source NAT được xử lý sau routing decision
# Thứ tự xử lý packet trên VyOS:
#
# Incoming Packet
# ↓
# Destination NAT (DNAT) ← thay đổi IP đích
# ↓
# Routing Decision ← quyết định forward hay local
# ↓
# Firewall Rules ← filter traffic
# ↓
# Source NAT (SNAT) ← thay đổi IP nguồn
# ↓
# Outgoing Packet
Exclude Traffic từ NAT
Đôi khi bạn muốn một số traffic không bị NAT (ví dụ: VPN traffic):
# Exclude VPN subnet từ Source NAT
set nat source rule 50 outbound-interface name 'eth0'
set nat source rule 50 source address '192.168.1.0/24'
set nat source rule 50 destination address '10.10.0.0/16'
set nat source rule 50 exclude
# Rule masquerade chung (rule 100, xử lý sau rule 50)
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address masquerade
commit
save
Troubleshooting NAT
Kiểm tra NAT rules
# Xem NAT rules đang hoạt động
show nat source rules
show nat destination rules
# Xem NAT translations đang active
show nat source translations
show nat destination translations
# Xem NAT statistics
show nat source statistics
show nat destination statistics
Các lỗi thường gặp
- LAN không ra Internet: Kiểm tra Source NAT rule, outbound-interface đúng chưa, source address đúng subnet chưa
- Port forwarding không hoạt động: Kiểm tra firewall có cho phép traffic đến port đó không, inbound-interface đúng chưa
- Rule ordering sai: Rule exclude phải có số nhỏ hơn rule NAT chung
# Debug NAT
monitor log | match nat
# Hoặc xem conntrack
show conntrack table ipv4
實作練習: NAT hoàn chỉnh
Topology lab:
Internet
|
[eth0: DHCP] VyOS Router [eth1: 192.168.100.1/24]
|
+---------------+---------------+
| | |
PC Client Web Server Game Server
192.168.100.10 192.168.100.100 192.168.100.200
Bước 1: Masquerade cho LAN
configure
# Source NAT masquerade cho toàn bộ LAN
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.100.0/24'
set nat source rule 100 translation address masquerade
commit
Bước 2: Port forward cho Web Server
# Forward HTTP/HTTPS vào web server
set nat destination rule 10 description 'HTTP Port Forward'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 destination port '80'
set nat destination rule 10 translation address '192.168.100.100'
set nat destination rule 20 description 'HTTPS Port Forward'
set nat destination rule 20 inbound-interface name 'eth0'
set nat destination rule 20 protocol 'tcp'
set nat destination rule 20 destination port '443'
set nat destination rule 20 translation address '192.168.100.100'
commit
Bước 3: Port forward cho Game Server
# Forward game ports
set nat destination rule 30 description 'Game Server UDP'
set nat destination rule 30 inbound-interface name 'eth0'
set nat destination rule 30 protocol 'udp'
set nat destination rule 30 destination port '27015-27020'
set nat destination rule 30 translation address '192.168.100.200'
commit
save
Bước 4: Kiểm tra
exit
# Xem tất cả NAT rules
show nat source rules
show nat destination rules
# Từ PC Client, test Internet
# ping 8.8.8.8 (trên client)
# Xem NAT translations
show nat source translations
總結
Trong bài này, bạn đã nắm được:
- Source NAT: Cho phép LAN truy cập Internet bằng cách thay IP nguồn
- Masquerade: SNAT tự động — phù hợp khi WAN IP là DHCP
- Destination NAT: Port forwarding từ Internet vào server nội bộ
- 1:1 NAT: Map hai chiều giữa IP public và IP private
- NPTv6: Prefix translation cho IPv6
- NAT rule ordering và cách exclude traffic khỏi NAT
- Troubleshooting NAT bằng show commands và conntrack
Bài tiếp theo sẽ đi vào Firewall — bước quan trọng nhất để bảo vệ mạng. NAT và Firewall luôn đi đôi với nhau trên VyOS.