NAT / PortForwarding / TCP / IP hoạt động như thế nào?


11

Gần đây tôi đã đọc một bài báo có tên NAT hoạt động như thế nào . Một số điều vẫn chưa rõ ràng với tôi. Tôi sẽ biết ơn nếu ai đó có thể giải thích.

Dưới đây là một phần của bài viết liên quan đến DynamicNAT gây nhầm lẫn nhất:

Một máy tính trên miền còn sơ khai cố gắng kết nối với máy tính bên ngoài mạng, chẳng hạn như máy chủ Web.

Bộ định tuyến nhận gói tin từ máy tính trên miền còn sơ khai. Bộ định tuyến lưu địa chỉ IP không thể định tuyến của máy tính vào bảng dịch địa chỉ. Bộ định tuyến thay thế địa chỉ IP không thể định tuyến của máy tính bằng địa chỉ IP có sẵn đầu tiên trong số các địa chỉ IP duy nhất. Bảng dịch hiện có ánh xạ địa chỉ IP không thể định tuyến của máy tính khớp với một trong những địa chỉ IP duy nhất.

Khi một gói trở về từ máy tính đích, bộ định tuyến sẽ kiểm tra địa chỉ đích trên gói. Sau đó, nó nhìn vào bảng dịch địa chỉ để xem máy tính nào trong miền còn sơ khai của gói.

1) Làm thế nào để NAT biết rằng gói "quay lại" với máy tính đích?

2) Nếu các máy tính khác trong mạng LAN được kết nối với cùng một máy chủ thì sao? Làm thế nào để NAT biết gói nào sẽ "quay lại" ở đâu?

3) Việc sửa đổi tiêu đề gói có cho phép thực hiện một cuộc tấn công Internet, trong đó "IP nguồn" được thay thế bằng IP của nạn nhân và máy chủ trả lời sẽ tràn ngập nạn nhân với các gói không mong muốn?

Tôi đoán nhiều kẻ tấn công sẽ cần phải tham gia ...

4) TĩnhNAT có tương đương với PortForwarding của tất cả các cổng không?

Câu trả lời:


10

Có một quan niệm sai lầm chung giữa NAT (dịch địa chỉ mạng) và PAT (Dịch địa chỉ cổng), đó là những gì chúng ta chủ yếu sử dụng trong các bộ định tuyến gia đình.

NAT
Giả sử chúng ta có một mạng với cấu trúc liên kết sau:

Private_Network <-------> Bộ định tuyến <-------> The_INET

Giao diện của Bộ định tuyến được kết nối với Private_Networkmột địa chỉ IP riêng , tức là một địa chỉ không phải là duy nhất trong The_INET . Mặt khác, trong trường hợp NAT , Bộ định tuyếnnhiều giao diện được kết nối với The_INET . Mỗi giao diện có một địa chỉ IP duy nhất trong The_INET . Bây giờ, hãy giả sử rằng Host_AHost_B nằm trong Private_Network và cả hai đều muốn truy cập Website_X trong The_I Internet cùng một lúc. IP và cổng của Host_AGói của sẽ là:

IP nguồn: IP riêng của Host_A
Cổng nguồn: Cổng trên Host_A
IP đích: Cổng đích IP công cộng / duy nhất của Website_X
: Cổng mà máy chủ của Website_X đang lắng nghe

và theo cách tương tự cho một gói đến từ Host_B .
Nếu IP nguồn không thay đổi, thì Website_X sẽ trả lời địa chỉ IP là riêng tư, nghĩa là không phải là duy nhất và do đó gói sẽ không bao giờ có thể tìm lại được. Để giải quyết vấn đề đó, Bộ định tuyến kiểm tra xem một trong những địa chỉ IP duy nhất của anh ta được kết nối với The_INET không được sử dụng. Nếu đó là trường hợp, nó thực hiện ánh xạ sau:

Host_A 's tin IP ======= Router's_unique_IP_K

và bây giờ gói bắt đầu từ Host_A đi đến Website_X và hiện rời khỏi giao diện của Bộ định tuyến được kết nối với The_INET sẽ có dạng:

IP nguồn: Router's_unique_IP_K
Cảng Nguồn: Một cổng trên Host_A
Destination IP: Website_X 's công cộng / IP duy nhất
Destination Port: Một cổng nơi Website_X ' máy chủ s được nghe

Do đó, bạn có thể hiểu rằng có một liên kết một-một từ IP riêng sang IP công cộng. Do đó, khi một gói đến từ Website_X đến Bộ định tuyến , liên kết này được kiểm tra và địa chỉ IP đích được đổi lại thành địa chỉ riêng và được gửi thành công đến đúng máy chủ.
Như bạn có thể thấy, phương pháp này khá đơn giản, nhưng nó có một nhược điểm lớn: mỗi máy chủ riêng phải có một địa chỉ IP duy nhất, rất tốn kém, do đó chúng tôi chọn có ít địa chỉ IP duy nhất hơn máy chủ trong mạng riêng. Do đó, nếu tất cả các máy chủ riêng cố gắng truy cập The_INET cùng một lúc, chỉ một tập hợp con của chúng, bằng với số lượng địa chỉ IP công cộng có sẵn mà Bộ định tuyếnđã, sẽ có quyền truy cập và phần còn lại sẽ bị từ chối.
Để chống lại việc chúng tôi tạo ra PAT .

