Tải bản đầy đủ (.docx) (24 trang)

Báo cáo NTA trong network

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (209.4 KB, 24 trang )


Lời mở đầu
Như chúng ta đã biết, hiện nay không gian IPv4 trên toàn cầu đã cạn kiệt. Vào
tháng 02/2011, IANA (Internet Assigned Numbers Authority) – tổ chức quản lý địa
chỉ IP và số hiệu mạng trên toàn thế giới đã công bố rằng địa chỉ IPv4 đã được cấp
phát hết. Dải IPv4 còn sử dụng đến ngày nay đều nằm trong kho IP của các cơ quan
quản lý IP cấp vùng hoặc các ISP; không còn IP mới để cấp phát. Việc sử dụng IPv4
hiện nay đều được các ISP quy hoạch hết sức cẩn thận để không gây lãng phí một tài
nguyên mạng đã cạn kiệt. Địa chỉ IPv4 dài 32 bit nhị phân, theo lý thuyết cung cấp cho
thế giới khoảng hơn 4 tỉ địa chỉ IP, vào thời điểm ra đời được cho là một dải địa chỉ
nhiều vô tận không thể sử dụng hết, đến thời điểm này đã cạn kiệt. Tốc độ phát triển
của Internet cũng như các công nghệ chạy trên nền IP trong nhiều năm qua đã tăng đến
chóng mặt, nằm ngoài dự liệu của các tổ chức xây dựng nên chồng giao thức TCP/IP
ban đầu. Để giải quyết vấn đề hao tốn địa chỉ IP quá nhanh, nhiều biện pháp giúp hạn
chế tốc độ tiêu thụ IP đã được đưa ra. Biện pháp được cho là phổ biến mà được sử
dụng rộng rãi nhất hiện này là chia không gian IP Unicast thành hai không gian IP
Private và IP Public. Một vấn đề đặt ra là dù các IP Private không được định tuyến trên
môi trường Internet toàn cầu nhưng các host được gán IP Private trong các mạng nội
bộ vẫn có nhu cầu truy nhập Internet. Để giải quyết vấn đề này, chúng ta sử dụng một
kỹ thuật có tên gọi là NAT – Network Address Translation. Kỹ thuật NAT sẽ thực
hiện chuyển đổi địa chỉ IP của gói tin xuất phát từ vùng private thành địa chỉ IP Public
khi gói tin này đi từ mạng nội bộ ra môi trường Internet bên ngoài và thực hiện chuyển
đổi ngược lại các địa chỉ IP từ Public thành Private khi gói tin trả về đi từ Internet vào
trong mạng nội bộ. Điều này được thực hiện một cách trong suốt hoàn toàn với người
dùng cũng như với các thực thể mạng trên môi trường Internet.
PHẦN I: TỔNG QUAN VỀ NAT(Network Address Translation).
Như ta đã biết, để tiết kiệm địa chỉ IP thì biện pháp được sử dụng phổ biến hiện
này là chia không gian IP Unicast thành hai không gian IP Private và IP Public. Vậy IP
Private là gì? IP Public là gì?
Dải IP Private: là dải IP chỉ sử dụng trong mạng nội bộ, một IP Private có thể
được sử dụng đi sử dụng lại từ mạng nội bộ này qua mạng nội bộ khác. Các IP Private


không hiện diện trên bảng định tuyến của các router trên Internet và vì vậy không thể
dùng để truy nhập thông tin trên Internet được. IP Private được quy định trong RFC –
1918, gồm 3 dải như sau:
• 10.0.0.0 đến 10.255.255.255 (lớp A).
• 172.16.0.0 đến 172.31.255.255 (lớp B).
• 192.168.0.0 đến 192.168.255.255 (lớp C).
Dải IP Public: là dải IP có thể định tuyến được trên môi trường Internet toàn cầu,
được sử dụng để đặt cho các host trên Internet, có thể sử dụng để trao đổi thông tin
trên Internet.
Vì không tồn tại trên Internet nên các admin trong các mạng LAN có thể dùng lại
các IP private cho mạng của cơ quan, tổ chức.Máy tính chỉ ra ngoài internet được khi
nó có địa chỉ public vì địa chỉ public là duy nhất, do vậy cần phải có một kỹ thuật để
chuyển đổi các IP Private trong mạng LAN thành IP Public để ra ngoài internet và
ngược lại để các máy Internet có thể gửi trả dữ liệu cho các máy trong LAN và
NAT(Network Address Translation) ra đời để giải quyết vấn để này.
1. NAT(Network Address Translation) là gì ?
NAT giống như một router, nó chuyển tiếp các gói tin giữa những lớp mạng khác
nhau trên một mạng lớn. NAT dịch hay thay đổi một hoặc cả hai địa chỉ bên trong một
gói tin khi gói tin đó đi qua một router, hay một số thiết bị khác. Thông thường, NAT
thường thay đổi địa chỉ (thường là địa chỉ riêng) được dùng bên trong một mạng sang
địa chỉ công cộng.
NAT cũng có thể coi như một firewall cơ bản. Để thực hiện được công việc đó,
NAT duy trì một bảng thông tin về mỗi gói tin được gửi qua. Khi một PC trên mạng
kết nối đến 1 website trên Internet header của địa chỉ IP nguồn được thay đổi và thay
thế bằng địa chỉ Public mà đã được cấu hình sẵn trên NAT server , sau khi có gói tin
trở về NAT dựa vào bảng record mà nó đã lưu về các gói tin, thay đổi địa chỉ IP đích
thành địa chỉ của PC trong mạng và chuyển tiếp đi. Thông qua cơ chế đó quản trị
mạng có khả năng lọc các gói tin được gửi đến hay gửi từ một địa chỉ IP và cho phép
hay cấm truy cập đến một port cụ thể.
2. Cơ chế hoạt động của NAT.

