Cơ chế hoạt động và phân biệt SNAT, DNAT, MASQUERADE trong IPTABLES

Trong quản trị hệ thống Linux, IPTABLES cung cấp khả năng điều phối các luồng dữ liệu thông qua cơ chế NAT (Network Address Translation). NAT được chia thành hai loại chính dựa trên mục đích thay đổi thông tin gói tin: SNAT (thay đổi nguồn) và DNAT (thay đổi đích).

1. SNAT (Source Network Address Translation)

SNAT là kỹ thuật thay đổi địa chỉ IP nguồn của gói tin. Đây là cơ chế phổ biến nhất được sử dụng khi các máy tính trong mạng nội bộ (LAN) cần truy cập Internet thông qua một địa chỉ IP công cộng (Public IP) duy nhất được cấu hình trên Router.

Khi một máy trạm gửi yêu cầu ra ngoài, Router sẽ thay thế địa chỉ IP nội bộ của máy trạm đó bằng địa chỉ IP của chính nó. Khi phản hồi từ Internet gửi về, Router sẽ dựa trên bảng trạng thái để chuyển tiếp dữ liệu lại đúng máy trạm ban đầu. Điều này giúp bảo mật cấu trúc mạng nội bộ vì máy chủ bên ngoài chỉ nhìn thấy địa chỉ IP của Router.

Ví dụ về cấu hình SNAT với địa chỉ IP tĩnh:

# Chuyển đổi nguồn cho dải mạng 172.16.10.0/24 qua giao tiếp wan0 với IP tĩnh 203.0.113.10
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o wan0 -j SNAT --to-source 203.0.113.10

# SNAT ra một dải địa chỉ IP công cộng
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o wan0 -j SNAT --to-source 203.0.113.10-203.0.113.15

2. DNAT (Destination Network Address Translation)

Ngược lại với SNAT, DNAT được dùng để thay đổi địa chỉ IP đích của gói tin. Kỹ thuật này thường được áp dụng cho bài toán Port Forwarding, cho phép người dùng từ bên ngoài Internet có thể truy cập vào các dịch vụ đang chạy trong mạng nội bộ (như Web Server, Database).

Khi gói tin đến giao diện mạng công cộng của Firewall, DNAT sẽ can thiệp và thay đổi IP đích thành IP nội bộ của server tương ứng trước khi định tuyến gói tin vào bên trong.

Ví dụ về cấu hình DNAT để công khai dịch vụ web nội bộ:

# Chuyển hướng lưu lượng cổng 80 từ IP ngoài 203.0.113.10 vào máy chủ nội bộ 192.168.1.50:8080
iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.50:8080

3. MASQUERADE: Biến thể của SNAT

MASQUERADE là một mục tiêu (target) đặc biệt trong bảng NAT, có chức năng tương tự như SNAT nhưng linh hoạt hơn. Điểm khác biệt lớn nhất nằm ở cách xử lý địa chỉ IP nguồn:

  • SNAT: Yêu cầu quản trị viên phải chỉ định rõ địa chỉ IP sẽ được sử dụng làm nguồn. Phù hợp với các máy chủ có IP tĩnh.
  • MASQUERADE: Sẽ tự động kiểm tra địa chỉ IP hiện tại của giao diện mạng được chỉ định (outgoing interface) để gán cho gói tin.

Cơ chế này cực kỳ hữu ích trong các kịch bản kết nối Internet bằng modem ADSL, quay số PPPoE hoặc nhận IP qua DHCP, nơi mà địa chỉ IP công cộng có thể thay đổi sau mỗi lần kết nối lại.

Ví dụ về cấu hình MASQUERADE:

# Tự động lấy IP của giao tiếp ppp0 để thực hiện NAT cho mạng nội bộ
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ppp0 -j MASQUERADE

Phân tích sự khác biệt về hiệu năng và vị trí

Về mặt kỹ thuật, MASQUERADE tiêu tốn nhiều tài nguyên hệ thống hơn một chút so với SNAT. Nguyên nhân là do với mỗi gói tin được xử lý, MASQUERADE phải thực hiện thêm một bước kiểm tra địa chỉ IP hiện hành của card mạng, trong khi SNAT sử dụng địa chỉ đã được nạp sẵn vào bộ nhớ từ quy tắc cấu hình.

Về vị trí trong chuỗi (Chain):

  • DNAT: Phải thực hiện trước khi hệ thống đưa ra quyết định định tuyến, do đó nó luôn nằm ở chuỗi PREROUTING.
  • SNAT và MASQUERADE: Chỉ thực hiện khi gói tin đã sẵn sàng rời khỏi hệ thống, do đó chúng luôn nằm ở chuỗi POSTROUTING.

Ngoài ra, IPTABLES còn hỗ trợ mục tiêu REDIRECT, đây thực chất là một dạng đặc biệt của DNAT dùng để chuyển hướng gói tin vào chính các cổng dịch vụ đang chạy trên máy chủ hiện tại (Localhost).

# Chuyển hướng yêu cầu từ cổng 80 sang cổng 3128 trên cùng một máy
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

Thẻ: iptables nat linux-networking snat dnat

Đăng vào ngày 10 tháng 9 lúc 05:28