PAT
PAT là những gì mà phần lớn các bộ định tuyến gia đình của chúng tôi đang sử dụng. Hạn chế cơ bản là Bộ định tuyến có một địa chỉ IP duy nhất mà nó kết nối với The_INET , nhưng chúng tôi vẫn muốn cho phép nhiều máy chủ từ mạng riêng truy cập vào The_I Internet cùng một lúc.
Cách chúng tôi làm điều đó "tương tự" với cách NAT thực hiện với một điểm khác biệt chính: thay vì Bộ định tuyến giữ một nhóm địa chỉ IP, nó giữ một nhóm số cổng. Chính xác hơn, một gói đến Bộ định tuyến từ Host_A trong Private_Network được chuyển đến Website_X trongThe_INET sẽ có định dạng sau:

IP nguồn: IP riêng của Host_A
Cổng nguồn: Cổng trên Host_A
IP đích: Cổng đích IP công cộng / duy nhất của Website_X
: Cổng mà máy chủ của Website_X đang lắng nghe

Bây giờ Bộ định tuyến sẽ thực hiện hai nhiệm vụ:

  1. Nó sẽ thay đổi IP nguồn thành IP công cộng duy nhất của Bộ định tuyến
  2. Nó sẽ thay đổi Cổng nguồn thành một cổng từ một nhóm mà Bộ định tuyến đang duy trì và chưa được sử dụng, ví dụ: Port_Z

và bây giờ gói bắt đầu từ Host_A đi đến Website_X và hiện rời khỏi giao diện của Bộ định tuyến được kết nối với The_INET sẽ có dạng:

IP nguồn: Router's_unique_IP_K
Cảng Nguồn: Port_Z
Destination IP: Website_X 's công cộng / IP duy nhất
Destination Port: Một cổng nơi Website_X ' máy chủ s được nghe

Bộ định tuyến sẽ giữ ánh xạ sau:

IP riêng của Host_A một cổng trên Host_A ======= Port_Z

Tại sao điều này làm việc?
Bây giờ khi một gói trở lại, Bộ định tuyến chỉ cần kiểm tra số cổng đích và thay đổi địa chỉ IP đích và số cổng đích theo ánh xạ được đề cập trước và gói được gửi thành công.

Nếu tôi chạy nhiều ứng dụng trên cùng một Máy chủ thì sao?
Các ứng dụng khác nhau sẽ có các cổng khác nhau, theo định nghĩa, do đó chúng sẽ được ánh xạ tới một cổng khác với Bộ định tuyến .

Điều gì xảy ra nếu nhiều Máy chủ cố gắng truy cập The_INET cùng một lúc và tất cả chúng đều sử dụng cùng một ứng dụng?
Theo định nghĩa, các Máy chủ khác nhau sẽ có các địa chỉ IP riêng khác nhau, do đó, chúng sẽ được ánh xạ tới một cổng khác với Bộ định tuyến .

PAT là cân bằng nguy hiểm trong một không gian màu xám của lớp chéo. Số cổng là một phần của Giao thức vận chuyển trong khi Bộ định tuyến được phép hoạt động theo Giao thức Internet. Vì vậy, về mặt kỹ thuật là những thứ không được các giao thức cho phép. Do đó, ít nhất là về mặt lý thuyết, những nguy cơ tiềm ẩn: nhóm cảng bị hạn chế. Do đó, nếu mạng riêng của tôi bao gồm 1000 Máy chủ lưu trữ và mỗi máy chủ đang chạy các ứng dụng port_pool / 10, bảng ánh xạ tại bộ định tuyến sẽ hết các mục có sẵn và quyền truy cập vào các ứng dụng sẽ bị từ chối.

Câu trả lời này vượt quá độ dài dự định của tôi, nhưng tôi hy vọng nó hữu ích.


2
Một vài lưu ý, Đầu tiên, bạn đang sử dụng thuật ngữ "NAT" để giới thiệu lại những gì RFC gọi là "NAT cơ bản" và "PAT" để giới thiệu lại những gì RFC gọi là "NAPT". Các RFC thường sử dụng "NAT" như một thuật ngữ bao gồm cả "NAT cơ bản" và "NAPT". Thứ hai, ngay cả "NAT cơ bản" cũng phải sửa đổi tiêu đề TCP / UDP vì tiêu đề TCP / UDP chứa một tổng kiểm tra bao gồm các địa chỉ IP.
Peter Green

@PeterGreen nhưng ý chính của câu trả lời có chính xác không?
lpydawa

6

Các bộ định tuyến biết nơi các gói thuộc về vì The router saves ... an address translation table.nó nhớ những gì bản dịch địa chỉ bên trong bên ngoài nó đã thực hiện. Như vậy, một địa chỉ bên trong bằng một địa chỉ bên ngoài và điểm đến trên internet là không liên quan. Tất nhiên, điều này bỏ qua tường lửa có trong thực tế mọi bộ định tuyến NAT, theo dõi các kết nối đầy đủ:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT có thể thay đổi bất kỳ sự kết hợp nào của ip và / hoặc cổng.

# 3 là bất kỳ chủ đề hoàn toàn khác nhau: giả mạo

# 4 "NAT tĩnh" hoặc "1 trên 1" là bản đồ chỉ có địa chỉ. Vì vậy, cổng (và thậm chí giao thức: tcp, udp, gre, v.v.) là không liên quan.


2) Nếu các máy tính khác trong mạng LAN được kết nối với cùng một máy chủ thì sao? Làm thế nào để NAT biết gói nào sẽ "quay lại" ở đâu?
dùng2449761

1 & 2 là cùng một câu trả lời: bởi vì đó là theo dõi kết nối / bản dịch. Hai máy chủ bên trong sẽ không được ánh xạ tới cùng một địa chỉ bên ngoài; vì vậy, bất kỳ gói tin nào đến địa chỉ bên ngoài được ánh xạ, tự động chỉ có một đích bên trong. Nếu bạn chỉ có một địa chỉ bên ngoài (công khai), thì đó không phải là "NAT", mà là PAT (bản dịch cổng)
Ricky Beam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.