NAT sử dụng IP của chính nó làm IP công cộng cho mỗi máy con (client) với IP
riêng. Khi một máy con thực hiện kết nối hoặc gửi dữ liệu tới một máy tính nào đó
trên internet, dữ liệu sẽ được gởi tới NAT, sau đó NAT sẽ thay thế địa chỉ IP gốc của
máy con đó rồi gửi gói dữ liệu đi với địa chỉ IP của NAT. Máy tính từ xa hoặc máy tính
nào đó trên internet khi nhận được tín hiệu sẽ gởi gói tin trở về cho NAT computer bởi
vì chúng nghĩ rằng NAT computer là máy đã gởi những gói dữ liệu đi. NAT ghi lại
bảng thông tin của những máy tính đã gởi những gói tin đi ra ngoài trên mỗi cổng dịch
vụ và gởi những gói tin nhận được về đúng máy tính đó (client).
NAT xử lý một gói tin xuất phát từ bên trong đi ra bên ngoài một mạng theo cách
thức sau:
• Khi NAT nhận một gói tin từ một cổng bên trong, gói tin này đáp ứng các tiêu
chuẩn để NAT, router sẽ tìm kiếm trong bảng NAT địa chỉ bên ngoài (outside
address) của gói tin. Nói cách khác, tiến trình NAT tìm kiếm một hàng ở trong
bảng NAT trong đó địa chỉ outside local address bằng với địa chỉ đích của gói
tin. Nếu không có phép so trùng nào tìm thấy, gói tin sẽ bị loại bỏ.
• Nếu có một hàng trong bảng NAT là tìm thấy (trong hàng này, địa chỉ đích của
gói tin bằng với địa chỉ outside local), NAT sẽ thay thế địa chỉ đích trong gói tin
bằng địa chỉ outside global theo thông tin trong bảng NAT.
• Tiến trình NAT tiếp tục tìm kiếm bảng NAT để xem có một địa chỉ inside local
nào bằng vớI địa chỉ nguồn của gói tin hay không. Nếu có một hàng là tìm thấy,
NAT tiếp tục thay thế địa chỉ nguồn của gói tin bằng địa chỉ inside global. Nếu
không có một hàng nào được tìm thấy, NAT sẽ tạo ra một hàng mới trong bảng
NAT và chèn địa chỉ mới vào trong gói tin.
NAT sẽ xử lý một gói tin xuất phát từ mạng bên ngoài đi vào mạng bên trong
theo cách sau:
• Khi NAT nhận được một gói tin xuất phát từ một cổng bên ngoài, đáp ứng các
tiêu chuẩn để NAT, tiến trình NAT sẽ tìm kiếm trong bảng NAT một hàng trong
đó địa chỉ inside global là bằng vớI đia chỉ đích của gói tin.
• Nếu không có hàng nào trong bảng NAT được tìm thấy, gói tin bị loạI bỏ. Nếu
có một hàng tìm thấy trong bảng NAT, NAT sẽ thay thế địa chỉ đích bằng địa

chỉ inside local từ bảng NAT.
• Router tìm kiếm bảng NAT để tìm ra địa chỉ outside global bằng với địa chỉ
nguồn của gói tin. Nếu có một hàng là tìm thấy, NAT sẽ thay thế địa chỉ đích
bằng địa chỉ outside local từ bảng NAT. Nếu NAT không tìm thấy một hàng
nào, nó sẽ tạo ra một hàng mới trong bảng NAT và cũng thực hiện như ở bước
2.
3. Khái niện cơ bản của NAT.
Inside local address - Địa chỉ IP được gán cho một host của mạng trong. Đây là
địa chỉ được cấu hình như là một tham số của hệ điều hành trong máy tính hoặc được
gán một cách tự động thông qua các giao thức như DHCP. Địa chỉ này không phải là
những địa chỉ IP hợp lệ được cấp bởi NIC (Network Information Center) hoặc nhà
cung cấp dịch vụ Internet.
Inside global address - Là một địa chỉ hợp lệ được cấp bởi NIC hoặc một nhà
cung cấp dịch vụ trung gian. Địa chỉ này đại diện cho một hay nhiều địa chỉ IP inside
local trong việc giao tiếp với mạng bên ngoài.
Outside local address - Là địa chỉ IP của một host thuộc mạng bên ngoài, các
host thuộc mạng bên trong sẽ nhìn host thuộc mạng bên ngoài thông qua địa chỉ này.
Outside local không nhất thiết phải là một địa chỉ hợp lệ trên mạng IP (có thể là địa chỉ
private).
Outside global address - Là địa chỉ IP được gán cho một host thuộc mạng ngoài
bởi người sở hữu host đó. Địa chỉ này được gán bằng một địa chỉ IP hợp lệ trên mạng
Internet.
Chúng ta có thể hình dung để phân biệt 4 kiểu địa chỉ này như sau:
Các gói tin bắt nguồn từ bên trong mạng nội bộ (inside) sẽ có source IP là địa chỉ
kiểu “inside local” và destination IP là “ouside local” khi nó còn ở trong phần mạng
nội bộ. Cũng gói tin đó, khi được chuyển ra ngoài mạng (qua NAT) source IP address
sẽ được chuyển thành "inside global address" và địa destination IP của gói tin sẽ là
“outside global address”. Hay ngược lại, khi một gói tin bắt nguồn từ một mạng bên
ngoài, khi nó còn đang ở mạng bên ngoài đó, địa chỉ source IP của nó sẽ là "outside
global address", địa chỉ destination IP sẽ là "inside global address". Cũng gói tin đó khi

được chuyển vào mạng bên trong (qua NAT), địa chỉ source sẽ là "outside local
address" và địa chỉ destination của gói tin sẽ là "inside local address".
4. Lợi ích của NAT
Ban đầu, NAT được đưa ra nhằm giải quyết vấn đề thiếu hụt địa chỉ của IPv4,
nhưng sao này được phát triển nhằm giải quyết
• NAT giúp chia sẻ kết nối Internet (hay 1 mạng khác) với nhiều máy trong LAN
chỉ với 1 IP duy nhất, hay 1 dãy IP cụ thể.
• NAT che giấu IP bên trong LAN.
• NAT giúp quản trị mạng lọc các gói tin được gửi đến hay gửi từ một địa chỉ IP và
cho phép hay cấm truy cập đến một port cụ thể.
PHẦN II: PHÂN LOẠI NAT.
Có 4 phương án NAT:
• NAT tĩnh (Static NAT)
• NAT động (Dynamic NAT)
• NAT overload – PAT(Port Address Translate)
• Masquerading ( hay NAPT)

