1

Основные вопросы:

  1. На каком сетевом уровне расположены данные, позволяющие шлюзу (использующему NAT) узнать, для какого компьютера предназначен пакет?

  2. Может кто-нибудь объяснить, как этот процесс работает? Объясняя этот процесс, можно ли было бы ответить на следующие вопросы / подозрения: я предполагаю, что преобразование данных (которое определяет, какие входящие пакеты ПК должны быть отправлены в сети) является уникальным для каждого шлюзового устройства? (Я думаю, что в противном случае вы могли бы узнать из-за пределов сети, для какого компьютера в сети предназначен пакет, но опять же, возможно, это не обязательно будет проблемой безопасности?)

3 ответа3

2

Для любого соединения TCP или UDP существует четыре компонента, которые составляют адресацию пакета. IP-адрес источника, IP-адрес назначения, порт источника и порт назначения.

IP-адрес назначения - это сервер, к которому вы подключаетесь, а порт назначения - это порт, к которому вы подключаетесь, например, TCP-порт 80 для подключения http. Порт источника является "эфемерным", что означает, что он выбран из диапазона и не имеет конкретного значения. Диапазон между 1024-65535. Выбор порта зависит от ОС, но не имеет большого значения, какой порт выбран.

IP-адрес источника - это компьютер, с которого осуществляется соединение. Итак, предположим, что соединение 222.222.222.222:80, и у нас есть два ПК, подключенных к этому IP-адресу, 10.1.1.1 и 10.1.1.2.

Таким образом, по мере появления пакетов они могут быть адресованы следующим образом:

10.1.1.1:3434 -> 222.222.222.222:80
10.1.1.2:5455 -> 222.222.222.222:80

Ответные пакеты меняются местами, например так:

222.222.222.222:80 -> 10.1.1.1:3434 
222.222.222.222:80 -> 10.1.1.2:5455 

Таким образом, мы можем видеть, что порт источника - это то, что позволяет возвращаемому пакету добраться до источника.

Когда мы проходим через маршрутизатор NAT, IP-адрес источника изменяется на IP-адрес маршрутизатора - в данном случае 111.111.111.111. Итак, пакеты выглядят так:

111.111.111.111:3434 -> 222.222.222.222:80
111.111.111.111:5455 -> 222.222.222.222:80

Таким образом, при условии, что маршрутизатор отслеживает порт источника соединения, он знает, что ответные пакеты на порт 3434 должны быть отправлены на 10.1.1.1. Это таблица трансляции NAT.

Но что, если оба наших компьютера выбрали один и тот же порт источника?

10.1.1.1:3434 -> 222.222.222.222:80
10.1.1.2:3434 -> 222.222.222.222:80

NAT-пакеты будут выглядеть так:

111.111.111.111:3434 -> 222.222.222.222:80
111.111.111.111:3434 -> 222.222.222.222:80

Таким образом, ответный пакет на 3434, предназначенный для 10.1.1.1, неотличим от пакета, предназначенного для 10.1.1.2.

Чтобы обойти это, маршрутизатор будет изменять не только IP-адрес источника, но и порт источника. Затем маршрутизатор может гарантировать, что каждое исходящее соединение имеет уникальный исходный порт, и сохраняет таблицу трансляции, чтобы изменить как IP-адрес, так и порт ответных пакетов, чтобы они отправлялись правильному отправителю.

Чтобы ответить на ваш секретный вопрос, реально, маршрутизатору нужно только изменить порт источника в случае коллизии, однако большинство из них будет изменять порт источника в каждом случае и выбирать случайный порт источника. Это затрудняет прогнозирование того, каким может быть следующий выбранный исходный порт, и злоумышленнику становится труднее вводить пакеты в последовательность.

1

Обычно в домашнем маршрутизаторе NAT работает на уровне 4. В TCP и некоторых соединениях UDP маршрутизатор просматривает порты источника и назначения, чтобы создать таблицу преобразования NAT, чтобы сопоставить реальный IP-адрес и порт с натальным IP-адресом и портом. Это называется перегрузкой NAT или PAT(трансляция адреса порта). В некоторых протоколах, таких как DNS, маршрутизатор просматривает пакет и использует данные прикладного уровня (запрашиваемое имя домена), чтобы определить, на какой адрес отправлять ответ DNS.
Это пример таблицы трансляции NAT, взятой из Cisco ASA:

PAT Global 216.1.250.22(400) Local 172.16.1.102(123)
PAT Global 216.1.250.22(9370) Local 172.16.1.107(13286)
PAT Global 216.1.250.22(45935) Local 172.16.1.107(36159)
PAT Global 216.1.250.22(60152) Local 172.16.1.107(10736)
PAT Global 216.1.250.22(322) Local 172.16.1.107(123)
PAT Global 216.1.250.22(48642) Local 172.16.1.44(59136)
PAT Global 216.1.250.22(24719) Local 172.16.1.44(59764)
PAT Global 216.1.250.22(17045) Local 172.16.1.44(57830)
PAT Global 216.1.250.22(44616) Local 172.16.1.44(59100)
PAT Global 216.1.250.22(19426) Local 172.16.1.44(57632)
PAT Global 216.1.250.22(38447) Local 172.16.1.44(58904)
PAT Global 216.1.250.22(6053) Local 172.16.1.44(59958)
PAT Global 216.1.250.22(49473) Local 172.16.1.44(59323)
PAT Global 216.1.250.22(55193) Local 172.16.1.44(58597)
PAT Global 216.1.250.22(38978) Local 172.16.1.44(59170)
1

В основном для исходящих соединений маршрутизатор использует "таблицу трансляции NAT", которая генерируется динамически. Например, после запуска исходящего соединения в эту таблицу добавляется соответствующая запись (в которой указан внутренний IP-адрес компьютера, используемый исходящий порт на маршрутизаторе, целевой IP-порт и т.д.). Естественно, эта таблица хранится в памяти маршрутизатора и никуда не отправляется, поэтому уровни OSI не применяются. Как только поступает входящий пакет, маршрутизатор обращается к этой таблице, чтобы определить, как обрабатывать его дальше.

Для входящих подключений маршрутизатор должен использовать предварительно заданную конфигурацию, которая подключает службу на определенном внутреннем компьютере к порту (например, NAT для всех входящих подключений к порту TCP 80 к внутреннему порту ABCD 8080 компьютера и т.д.) Опять же, эта информация никогда не отправляется в сети явным образом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .