Chuyen doi dia chi mang - NAT (Network Address Translation) 1



Chuyển đổi địa chỉ mạng

(NAT-Network Address Translation)

Mục đích:

-          Hiểu về quá trình NAT.
-          Thực hành quan sát quá trình NAT bằng Packet Tracer.

NAT

NAT là một giải pháp nhằm đối phó với tình trạng cạn kiệt địa chỉ IPv4. Tình trạng cạn kiệt của IPv4 đã được cảnh báo vào cuối những năm 1980, và tới năm 2011 tình trạng này đã xảy ra ở một số nơi[1].

Để đơn giản, phần này sẽ mô tả hoạt động của NAT trên thiết bị modem ADSL tại hộ gia đình hoặc một công ty nhỏ. Tất nhiên NAT có thể được tích hợp trên nhiều thiết bị mạng khác.

Modem ADSL ngoài chức năng chuyển đối tín hiệu từ dạng số sang dạng tương tự và ngược lại, nó còn được tích hợp thêm nhiều chức năng khác như DHCP, NAT…v.v.



Quan sát Hình 1, modem ADSL có hai loại cổng: cổng phía trong, và cổng phía ngoài.

-          Cổng phía trong là cổng được sử dụng để trao đổi dữ liệu với các thiết bị bên trong nhà hay trong công ty. Cổng này được gán một địa chỉ IP nội bộ (private IP). Ví dụ, 192.168.1.1/24.

-          Cổng phía ngoài là cổng được sử dụng để trao đổi dữ liệu với hệ thống mạng Internet thông qua nhà cung cấp dịch vụ Internet (ISP). Cổng này thường được gán một địa chỉ IP công cộng (public IP) do nhà cung cấp dịch vụ cấp phát. Ví dụ, 123.28.124.11/16.

Tình huống giả định: người sử dụng đang ngồi tại máy tính có địa chỉ IP là 192.168.1.3 gửi yêu cầu truy cập trang web www.google.com, và yêu cầu này tới được máy www.google.com. Khi nhận được yêu cầu, máy server của Google sẽ gửi nội dung trang web cho máy tính có địa chỉ IP là 192.168.1.3, tuy nhiên, trên thế giới hiện nay có hàng ngàn máy tính đang được gán địa chỉ IP là 192.168.1.3, vậy Google biết gửi nội dung trang web cho máy tính nào? Đây chính là lý do hệ thống mạng sẽ không cho phép các gói tin có địa chỉ IP nguồn và IP đích là địa chỉ IP nội bộ được phép truyền đi trực tiếp trên hệ thống mạng Internet.

NAT là một trong những giải pháp giúp các máy tính đang được gán địa chỉ IP nội bộ có thể trao đổi dữ liệu với các máy tính khác trên mạng Internet, và vẫn đảm bảo tính duy nhất của các địa chỉ IP. Như trong Hình 1, tất cả các gói tin đi ra ngoài Internet qua modem ADSL sẽ có địa chỉ IP nguồn là 123.28.124.11 và tất cả các gói tin đi từ Internet tới các máy phía trong modem ADSL sẽ có địa chỉ IP đích là 123.28.124.11.

Có thể hiểu một cách đơn giản là, các máy tính phía trong modem ADLS đã mượn địa chỉ IP công cộng (địa chỉ IP đầu ngoài) của modem ADSL để giao tiếp với các máy tính khác trong mạng Internet. Vấn đề ở đây là, khi nhận được gói tin chuyển về từ Internet, làm sao modem ADSL biết được chính xác gói tin đó là của máy tính nào ở bên trong? Để làm được việc này modem ADSL sử dụng một Bảng NAT (NAT translation table) để lưu vết, nhằm chuyển tiếp gói tin cho các máy tính ở bên trong.