1. NAT tĩnh (Static NAT)
NAT tĩnh hay còn gọi là Static NAT: là phương thức NAT một đổi một. Nghĩa là
một địa chỉ IP cố định trong LAN sẽ được ánh xạ ra một địa chỉ IP Public cố định
trước khi gói tin đi ra Internet. Phương pháp này không nhằm tiết kiệm địa chỉ IP mà
chỉ có mục đích ánh xạ một IP trong LAN ra một IP Public để ẩn IP nguồn trước khi đi
ra Internet làm giảm nguy cơ bị tấn công trên mạng.
Ví dụ: Giả sử trong mạng nội bộ của sơ đồ hình 1 có 6 host cần đi Internet và
được gán các địa chỉ từ 192.168.1.1 đến 192.168.1.6. Để phục vụ cho việc đi Internet
của 6 host này, công ty sử dụng 6 IP tĩnh được cấp từ ISP là 199.99.9.1, 199.99.9.2,…,
199.99.9.6. Ta cần phải cấu hình các entry NAT tĩnh cho 6 cặp địa chỉ trong – ngoài để
các host có thể đi được Internet.
Phương án này có nhược điểm là nếu trong LAN có bao nhiêu IP muốn đi ra
Internet thì ta phải có từng đó IP Public để ánh xạ. Do vậy phương án NAT tĩnh chỉ

được dùng với các máy chủ thuộc vùng DMZ với nhiệm vụ Public các Server này lên
Internet.
2. NAT động(Dynamic NAT).
NAT động (Dynamic NAT) là một giải pháp tiết kiệm IP Public cho NAT tĩnh.
Thay vì ánh xạ từng IP cố định trong LAN ra từng IP Public cố định. LAN động cho
phép NAT cả dải IP trong LAN ra một dải IP Public cố định ra bên ngoài.
Ví dụ: Hệ thống LAN trong công ty có 100 IP, nếu muốn 100 IP này truy cập
Internet thì theo phương án NAT tĩnh công ty sẽ phải thuê từ ISP 100 IP Public. Điều
này quá tốn kém, giải pháp NAT động cho phép chỉ cần thuê từ ISP 10 IP Public nếu
tại cùng một thời điểm chỉ có 10 IP trong LAN truy cập Internet. Tuy nhiên giải pháp
NAT động vẫn có hạn chế vì nếu tại một thời điểm công ty cần 20 IP trong LAN truy
cập Internet thì mười IP truy cập sau sẽ phải đợi đến khi nào có IP rỗi (các IP trước
không chiếm dụng IP Public nữa) thì mới có thể truy cập Internet được. Chính vì thế
giải pháp NAT động ít khi được sử dụng.
3. NAT overload – PAT(Port Address Translate).
NAT overload – PAT: là giải pháp được dùng nhiều nhất đặc biệt là trong các
Modem ADSL, đây là giải pháp mang lại cả hai ưu điểm của NAT đó là:
• Ẩn địa chỉ IP trong hệ thống mạng nội bộ trước khi gói tin đi ra Internet giằm
giảm thiểu nguy cơ tấn công trên mạng.
• Tiết kiệm không gian địa chỉ IP.
Bản chất PAT là kết hợp IP Public và số hiệu cổng (port) trước khi đi ra Internet.
Lúc này mỗi IP trong LAN khi đi ra Internet sẽ được ánh xạ ra một IP Public kết hợp
với số hiệu cổng.
Ví dụ: Ta chỉ sử dụng một IP kết nối lên ISP ( hay nói cách khác chính là IP
Public ) là : 200.0.0.1 để cho mọi host bên trong sử dụng để đi ra ngoài, mọi IP bên
trong đều được NAT thành IP kết nối này để đi Internet. Giả sử có hai host 192.168.1.1
và 192.168.1.2 cùng truy nhập web đến địa chỉ 6.8.6.8 trên Internet và cùng được NAT
thành 200.0.0.1. Lúc này, để có thể phân biệt giữa hai thực thể này, cơ chế NAT sử
dụng thêm tham số port của TCP hoặc UDP trong hoạt động NAT của mình. Ta quan
sát các gói tin được NAT:

Inside local Inside global
Host 1
Source: 192.168.1.1:1024
Destination: 6.8.6.8:80
Source: 200.0.0.1:1024
Destination: 6.8.6.8:80
Host 2
Source: 192.168.1.2:1024
Destination: 6.8.6.8:80
Source: 200.0.0.1:1025
Destination: 6.8.6.8:80
Ta thấy rằng, lần này bên cạnh chuyển đổi địa chỉ, router NAT còn thực hiện
chuyển đổi cả port được sử dụng. Ta cùng phân tích :
• Host 1 truy nhập web đến server 6.8.6.8 nên destination port sẽ là 80, source
port sử dụng một port ngẫu nhiên lớn hơn hoặc bằng 1024, giả sử là port
1024. Host 2 cũng truy nhập web đến server 6.8.6.8 với destination port là 80 và
giả sử cũng sử dụng source port là 1024.
• Khi hai gói tin TCP xuất phát từ hai host này được NAT thành các gói tin có
cùng source IP là 200.0.0.1, source port sẽ được chuyển đổi thành các port khác
nhau để phân biệt giữa hai gói; ví dụ, gói của host 1 thì đổi thành port 1024, còn
gói của host 2 thì đổi thành port 1025. Các entry chuyển đổi với thông số port đi
kèm sẽ được lưu vào bảng NAT của router, để từ đó, các gói tin trả về sẽ phân
biệt được giữa hai đối tượng khác nhau có cùng địa chỉ IP 200.0.0.1. Nếu trả về
port 1024 → host 1, nếu trả về port 1025 → host 2. Như vậy, hai host đã có thể
sử dụng cùng một địa chỉ để đi Internet.
• Ta cũng biết rằng trường TCP hoặc UDP port dài tới 16 bit, cung cấp 65536
port, nên có thể cho phép rất nhiều host nội bộ cùng sử dụng chung một địa chỉ
IP public trong hoạt động NAT để đi Internet. Tuy nhiên, cần phải lưu ý rằng, giá
trị port không phải được dùng để phân biệt giữa các host với nhau mà port được
sử dụng để phân biệt các session của các ứng dụng. Do đó, nếu một host mở

