Chuyển đến nội dung chính

Bài 3: NAT — Source NAT, Destination NAT và Masquerade

Hướng dẫn chi tiết về NAT trên VyOS: Source NAT, masquerade cho LAN, Destination NAT (port forwarding), 1:1 NAT, NPTv6, rule ordering và troubleshooting.

NAT — Source NAT, Destination NAT và Masquerade

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ớn
  • outbound-interface name 'eth0': Áp dụng cho traffic đi ra interface eth0 (WAN)
  • source address: Traffic từ subnet LAN 192.168.1.0/24
  • translation 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

Lab thực hành: 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

Tổng kết

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.