intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tài liệu giới thiệu tổng quan về NAT (Network Address Translation)

Chia sẻ: Lê Bảo Ngân | Ngày: | Loại File: PDF | Số trang:15

214
lượt xem
42
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu giới thiệu tổng quan về NAT cung cấp cho người đọc những kiến thức cơ bản nhất về NAT như khái niệm, cơ cấu hoạt động, nguyên lý làm việc. Với tài liệu này người đọc sẽ có những kiến thức khái quát và tổng quan nhất về NAT và có thể sử dụng kiến thức này để ứng dụng trong quá trình quản trị mạng.

Chủ đề:
Lưu

Nội dung Text: Tài liệu giới thiệu tổng quan về NAT (Network Address Translation)

  1. Phần I: Giới thiệu tổng quan về NAT (Network Address Translation) I : 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ể. II: NAT làm việc như thế nào ? 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:
  2. +> 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. thật. NAT table mappings: Private IP Translated IP Original Port Translated Port 192. 168. 1. 2 10. 3. 4. 5 1025 2000 192. 168. 1. 3 10. 3. 4. 5 1026 2001
  3. Nhấn vào thanh bar để xem kích thước thật. III: NAT giải quyết những vấn đề nào ? – Ban đầu, NAT được đưa ra nhằm giải quyết vấn đề thiếu hụt địa chỉ của IPv4 . – 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. – 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ể. IV: Các khái niệm cơ bản . 1. 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 2. 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. 3. 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). 4. 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
  4. 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". Phần II: Các kỹ thuật NAT I: Kỹ thuật NAT tĩnh . Với NAT tĩnh, địa chỉ IP thường được ánh xạ tĩnh với nhau thông qua các lệnh cấu hình. Trong NAT tĩnh, một địa chỉ Inside Local luôn luôn được ánh xạ vào địa chỉ Inside Global. Nếu được sử dụng, mỗi địa chỉ Outside Local luôn luôn ánh xạ vào cùng địa chỉ Outside Global. NAT tĩnh không có tiết kiệm địa chỉ thực. Mặc dù NAT tĩnh không giúp tiết kiệm địa chỉ IP, cơ chế NAT tĩnh cho phép một máy chủ bên trong hiện diện ra ngoài Internet, bởi vì máy chủ sẽ luôn dùng cùng một địa chỉ IP thực . Cách thức thực hiện NAT tĩnh thì dễ dàng vì toàn bộ cơ chế dịch địa chỉ được thực hiện bởi một công thức đơn giản: Địa chỉ đích =Địa chỉ mạng mới OR (địa chỉ nguồn AND ( NOT netmask)) Ví dụ : Một địa chỉ private được map với một địa chỉ public. Ví dụ 1 một máy trọng mạng LAN có địa chỉ 10. 1. 1. 1 được “phiên dịch” thành 1 địa chỉ public 20. 1. 1. 1 khi gửi tin ra ngoài Internet.
  5. Nhấn vào thanh bar để xem kích thước thật. Bắt đầu bằng một gói tin được gửi từ một PC bên trái của hình đến một máy chủ bên phải ở địa chỉ 170. 1. 1. 1. Địa chỉ nguồn private 10. 1. 1. 1 được dịch thành một địa chỉ thực 200. 1. 1. 1. Máy client gửi ra một gói tin với địa chỉ nguồn 10. 1. 1. 1 nhưng router NAT thay đổi địa chỉ nguồn thành 200. 1. 1. 1. Khi server nhận được một gói tin với địa chỉ nguồn 200. 1. 1. 1, máy chủ nghĩ rằng nó đang nói chuyện với máy 200. 1. 1. 1, vì vậy máy chủ trả lời lại bằng một gói tin gửi về địa chỉ đích 200. 1. 1. 1. Router sau đó sẽ dịch địa chỉ đích 200. 1. 1. 1 ngược lại thành 10. 1. 1. 1. II: Kỹ thuật NAT động (dynamic NAT). Với NAT, khi số IP nguồn không bằng số IP đích. Số host chia sẻ nói chung bị giới hạn bởi số IP đích có sẵn. NAT động phức tạp hơn NAT tĩnh, vì thế chúng phải lưu giữ lại thông tin kết nối và thậm chí tìm thông tin của TCP trong packet. Một số người dùng nó thay cho NAT tĩnh vì mục đích bảo mật. Những người từ bên ngoài không thể tìm được IP nào kết nối với host chỉ định vì tại thời điểm tiếp theo host này có thể nhận một IP hoàn toàn khác. Những kết nối từ bên ngoài thì chỉ có thể khi những host này vẫn còn nắm giữ một IP trong bảng NAT động. Nơi mà NAT router lưu giữ những thông tin về IP bên trong (IP nguồn )được liên kết với NAT-IP(IP đích). Cho một ví dụ trong một session của FPT non-passive. Nơi mà server cố gắng thiết lập một kênh truyền dữ liệu vì thế khi server cố gắng gửi một IP packet đến FTP client thì phải có một entry cho client trong bảng NAT. Nó vẫn phải còn liên kết một IPclient với cùng một NAT-IPs khi client bắt đầu một kênh truyền control trừ khi FTP session rỗi sau một thời gian timeout. Xin nói thêm giao thức FTP có 2 cơ chế là passive và non-passive . Giao thức FTP luôn dùng 2 port (control và data) . Với cơ chế passive (thụ động ) host kết nối sẽ nhận thông tin về data port từ server và ngược lại non-passive thì host kết nối sẽ chỉ định dataport yêu cầu server
  6. lắng nghe kết nối tới. Bất cứ khi nào nếu một người từ bên ngoài muốn kết nối vào một host chỉ định ở bên trong mạng tại một thời điểm tùy ý chỉ có 2 trường hợp : + Host bên trong không có một entry trong bảng NAT khi đó sẽ nhận được thông tin “host unreachable” hoặc có một entry nhưng NAT-IPs là không biết. + Biết được IP của một kết nối bởi vì có một kết nối từ host bên trong ra ngoài mạng. Tuy nhiên đó chỉ là NAT-IPs và không phải là IP thật của host. Và thông tin này sẽ bị mất sau một thờii gian timeout của entry này trong bảng NAT router. Ví dụ: Một địa chỉ private được map với một địa chỉ public từ một nhóm các dịa chỉ public. Ví dụ một mạng LAN có địa chỉ 10. 1. 1. 1/8 được “phiên dịch” thành 1 địa chỉ public trong dải 200. 1. 1. 1 đến 200. 1. 1. 100 khi gửi tin ra ngoài Internet. III: Kỹ thuật NAT overloading ( hay PAT) Dùng để ánh xạ nhiều địa chỉ IP riêng sang một địa chỉ công cộng vì mỗi địa chỉ riêng được phân biệt bằng số port. Có tới 65. 356 địa chỉ nội bộ có thể chuyển đổi sang 1 địa chỉ công cộng. Nhưng thực tế thì khỏang 4000 port. PAT hoạt động bằng cách đánh dấu một số dòng lưu lượng TCP hoặc UDP từ nhiều máy cục bộ bên trong xuất hiện như cùng từ một hoặc một vài địa chỉ Inside Global. Với PAT, thay vì chỉ dịch địa chỉ IP, NAT cũng dịch các cổng khi cần thiết. Và bởi vì các trường của cổng có chiều dài 16 bit, mỗi địa chỉ Inside Global có thể hỗ trợ lên đến 65000 kết nối TCP và UDP đồng thời. Ví dụ, trong một hệ thống mạng có 1000 máy, một địa chỉ IP thực được dùng như là địa chỉ Inside Global duy nhất có thể quản lý trung bình sáu dòng dữ liệu đến và đi từ các máy trên Internet. Ví dụ : PAT map nhiều địa chỉ Private đến một địa chỉ Public, việc phân biệt các địa chỉ Private này
  7. được dựa theo port, ví dụ IP address 10. 1. 1. 1 sẽ được map đến ip address 200. 1. 1. 6 ort_number Nhấn vào thanh bar để xem kích thước thật. Nhấn vào thanh bar để xem kích thước thật. * Mối quan hệ giữa NAT và PAT PAT có mối quan hệ gần gũi với NAT nên vẫn thường được gọi là NAT Trong NAT, nhìn chung chỉ địa chỉ ip được đổi. Có sự tương ứng 1:1 giữa địa chỉ riêng và địa chỉ công cộng.
  8. Trong PAT, cả địa chỉ riêng của người gửi và cổng đều được thay đổi. Thiết bị PAT sẽ chọn số cổng mà các hosts trên mạng công cộng sẽ nhìn thấy. Trong NAT, những gói tin từ ngoài mạng vào được định tuyến tới địa chỉ IP đích của nó trên mạng riêng bằng cách tham chiếu địa chỉ ngưồn đi vào Trong PAT, Chỉ có một địa chỉ IP công cộng được nhìn thấy từ bên ngoài và gói tin đi vào từ mạng công cộng được định tuyến tới đích của chúng trên mạng riêng bằng cách tham chiếu tới bảng quản lý từng cặp cổng private và public lưu trong thiết bị PAT. Cái này thường được gọi là connection tracking Một số thiết bị cung cấp NAT, như broadband routers, thực tế cung cấp PAT. vì lý do này, có sự nhầm lẫn đáng kể giữa các thuật ngữ. Nhìn chung người ta sử dụng NAT để bao gồm những thiết bị PAT . IV: 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. V: Một số kỹ thuật NAT khác
  9. 1. 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.
  10. 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. 2, 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
  11. 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 I: Lưu giữ thông 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
  12. 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 . II: 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
  13. 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. III: Đị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
  14. 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 IV: 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),
  15. 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.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0