đồng thời 10 kết nối đi Internet chẳng hạn, thì khi đó sẽ có 10 port khác nhau
được sử dụng để NAT 10 session này ra Internet. Port trong NAT dùng cho các
session của các ứng dụng, không phải dùng cho phânbiệt các host.
4. Masquerading ( hay NAPT)
Đây là một trường hợp đặc biệt của NAT động. Nó được sử dụng trong Linux.
Với NAPT, nhiều địa chỉ IP được ẩn đi dưới một địa chỉ duy nhất. Nó tương phản với
NAT động , rằng chỉ có một kết nối cho một IP duy nhất tại một thời điểm. Trong
NAPT nhiều kết nối đến cùng một IP sẽ được phân chia thông qua TCP Port. Vấn đề
đặc biệt của NAPT là một số service trên host chỉ định chỉ chấp nhận kết nối từ những
port đặc quyền để đảm bảo rằng kết nối đi vào không phải là từ một user bình thường.
Có lẽ chỉ superuser có thể xử lý những port này. Vì trên DOS hoặc Window mọi người
đều có thể sử dụng chúng nên một số chương trình không thể sử dụng kết nối NAPT.
NAPT thường sử dụng những port ở một tầm vực cao. Trong Linux , bắt đầu là 61000
và kết thúc là 61000+4096. Mặc định này có thể thay đổi . Điều này cũng chỉ ra rằng
Linux hiện thực NAPT chỉ cho đồng thời 4096 kết nối NAPT . Kết nối NAPT cần phải
lưu giữ nhiều thông tin về trạng thái kêt nối. Ví dụ trên Linux, nó xem như tất cả các
packet với Destination IP= Local IP và Destination port nằm trong tầm port cho phép
của NAPT khi phải demasqueraded (phân giải những packet đã được masqueraded) .
Thực chất là việc thay đổi destination address và source address trong header packet.
Như vậy NAPT chỉ có một chiều . Những kết nối vào thì không thể Masquerading . Vì
thậm chí khi một host có một entry trong masquerading table của NAT device thì entry
này chỉ hợp lệ khi một kết nối đang được active. Ngay cả một ICMP-Reply liên quan
đến kết nối (host/port unreachable) cũng phải được filter và relay bởi NAT router.
Lợi ích lớn nhất của Masquerading là chỉ cần một IP được cấp mà toàn mạng vẫn có
thể kết nối trực tiếp đến Internet.
Ví dụ :
• Masquerading cho mạng 203. 156. 0. 0 dùng NAT đến IP local
• Cho mỗi packet IP đi ra source IP sẽ được thay bởi IP của NAT router. Source
port sẽ được đổi thành một port nằm trong tầm của Masquerading
5. Một số kỹ thuật NAT khác

Virtual Server (Loadbalancing)
NAT router đóng vai trò là một virtual server và các kết nối vào sẽ được chuyển
đến 2 hay nhiều server thật . Phụ thuộc vào giải thuật được xây dựng mà kết nối này sẽ
đi vào server nào ở bên trong.
Ví dụ :
• Tạo một virtual server với IP là 203. 156. 98. 100
• Sử dụng 2 host là 203. 156. 98. 111 và 203. 156. 98. 112 là những real server
cho virtual server.
• Một kết nối từ bên ngoài sẽ được remap bởi NAT router để sử dụng một trong
2 host (realserver)
• Load Balancing
Giải thuật để quyết định real server nào được kết nối. Cho ví dụ kiểm tra tải trên
những real server dựa trên việc đếm số packet trên mỗi giây đi qua NAT device đến
real server sau đó sẽ chọn ra real server có hiệu năng nhất. Bằng cách ấy sẽ điều chỉnh
được traffic trên mạng và giảm tải cho các server. Số giải thuật được sử dụng ở đây thì
không thể đếm được và dựa trên những cách tính toán khác nhau nhưng tất cả đều có
chung mục đích là giảm tải cho server. Khái niệm “tải” ở đây thì không rõ ràng và
không được đĩnh nghĩa duy nhất.
Ví dụ: Chạy một deamon trên mỗi server cung cấp thông tin cho NAT router về
tải (load) trên máy này và remap những kết nối mới đến hệ thống nơi mà số này là
thấp nhất. Điều này đòi hỏi sự liên lạc giữa những host (real server) và NAT router vì
thế chúng ta nên sử dụng những thông tin có trên NAT router như là số kết nối hiện tại
đang được remap đến một host hoặc ta phải sử dụng những thông tin vốn không có
trên server nhưng có thể dễ dàng được tìm thấy như là số byte hoặc packet mỗi giây
của một host hiện tại handle. Yếu tố được đề cập ở đây sẽ là một vài ý niệm để quyết
định việc đạt được sự cân bằng trong việc phân bố tải. Chính xác hơn là chúng ta cố
gắng đo lường và tính toán tải cho mỗi host. Có một số giải thuật ví dụ như giải thuật
dựa trên học thuyết về nguyên lý không chắc chắn trong định lượng của Heisenberg.
Vì thế chúng ta phải tìm cách làm tối thiểu chi phí của host để quyết định tải và host sẽ
được kết nối. Ngay cả khi chúng ta giả sử đã tìm ra một phương thức chính xác và tốt