Để hiểu về hoạt động của NAT và Bảng NAT, xem xét lại ví dụ: máy tính có địa chỉ IP 192.168.1.3  (gọi tắt là máy client) gửi yêu cầu truy cập trang web www.google.com, cổng 80, địa chỉ IP của máy Google (gọi tắt là máy server) là 74.125.128.99. Chi tiết các bước (xem thêm ở Hình 1):

-          Bước 1, máy client sẽ tạo một gói tin với địa chỉ IP nguồn là 192.168.1.3, port nguồn là 3345 (giá trị của port nguồn là một số tùy ý trong miền giá trị cho trước); địa chỉ IP đích là 74.125.128.99, port đích là 80. Client sẽ gửi gói tin này tới modem ADSL.

-          Bước 2, modem ADSL nhận gói tin từ client, thay đổi giá trị port nguồn thành 5001 (modem ADSL có thể sử dụng một giá trị port nguồn bất kì, miễn là chưa tồn tại trong Bảng NAT), và thay đổi địa chỉ IP nguồn thành 123.28.124.11. Modem ADSL cũng tạo thêm một hàng trong Bảng NAT để lưu trữ thông tin về địa chỉ IP nguồn và port nguồn trước (LAN side) và sau (WAN side) khi thay đổi. Đây chính là thông tin lưu vết, giúp cho việc chuyển tiếp gói tin tới máy client khi server gửi gói tin trả lời. Modem ADSL chuyển tiếp gói tin tới máy server.

-          Bước 3, máy server nhận được gói tin yêu cầu nội dung trang web từ modem ADSL, thực tế là yêu cầu của máy client, tuy nhiên, máy server không quan tâm tới điều này. Server sẽ gửi nội dung trang web về cho modem ADSL với thông tin địa chỉ: IP nguồn là 77.125.128.99, port 80; IP đích là 123.28.124.11, port 5001.

-          Bước 4, khi modem ADSL nhận được gói tin trả lời từ server, nó sẽ tham chiếu đến thông tin đã được lưu trong Bảng NAT để thay đổi lại thông tin địa chỉ trên gói tin và gửi về đúng máy client. Cụ thể IP nguồn là 77.125.128.99, port 89; IP đích là 192.168.1.3, port 3345.

 

Một số vấn đề liên quan đến NAT


NAT đã được sử dụng rộng rãi trong những năm gần đây (2014), tuy nhiên, vẫn có những ý kiến phản đối trong cộng đồng IEFT, một số lý do phản đối liên quan đến:

-          Khái niệm port (port number) đã được sử dụng như một loại địa chỉ ở mức tiến trình, nhưng trong NAT lại được sử dụng để xác định địa chỉ cho một host.

-          Router hay các thiết bị có chức năng giống như router chỉ làm việc với các gói tin cao nhất là ở tầng 3, trong khi NAT có thao tác với giá trị port nằm ở tầng 4.

-          NAT đã vi phạm nguyên tắc làm việc end-to-end. Nguyên tắc này cho rằng, hai host sẽ trao đổi dữ liệu trực tiếp với nhau mà không bị can thiệp vào phần nội dung gói tin dẫn đến việc bị thay đổi địa chỉ IP và giá trị port như trong quá trình NAT.

-          Việc cạn kiệt địa chỉ IP có thể giải quyết bằng giải pháp lâu dài là sử dụng địa chỉ IPv6, chứ không phải là một giải pháp tình thế như NAT.

Ngoài ra, NAT còn gây trở ngại cho các ứng dụng chạy trên nền tảng P2P, ví dụ: chia sẻ tập tin, Voice-over-IP. Trong một ứng dụng chạy trên nền tảng P2P, một peer bất kì (ví dụ peer A) phải có khả năng thiết lập kết nối TCP với các peer khác (ví dụ peer B). Tuy nhiên, nếu peer B nằm sau NAT, nó sẽ không thể hoạt động giống như một server thực thụ và peer A sẽ không thể khởi tạo được kết nối TCP với peer B. Nếu peer A không nằm sau NAT thì vẫn có một số giải pháp để vượt qua trở ngại này. Tìm hiểu thêm về NAT traversal.

 

