NAT và PAT
WEDNESDAY, 7. OCTOBER 2009, 08:21:38
NAT là kiến thức hết sức căn bản đối với những sinh viên học chuyên
nghành về công nghệ thông tin, tuy nhiên để hiểu cặn kẽ và kỹ lưỡng về kỹ
thuật này thì không nhiều bạn có thể trình bày một cách hoàn chỉnh.
Network Address Translation: NAT là kỹ thuật thay đổi các địa chỉ mạng
(Network Address) trong một gói tin (packet) để gây ảnh hưởng trong quá
trình định hướng đi của packet cho một mục đích cụ thể. Địa chỉ mạng ở
đây muốn nói đến địa chỉ IP WAN (Internet Protocol) ở layer 3, ngoài ra còn
có thể thay đổi số port ở layer 4 theo mô hình phân lớp OSI. Bên cạnh đó
địa chỉ mạng còn được phân biệt địa chỉ nguồn (source) và địa chỉ đích
(destination). Tùy theo mục đích dùng NAT mà ta thay đổi một số hoặc tất
cả các loại địa chỉ trên, trên cùng một packet.
Đây là loại hình NAT phổ biến nhất, ta còn hay gọi là Des NAT, hay NAT
Inbound. NAT theo kiểu này chỉ thay đổi địa chỉ IP đích của gói tin mà
không đụng đến các thành phần khác. Đây cũng là kiểu được sử dụng mặc
định trong các ROUTER ( thiết bị định tuyến nói chung ) theo cách sau:
•Khi client gửi packet request i tới ROUTER, i sẽ có dest IP là Virtual IP của
ROUTER (141.149.65.3), source IP là IP của client (188.1.1.10). Do ROUTER
đại diện cho tất cả những server thực đằng sau, nên IP của ROUTER cũng
là địa chỉ đại diện, client sẽ chỉ liên hệ với ROUTER mà không biết được
địa chỉ thật của các server là gì ( trước khi biết VIP của router nó phải nhờ
DNS server dịch từ tên miền sang địa chỉ IP ). Địa chỉ IP đại diện của
ROUTER còn là địa chỉ IP ảo (Virtual IP - VIP)
•ROUTER sẽ gửi repquest i đến server để xử lý nên nó thực hiện thay dest
IP trong i thành IP của server (10.10.10.20), source IP vẫn giữ nguyên
(188.1.1.10). Thao tác này gọi là Destination NAT ( dịch chuyển IP đích ).
•Nhờ có dest IP là IP của server nên request i sẽ được định tuyến tiếp đến
server xử lý.
•Khi server trả lời, packet reply sẽ đi qua lại ROUTER. Tại đây packet được
un-NAT, nghĩa là thay lại địa chỉ IP của server (lúc này trở thành source IP)
nó không được mở.
- Khả năng co dãn (scalability) PAT cho phép ta chạy cùng một ứng dụng
trên nhiều port. Tùy theo cách thiết kế ứng dụng, có thể việc chạy nhiều
bản sao của nó sẽ làm tăng hiệu suất phục vụ lên. Chẳng hạn ta có thể
chạy máy chủ web IIS trên các port 80, 81, 82 của mỗi server thật. Sau đó
chỉ cần liên kết port 80 của VIP với mỗi port chạy IIS của server thật. Load
balancer sẽ phân bổ lưu thông không chỉ cho các server mà còn giữa các
port trên từng server.
- Khả năng quản trị (manageability) chẳng hạn khi host nhiều website trên
một bộ các server thật, ta có thể chỉ cần dùng một VIP để đại diện cho tất
cả các domain của các website. Lúc này ROUTER sẽ nhận tất cả các
request đến port 80 ở cùng một VIP. Web server của ta có thể chạy mỗi
domain trên một port khác nhau, chẳng hạn www.abc.com trên port 81,
www.xyz.com trên port 82. ROUTER có thể gửi lưu thông đến port phù hợp
dựa trên domain trong URL của mỗi HTTP request.
Full NAT
Như vậy ta đã xét kỹ thuật NAT thay đổi lần lượt địa chỉ đích, địa chỉ
nguồn, rồi thay đổi port khi định tuyến. Mỗi sự thay đổi là một loại hình
NAT có ứng dụng trong từng trường hợp riêng. Kết hợp các kiểu thay đổi
này lại, ta có một kiểu NAT khác phức tạp hơn là Full NAT. Kiểu NAT này
có tên gọi như vậy vì nó bao gồm các thay đổi sau đây trên gói tin request:
•Địa chỉ IP nguồn (source IP)
•Địa chỉ IP đích (dest IP)
•Port nguồn (source port)
Lưu ý source port ở đây là port của client, còn dest port là port được
request trên server, chẳng hạn port 80 ở ví dụ trên.
Kiểu NAT này khác với những kiểu NAT trên ở chỗ, packet từ server reply
có thể bỏ qua ROUTER mà đi thẳng đến client ở ngoài Internet. Vấn đề ở
chỗ địa chỉ IP của server vẫn là private IP, do đó đương nhiên packet reply
mang địa chỉ source là IP nội bộ sẽ chẳng bao giờ đến được client.
source IP của các request.
Enhanced NAT
Những kỹ thuật NAT vừa trình bày ở trên đều xoay quanh việc thay đổi địa
chỉ IP, cũng như port trong packet header. Tuy nhiên có những protocol
đặc biệt chứa thông tin địa chỉ hay port nhúng trong packet payload, cũng
cần phải được thay đổi cùng với packet header.
Điều này đòi hỏi ROUTER phải hiểu biết theo từng protocol cụ thể. Khái
niệm enhanced NAT nói đến kiểu NAT phức tạp được thực hiện với những
hiểu biết theo từng protocol cụ thể để làm cho những protocol đó hoạt
động được với việc định tuyến gói tin.
Trong số các protocol đặc biệt đó, thông dụng nhất là các protocol
streaming media (ví dụ RTSP - Real Time Streaming Protocol). Đây cũng là
các protocol sử dụng cân bằng tải phổ biến nhất, vì chúng cực kì ngốn tài
nguyên mạng và tính toán khi phải phục vụ đồng thời cho hàng trăm đến
hàng ngàn người sử dụng.
Các protocol streaming thường gồm có hai kết nối, một kết nối điều khiển
xây dựng trên TCP và một kết nối dữ liệu dựa trên UDP. Để khởi đầu, client
khởi tạo một kênh điều khiển đến một well-known port trên server. Client
và server sẽ thoả thuận các điều khoản cho kênh điều khiển. Sự thoả thuận
gồm có IP của server và số port của server mà client sẽ gửi dữ liệu đến
trên kết nối dữ liệu.
Nếu các server có địa chỉ IP private, ROUTER sẽ thực hiện Destination NAT
cho kết nối điều khiển. Nhưng đồng thời ROUTER cũng phải xem các
thông tin thoả thuận và thay đổi mọi thông tin về địa chỉ IP hay port mà
server và client trao đổi sao cho client sẽ gửi dữ liệu đến VIP public chứ
không phải IP private của server (những thông tin này nằm trong payload
của packet).
Hơn nữa, dest port được chọn trong quá trình thoả thuận lại không biết
trước được nên phải xử lý request ngay cả khi port chưa được liên kết đến
bất kỳ server nào.