để quyết định tải được sử dụng dựa trên việc định nghĩa “tải” là gì thì thực tiễn vẫn
chưa phải là giải pháp tốt nhất vì một IP packet có kích thước nhỏ nhất chỉ được xác
định bằng cách định lượng vật lý. Chúng ta có thể chỉ mới chọn được host nào chúng
ta cần gửi kết nối đến khi một kết nối mới được mở mà chưa thật sự tối ưu. Tuy nhiên
dù sao đi nữa các phương thức đề cập ở trên cũng có thể được áp dụng vào thực tiễn
cho việc xác định cân bằng tải ngoài ra có thể có một cách tính toán nào đó tốt nhất mà
chúng ta chưa tìm ra. Có nhiều cách tiếp cận để giải quyết cho bài toán Load balancing
, hầu hết trong số chúng đều ở mức application. Một ví dụ được mô tả trong RFC 1794
đó là dùng DNS support cho Load balancing. Trong tài liệu này đề cập đến việc dùng
DNS cho việc điều khiển tải của máy bằng cách tìm ra IP của máy ít bận rộn nhất khi
được chất vấn (queried). Vì DNS-queries sẽ được cache bởi liên tiếp các DNS-server
với việc điều khiển các giới hạn một cách khắt khe. Nó làm việc hoàn toàn tốt khi có
nhiều chất vấn và ngay cả khi chúng đến từ nhiều máy client. Tuy nhiên dù cho Load
balancing có làm việc trong trạng thái tốt thì cách tiếp cận này sẽ không giúp được gì
một khi server bị fail vì thậm chí ngay cả khi các IP được phân chia riêng biệt trong
việc chất vấn thì nó vẫn còn được cache do đó khi server bị fail thì có thể server này là
hiệu năng nhất và cơ chế load balancing hoàn toàn bị phá vỡ . Một ví dụ cho chương
trình cache nổi tiếng là Squid nó sử dụng giải thuật phức tạp để tìm ra một mục tiêu tốt
nhất. Giải quyết này chưa hẳn đã giống trên NAT nhưng mục tiêu của nó là như nhau.
Với NAT chúng ta có thể phân bố tải cho những service lớn và đa dạng dựa trên IP còn
Squid phục vụ cho một mục đích khác và sự so sánh này chưa hẳn đã hoàn toàn hợp
lý. Người viết chọn squid là một ví dụ vì trong squid thực hiện việc load balancing để
tìm ra một dữ liệu sao cho tối ưu một cách thông minh. Backup Systems Virtual server
cũng có thể được sử dụng để đạt được khả năng phục vụ tốt nhất nếu giải quyết được
bài toán một real server bất kỳ bị fail ở trên. Vì các service được cung cấp bởi Virtual
server thì có khả năng trên bất kỳ real server . Đặt trường hợp một real server bị fail có
xác suất là p thì một virtual server sử dụng NAT real server trong trường hợp bị fail có
thể được tính toán như sau:
Đặt:
• p1. . pn là khả năng xảy ra lỗi của server n trên N (N là số server được cung

cấp cho virtual server)
• pNAT: khả năng xảy ra lỗi của NAT router, lỗi này không phụ thuộc vào thiết
bị khác
• pvirt: khả năng xảy ra lỗi của virtual server khi một realserver bị fail
Công thức được tính toán là: Pvirt=1-((1- [tích(pi) chạy từ 1->n]) X (1-pNAT))
Dĩ nhiên setup hệ thống sử dụng công thức trên cho việc tính toán load balancing phải
thay đổi danh sách server được sử dụng bởi NAT router ngay khi một real server bị fail
. Điều này không thuộc về NAT-code nhưng có thể thực hiện tốt ở mức cao , thậm chí
từ shell scripts. Quan trọng là phải có cơ chế remove server bị fail từ bảng virtual
server vì thế phải xây dựng bảng virtual server có khả năng thay đổi dễ dàng để những
IP có thể thêm vào hoặc loại bỏ trong thời gian thực thi (runtime) . Như vậy với cách
làm này chúng ta đã có một liên kết giữa 2 khả năng là load balancing và high
availability dùng virtual server. Nó thì hoàn toàn trong suốt đối với tất cả các host
người sử dụng và những chương trình dùng virtual service.
Multiple routers per Destination
Như ở trên chúng ta thấy chúng ta có thể dùng NAT để phân bố tải qua nhiều host
và đạt được khả năng sẵn sàng cao (high availability) . Chúng ta có thể sử dụng NAT
để làm điều này cho nhiều mạng không? Vâng chúng ta có thể. Ở phần trên chúng ta
thấy chúng ta đã sử dụng virtual server thay thế cho nhiều host thật sự (real server) .
Chúng ta cũng có thể tạo ra kết nối mạng ảo (virtual network) gồm nhiều mạch thật sự
(real wire) dùng kỹ thuật virtual server.
Chúng ta có thể làm điều này với NAT như thế nào? Hãy tưởng tượng chúng ta có 2
nguồn cung cấp Internet (Internet provider). Chọn 2 bởi vì chúng ta không muốn xảy
ra lỗi khi một nguồn bị hỏng. Mỗi host cần kết nối Internet phải có một IP duy nhất vì
thế chúng ta mua cho mỗi host một IP từ 2 nhà cung cấp khác nhau. Như vậy chúng ta
có thể sử dụng một trong 2 host để gửi packet đến cùng một vị trí. Bây giờ chúng ta sẽ
setup cho hệ thống mô tả ở trên, chúng ta sẽ phân bố tải bằng cách sử dụng một ít host
thông qua provider 1 và một vài cái khác thông qua provider 2 và chúng ta có “higher
availibility” của kết nối đến Internet . Tuy nhiên chúng ta cũng có thể hình dung ra
rằng rất khó thực hiện load balancing khi mỗi host quyết định gửi packet đi. Chúng ta

không đề cập đến làm thế nào để một mạng dùng IP này hay IP khác. Ở đây vấn đề là
sẽ sử dụng một “central authority” để quyết định host nào sẽ sử dụng provider nào dĩ
nhiên thông qua một special NAT router. Sử dụng Nat máy tính Local của chúng ta chỉ
cần một IP. Nếu chúng ta có một provider tin cậy chúng ta có thể sử dụng IP của
provider này cung cấp đồng thời vẫn có thể sử dụng các IP bên trong mạng. Bây giờ
nếu một host bên trong mạng muốn thiết lập một kết nối mới tới Internet nó chỉ cần
gửi packet đến default router (NAT-router) với source IP là IP của host này. Do NAT-
router biết được tất cả những kết nối đi ra, nó sẽ quyết định provider để gửi packet đi
sao cho tối ưu. Nó sẽ thay source IP là IP của provider đã chọn và gửi packet đến
router của provider này. Vì source IP là IP của provider cung cấp nên con đường đi
tiếp theo của packet sẽ do provider quyết định thông qua provider router . Host gửi
packet đi sẽ không bao giờ biết provider nào được chọn bởi NAT router vì thế xử lý là
trong suốt.
Chúng ta có thể sử dụng cùng một giải thuật đã sử dụng cho Virtual server. Điểm khác
nhau giữa ứng dụng là ở ứng dụng này chúng ta đã can thiệp vào xử lý routing.
PHẦN III: Các vấn đề NAT cần giải quyết
1. Lưu giữ thong tin trạng thái
Ngoại trừ NAT tĩnh, các cái còn lại đòi hỏi chúng ta cần phải lưu trữ và quản lý
thông tin động từ client đang sử dụng hệ thống là một router. Thông tin này phải được
mất đi sau một thời gian timeout để NAT-IP được gắn cho một host còn có thể được sử
dụng lại. Thời gian timeout cũng là một lý do tại sao phải đọc thông tin TCP-header.
Timeout có thể ngắn cho một TCP-connection vừa được đóng và sao cho TCP-
connection vẫn còn được thiết lập. Ví dụ nhiều telnet session có thể treo trong một thời
gian dài không có sự trao đổi bất kỳ packet nào . Trong trường hợp này, nếu chúng ta
có đủ NAT-IP chúng ta không cần ngắt kết nối này , nhưng giả sử trong trường hợp
nhiều kết nối mới được yêu cầu và NAT-IP cần có thêm IP thì chúng ta sẽ cho telnet
session này bị chết để lấy lại IP.
Một cách khác là chúng ta không giữ thông tin trạng thái mà chỉ cần tìm IP chỉ
định (NAT-ip) . Nó thì đơn giản hơn cho việc hiện thực NAT và trong nhiều trường
hợp sẽ làm việc tốt cho các giải quyết ở trên. Khi luôn có đủ NAT-IP còn dư cho việc

sử dụng chúng ta không chú ý tới chi tiết khác nhau của 2 cách , ngoại trừ trong một
telnet session hoặc các chương trình liên quan chẳng hạn như ssh. Chỉ khi số NAT-IP
không nhiều và không đủ , chúng ta mới cần lưu giữ thông tin trạng thái vì chúng ta có
thể nhận ra ngay chính xác một kết nối vừa mới đóng và có thể lấy lại ngay IP đã cấp
phát mà không cần hết thời gian timeout. Việc lưu giữ dấu vết của các kết nối khác
nhau phục vụ cho mục đích bảo mật nếu nó được sử dụng bởi firewall, đây không hẳn
chỉ là NAT.
Có một số trường hợp việc NAT chỉ truy tìm chỉ IP thì hoàn toàn không hiệu quả.
Đó là trong các ứng dụng virtual server và virtual network bởi vì traffic được sinh ra
bởi một IP thì không thể nào phân chia được nữa. Khi chúng ta yêu cầu NAT truy tìm
thêm cả TCP/UDP port thì chúng ta có thể cân bằng tải và giảm traffic tốt hơn bằng
cách remap các kết nối đến một IP thích hợp .
2. Phân chia (fragmentation)
Quan hệ mật thiết với việc lưu giữ thông tin trạng thái về TCP và có thể là UDP
là vấn đề IP fragment. Nó quyết định việc thay đổi không phải chỉ IP address mà còn
TCP/UDP port. Telnet packet có thể được đối xử khác với HTTP packet. Cho một ví
dụ chỉ sử dụng một virtual server hoặc DNS cho tất cả các service nó được map tới các
host cung cấp service thực sự , nhiều service thậm chí được cung cấp bởi virtual host.
Một firewall là gateway mức application có thể làm được điều này nhưng gateway thì
hầu như là không trong suốt.
Vấn đề là ngay khi một packet được fragment đến NAT-router , nó không thể cung
cấp thông tin về port ngoại trừ fragment đầu tiên chứa TCP-header. Đó là lý do tại sao
chúng ta phải lưu giữ những thông tin trạng thái về mỗi fragment. Chúng ta phải lưu
giữ tất cả thông dữ liệu của fragment đầu tiên gồm TCP/UDP port của nó để mà chúng
ta có thể biết port của những fragment khác đang hoạt động. Nhiều khi phương pháp
này không thích đáng vì IP layer không đảm bảo packet tới với đúng số thứ tự
(sequence) Ví dụ fragment thứ 3 của packet đã được fragment có thể đi qua NAT
router đầu tiên trước khi fragment đầu tiên vẫn còn lưu giữ thông tin port . Trong
trường hợp này chúng ta sẽ ngăn lại các fragment không phải là fragment số 1 đến khi
fragment số 1 đã tớI đích để chúng ta biết chúng ta có cần phảI thay đổI thông tin của