Thực hành quan sát quá trình NAT trên Packet Tracer


Sử dụng Packet Tracer ở chế độ Simulation (mô phỏng) để quan sát header của gói IP khi gói tin này đi qua router biên đã được thiết lập chế độ NAT.

Mô hình mạng.


Tải bài thực hành D2_PTAct_4_2_3_3.pka trên mạng Internet hoặc tại đường dẫn http://www.mediafire.com/download/bd6uui6r2mt58pw/D2_PTAct_4_2_3_3.pka

Bước 1: kiểm tra mô hình để đảm bảo tất cả các thiết bị đều có thể gửi và nhận gói tin ở chế độ Simulation. Nếu tất cả các đèn báo trạng thái liên kết đều có màu xanh là được, nếu còn có đèn báo màu hổ phách, thực hiện chuyển đổi qua lại giữa hai chế độ Simulation và Realtime một vài lần để đèn báo chuyển sang màu xanh.

Bước 2: ở chế độ Simulation, thực hiện gửi một yêu cầu duyệt web (HTTP request) từ một máy trong mạng tới máy web server.
  1. Chọn máy tính Customer PC, chọn Desktop, chọn Web Browser. Tại đường dẫn URL, nhập địa chỉ của trang web www.ispserver.com. Bấm nút Go.
  2. Quan sát trong cửa sổ Event List, thấy hàng đợi của máy Customer PC đang có hai gói tin là DNS request, và ARP request. Xem nội dung của gói tin ARP request bằng cách bấm vào biểu tượng gói tin trên mô hình mạng hoặc bấm vào biểu tượng gói tin ở dưới cột Info trong cửa sổ Event List.
  3. Quan sát trong cửa sổ PDU Information at Device: Customer PC, cho biết máy Customer PC gửi broadcast một ARP request để tìm địa chỉ MAC tương ứng cho địa chỉ IP nào? Tại sao phải tìm địa chỉ MAC của máy đó? (trả lời: 192.168.1.20; đây là địa chỉ IP của máy DNS server trong mạng nội bộ, máy Customer PC cần có địa chỉ IP của www.ispserver.com nên phải nhờ DNS server tìm giúp, muốn gửi được yêu cầu tới máy DNS server thì phải có địa chỉ MAC của DNS server).
  4. Trong cửa sổ Event List, bấm nút Capture/Forward hai lần. Cho biết thiết bị nào đã trả lời cho gói ARP request xuất phát từ máy Customer PC? Giá trị của địa chỉ MAC? (trả lời: máy www.customerserver.com; Giá trị của MAC là 00E0.B0EA.BDAB)
  5. Trong cửa sổ Event List, bấm nút Capture/Forward hai lần. Máy Customer PC nhận gói trả lời ARP (ARP reply) và tạo gói tin mới. Giao thức của gói tin mới tạo là gì? Có thể bấm vào thẻ Outbound PDU Details của gói tin mới tạo để xem thêm các thông tin chi tiết. (trả lời: DNS, cụ thể là một gói DNS query: tìm địa chỉ IP cho một tên miền).
  6. Trong cửa sổ Event List, bấm nút Capture/Forward hai lần. Bấm vào gói tin tại máy www.customerserver.com. Sau đó bấm vào thẻ Outbound PDU Details. Cuộn xuống dưới để quan sát dữ liệu của tầng Application (Application Layer). Cho biết địa chỉ IP của ISP server (hay www.ispserver.com)? (trả lời: 209.165.202.131; xem trong DNS ANSWER)
  7. Trong cửa sổ Event List, bấm nút Capture/Forward hai lần. Sẽ thấy máy tính Customer PC tạo một ARP request mới. Mục đích của ARP request mới này là gì? (trả lời: máy Customer PC đã biết địa chỉ IP của máy www.ispserver.com, tuy nhiên đây là một địa chỉ IP ở mạng khác, do vậy, nó phải nhờ đến máy server/router/…v.v đóng vai trò là Default Gateway chuyển tiếp gói tin của nó ra ngoài. Trong cạc mạng của máy Customer PC có khai báo Gateway là 192.168.1.1, vì vậy, để gửi gói tin đến Gateway thì cần phải có địa chỉ MAC của nó. Muốn có địa chỉ MAC khi đã biết địa chỉ IP thì phải sử dụng gói ARP request của giao thức ARP).
  8. Trong cửa sổ Event List, bấm nút Capture/Forward 10 lần cho tới khi máy Customer PC đã có đủ thông tin để thiết lập một gói tin yêu cầu nội dung trang web từ máy www.ispserver.com. Gói tin có tên HTTP request.
  9. Trong cửa sổ Event List, bấm nút Capture/Forward ba lần. Bấm vào gói tin tại Customer Router, đây là một router biên đã được thiết lập chế độ NAT. Quan sát nội dung của gói tin tại Customer Router và cho biết địa chỉ inside local và địa chỉ inside global là gì? (trả lời: địa chỉ inside local là 192.168.1.10 và địa chỉ inside global là 209.165.201.2).