packet hay không . Việc thay đổi không chỉ IP mà còn TCP/UDP port thì không quan
trọng nhưng chắc chắn hữu ích.
Ví dụ: chúng ta sử dụng một virtual server . Giả sử chúng ta muốn tạo một virtual
webserver và deamon của webserver thật sự đang chạy trên những máy khác nhau và
lắng nghe trên những port khác nhau vì một số lý do. Khi đó nếu chúng ta không ghi
nhận lại destination port trong packet , default là port 80 đến virtual server và thay
destination port là port mà real webserver đang lắng nghe vào packet reply thì chúng ta
không thể có được những gì chúng ta mong muốn. Khi đó tất cả các real webserver
phải lắng nghe trên cùng một port mà virtual server cung cấp dịch vụ web (default là
port 80). Xin nói thêm là một TCP connection thực hiện cơ chế handshaking 3 lần như
vậy nếu packet reply không chỉ ra đúng port để kết nối tới thì kết nối sẽ không được
thiết lập.
3. Định ra giao thức (protocol) cụ thể
NAT không phải luôn luôn trong suốt như đã nói , nó chỉ hoàn toàn trong suốt khi
mà IP là giao thức nắm giữ thông tin về IP của một packet. Có một số giao thức chúng
gửI IP là một phần của dữ liệu truyền đi. Như vậy nếu IP này đã được thay đổi với
NAT router thì chúng ta sẽ gặp nhiều vấn đề trục trặc khi gửi tới người nhận . Nó
không thể đúng IP đã được truyền đi. Một cách giải quyết cho vấn đề này là tìm thông
tin data truyền đi dựa trên một giao thức nào đó để biết được thông tin về IP đã được
thêm vào. Qúa trình này chỉ làm thêm overhead và phức tạp hơn.
Một số ví dụ cho những Protocol làm việc với NAT
FTP
FTP command PORT và response PASV cả 2 đều send một IP và port cho đầu kết
nối bên kia . Cho FTP để làm việc với một kết nối đã bị thay đổi chúng ta phải thay thế
IP trong message . Điều này rất phức tạp vì IP và port được truyền đi dưới dạng mã
ASSCII mô tả cho một số thập phân. Tức là mỗi số thập phân đơn lẻ được mô tả là
một byte trong packet . Vì lý do này IP thì không có một chiều dài cố định trong một
FTP-packet, bây giờ chúng ta thay thế IP hiện tại bởi một IP khác ít hoặc nhiều số hơn
packet sẽ lớn hoặc nhỏ đi điều này buộc phải chỉnh lạI TCP –sequence number vì thế
chúng ta phải giữ một số thông tin về những kết nối này để điều chỉnh các sequence

number thích hợp trong mỗi packet . Đây không chỉ là vấn đề cho giao thức FTP mà
còn cho nhiều giao thức khác mà khi thay đổi IP nó làm thay đổi chiều dài packet
ICMP
Một số ICMP message phụ thuộc vào loại message , nếu thêm vào header của
packet có thể gây ra những vấn đề . Nếu packet này được thay đổi thì header này sẽ
chứa NAT-Ip chứ không phải IP của host sẽ nhận message ICMP này . Dựa trên điều
này nếu bây giờ chúng ta không thay local IP mà là thêm vào NAT-Ip vào header thì
điều này sẽ được giải quyết.
DNS
Dễ thấy vấn đề ở đây là nếu một name service của một IP bên trong muốn cung
cấp ra ngoài NAT-domain. Một cách giải quyết là sẽ dùng 2 DNS service . Một cho
việc giải đáp cho các IP bên trong và một cái khác giải đáp cho các IP ngoài mạng . Dĩ
nhiên các IP được giải đáp bởi DNS server thứ 2 không được đưa vào danh sách nhóm
IP động cho NAT. NAT router thì hầu hết được đặt trên ranh giới giữa các mạng
phân chia internal DNS và external DNS và được mở rộng sử dụng cho lý do bảo mật
Nếu sử dụng một cách tiếp cận phức tạp hơn là ghi lại tất cả các DNS data đã được
relay bởi NAT router chúng ta nên sử dụng một gateway mức ứng dụng hơn là hiện
thực một NAT bởi vì DNS thích hợp vớI mức gateway hơn và chúng ta chỉ nên tác
động tới kernel khi thật sự cần thiết(xây dựng NAT)
BOOTP
Giao thức này không có vấn đề gì với NAT vì nó không đi ra khỏi ranh giới của
một NAT-domain.
Routing Protocol (RIP, EGP…)
Không cần phải giải thích tại sao routing protocol gặp rất nhiều vấn đề với NAT . Có
nhiều giao thức tìm đường khác nhau và làm việc với nó thì không dễ dàng chút nào
Có 3 cách giải quyết là:
• Không sử dụng những giao thức này , chỉ sử dụng static routing. Đây là cách
chọn lựa tốt cho phần lớn các kết nối từ mạng chúng ta ra bên ngoài thông qua
NAT router
• Sử dụng một gateway mức ứng dụng

• Ghi lại thông tin của packet
4. Tản mạn những ứng dụng ảnh hưởng bởi NAT
Một số giao thức ở lớp trên ( như là FTP và SIP) gửi thông tin địa chỉ tầng mạng
bên trong ứng dụng payloads. FTP trong chế độ kích hoạt, ví dụ, sử dụng việc chia kết
nối để điều khiển traffic (câu lệnh) và cho dữ liệu (file contents). Khi đang yêu cầu
truyền một file, một trạm tạo ra yêu cầu xác lập kết nối trao đổi dữ liệu bằng địa chỉ
lớp 3 và lớp 4 của nó. Nếu máy trạm tạo ra một yêu cầu giả phía sau một NAT firewall
đơn giản, việc truyền địa chỉ IP hoặc số cổng TCP tạo ra thông tin sẽ được nhận bởi
một Server không hợp lệ.
Một Gateway tầng ứng dụng (ALG) có thể sửa lỗi này. Một module phần mềm
ALG chạy trên thiết bị NAT firewall cập nhật bất kỳ dữ liệu payload nào tạo ra bất hợp
lệ bởi sự dịch chuyển địa chỉ. ALG hiển nhiên cần phải hiểu giao thức cấp cao mà
chúng cần sửa chữa, và vì thế mỗi giao thức với những vấn đề đòi hỏi khác nhau là
một phần của ALG
Một giải pháp khác có thể sử dụng để giải quyêt vấn đề này là sử dụng công nghệ
NAT traversal sử dụng những giao thức như là STUN hay ICE hay tiếp cận độc quyền
trong một session border controller. NAT traversal có thể là ứng dụng dựa trên cả TCP
và UDP, nhưng kỹ thuật dựa trên UDP là đơn gian hơn, được hiểu biết rộng rãi hơn, và
tương thích với legacy NATs hơn. Trong cả hai trường hợp, giao thức ở tầng cao phải
được thiết kế với NAT traversal ở giữa, và nó không làm việc một cách tin cậy ở
symmetric NATs hay poorly-behaved legacy NATs khác.
Một tiện ích có triển vọng khác là UPnP (Universal Plug and Play) hay Bonjour (NAT-
PMP), nhưng những cài này yêu cầu sự liên hợp các thiết bị NAT.
Tuy nhiên, hầu hết các giao thức client-server truyền thống (ngoại trừ FTP), không
gửi thônng tin liên hệ lớp 3 và vì vậy không yêu cầu phải có sự xử lý đặc biệt bằng
NAT. Trên thực tế, tránh sự phức tạp NAT là yêu cầu thực tế khi thiết kế một giao thức
tầng cao mới ngày nay.
NAT cũng có thể là nguyên nhân những vấn đề nơi mã hóa IPsec được ứng dụng
và trong trường hợp nơi nhiều thiết bị như là SIP phones được xác định đằng sau NAT.
Phones mã hóa tín hiêu với IP sec tóm lược thông tin cổng trong gói tin IPsec nghĩa là

thiết bị NA(P)T không thể truy cập và dịch chuyển cổng. Trong những trường hợp này
thiết bị NA(P)T hoàn nguyên tới họat động NAT đơn giản. Điều này nghĩa là tất cả
traffic trở lại tới NAT sẽ bị map tới một client nguyên nhân dịch vụ lỗi. Có 2 giải pháp
cho vấn đề này, một là sử dụng TLS (hoạt động ở tầng thứ 4 trong mô hình tham chiếu
OSI) và vì vậy không che dấu số hiệu cổng, hay tóm lược IPsec trong UDP - giải pháp
sau cùng được TISPAN chọn để lưu trữ an toàn NAT traversal.
PHẦN IV: KẾT LUẬN
NAT trong ROUTER rất đa dạng, tùy thuộc vào từng tình huống mà ta áp dụng.
Càng đi sâu, ta càng thấy cái hay trong việc xử lý thông tin của các packet, những đối
tượng luận lý để giải quyết các vấn đề vật lý thú vị như thế nào. Nắm vững các kỹ
thuật NAT giúp ta có thể triển khai các hệ thống định tuyến, cân bằng tải một cách an
toàn và hiệu quả nhất.
Với Cisco IOS, câu lệnh để khai báo một entry NAT tĩnh có cú pháp:
Router(config)#ip nat inside source static inside_local inside_global
Trong đó: inside_local là địa chỉ bên trong còn inside_global là địa chỉ bên ngoài
tương ứng với địa chỉ bên trong này.
Cấu hình cho yêu cầu của ví dụ trên:
R(config)#ip nat inside source static 192.168.1.1 199.99.9.1
R(config)#ip nat inside source static 192.168.1.2 199.99.9.2
R(config)#ip nat inside source static 192.168.1.3 199.99.9.3
R(config)#ip nat inside source static 192.168.1.4 199.99.9.4
R(config)#ip nat inside source static 192.168.1.5 199.99.9.5
R(config)#ip nat inside source static 192.168.1.6 199.99.9.6
Sau khi cấu hình xong các lệnh này, 6 entry NAT tĩnh tương ứng đã được điền
vào bảng NAT của router. Các gói tin xuất phát từ các địa chỉ từ 192.168.1.1 đến
192.168.1.6 khi đi ra Internet sẽ được chuyển đổi địa chỉ IP thành các địa chỉ public từ
199.99.9.1 đến 199.99.9.6.
Một thao tác nữa phải được tiến hành trên router thực hiện NAT đó là cấu hình
trên router chỉ rõ cổng nào làinside interface và cổng nào là outside interface. Để chỉ
định các cổng inside hay outside, chúng ta vào trong cổng tương ứng và gõ lệnh:

Router(config-if)#ip nat {inside | outside}
Với sơ đồ hình 1, chúng ta cấu hình trên các cổng F0/0 và F0/1:
R(config)#interface f0/0
R(config-if)#ip nat inside
R(config-if)#exit
R(config)#interface f0/1
R(config-if)#ip nat outside
R(config-if)#exit
Phụ lục
Các lệnh cấu hình Router
NAT tĩnh:
Mã:
Router(config)#ip nat inside source static [[I]inside local address[/I]] [[I]inside
global address[/I]]
NAT động:
Mã:
Router(config)#ip nat pool [ [I]tên pool[/I]] [I][A.B.C.D A1.B1.C1.D1][/I] netmask
[[I]mặt nạ[/I]]
Router(config)#ip nat inside source list [[I]số hiệu ACL] [/I]pool [[I]tên pool[/I]]
Router(config)#access-list [[I]số hiệu ACL[/I]] permit A.B.C.D [I]windcard
masks[/I]
PAT:
Mã:
Router(config)#ip nat pool [I][tên pool] [ip global inside] [subnet mask][/I]
Router(config)#ip nat inside source list [I][tên số hiệu ACL][/I] pool [I][tên pool]
[/I] overload
Router(config)#access-list [I][số hiệu][/I] permit [I][địa chỉ] [windcard mask][/I]
Dù là sử dụng NAT tĩnh, NAT động hay PAT thì sau khi cấu hình xong chúng ta vẫn
phải apply vào các interface ví dụ như trong NAT tĩnh và động:
Mã:

Router(config)#interface ethernet 0
Router(config-if)#ip nat inside

Router(config)#interface serial 0
Router(config-if)#ip nat outside
Còn trong PAT
Mã:
Router(config)#ip nat inside source list [tên ACL] interface [cổng ra] overload
Router(config)#access-list [I][số hiệu][/I] permit [I][địa chỉ] [windcard mask][/I]

Tài liệu tham khảo.
/> />quan
/>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×