-         Địa chỉ inside local là địa chỉ IP nội bộ (private IP) được gán cho các host phía trong của thiết bị NAT.
-         Địa chỉ inside global là địa chỉ IP công cộng (public IP) được cấp bởi nhà quản lý địa chỉ IP (ví dụ ISP), là địa chỉ đại diện cho một hay nhiều địa chỉ IP nội bộ khi trao đổi dữ liệu với các thiết bị trên Internet (ví dụ: địa chỉ IP đầu ngoài của modem ADSL đã trình bày ở phần lý thuyết về NAT). Đơn giản hơn, inside global là địa chỉ IP của cổng phía ngoài thiết bị NAT.
  1. Trong cửa sổ Event List, bấm nút Capture/Forward bảy lần cho tới khi gói HTTP trả lời (HTTP reply) tới được thiết bị Customer Router. Xem xét nội dung của gói HTTP reply để kiểm tra địa chỉ inside local và địa chỉ inside global đã được đổi lại nhằm chuyển tiếp gói tin HTTP reply tới máy Customer PC.
Bước 3: gửi một gói tin HTTP (HTTP request) từ một host bên ngoài tới máy web server ở bên trong thiết bị NAT.

Máy Customer Server cung cấp dịch vụ web cho các máy tính bên ngoài với tên miền là www.customerserver.com. Thực hiện duyệt web từ máy tính ISP Workstation (máy này có địa chỉ IP public) để quan sát hoạt động của NAT. Chuyển Packet Tracer sang chế độ Simulation.
  1. Chọn máy tính ISP Workstation, chọn Desktop, chọn Web Browser, tại đường dẫn URL nhập địa chỉ trang web là www.customerserver.com. Bấm nút Go.
  2. Có thể bấm vào Auto Capture/Play hoặc Capture/Forward để chạy qua các bước liên quan tới ARP và DNS. Dừng lại khi gói HTTP request được tạo ra tại máy ISP Workstation.
  3. Khi gói tin HTTP request đến Customer Router, kiểm tra nội dung của gói tin và cho biết địa chỉ inside local và inside global? (trả lời: địa chỉ inside local là 192.168.1.20; địa chỉ inside global là 209.165.201.5).

Tài liệu đã tham khảo

- Kurose, Ross, “Computer Networking, A top-Down Approach”, Sixth edition, 2013, p349
- Cisco, Lab 4.2.3.3: Examining Network Address Translation (NAT)


[1] http://en.wikipedia.org/wiki/IPv4_address_exhaustion
-------------------------
Cập nhật 2014/4/25