NAT и таблицы NAT

566
calveeen

Я пытаюсь понять, как работают таблицы NAT и NAT, но не могу найти ответы в Интернете. У меня есть несколько вопросов относительно NAT. Предположим, TCP соединение установлено.

Предположим, что маршрутизатор имеет WAN 201.22.14.15

1) Допустим, устройство с IP 192.168.1.1 хочет подключиться к серверу с IP 137.132.1.15. Сначала устройство инкапсулирует данные в дейтаграмму IP с исходным IP-адресом как 192.168.1.1 и dest IP-адресом как 137.132.1.15?

2) После чего дейтаграмма отправляется на маршрутизатор, где происходит NAT. Предполагая, что это первый пакет, отправляемый в частной сети, таблица NAT изначально пуста?

3) Теперь в таблице есть запись, которая отображает 192.168.1.1:1234 на 201.22.14.15:2345. ?

192.168.1.1:1234 -> 201.22.14.15:2345 

IP-датаграмма перед отправкой повторно упаковывается с соответствующим адресом маршрутизатора (201.22.14.15) и номером порта 2345. Есть ли отдельное TCP соединение от роутера до сервера? Или запись назначена только виртуальному номеру порта?

4) Данные возвращаются с сервера 137.132.1.15 с IP-адресом dst 201.22.14.15 и портом dest 2345. Маршрутизатор просматривает таблицу и обнаруживает, что 201.22.14.15:2345 сопоставлен с 192.168.1.1:1234. Таким образом, он перепаковывает IP-датаграмму с адресом src 137.132.1.15:80 и адресом dst 192.168.1.1:1234.

Я не уверен, что шаги, которые я выделил, верны.

5
Вы описали это в значительной степени, как это происходит. Если вы не уверены, существует ли отдельное TCP-соединение, ответ - нет, все пакеты SYN & ACK, управляющие TCP, перенаправляются в исходный источник соединения точно так же, как вы описали. Radhil 5 лет назад 3

2 ответа на вопрос

2
Jorge Valentini

Я постараюсь быть простым в объяснении. У вас есть в основном два типа NAT:

  • Исходный NAT : обычно известный как «маскарад», он маскирует ваш локальный IP-адрес под его адрес, чтобы он мог связываться с хостами в сетях, которые не знают маршрут к вашей локальной сети.
  • NAT назначения : обычно известный как «переадресация портов», он преобразует сетевой адрес назначения в локальный адрес в чужой сети.

Я думаю, что вы описываете источник NAT, ваше общение из локальной сети с сервером в Интернете. И что происходит, как вы сказали, но позвольте мне немного перефразировать:

  1. Вы генерируете соединение из локальной сети в Интернет: 192.168.1.1 -> 137.132.1.15:PORTваш исходный порт является случайным.
  2. Исходя из вашей таблицы маршрутизации, на локальном хосте с IP 192.168.1.1 ваш пакет перейдет на следующий переход, обычно это шлюз по умолчанию для интернет-адресов.
  3. когда ваш пакет прибывает на устройство с настроенным NAT источника, он преобразует адрес источника, маскируя источник пакета и преобразуя его в 201.22.14.15 -> 137.132.1.15:PORT. И он будет помнить, что это соединение с вашего локального IP 192.168.1.1.
  4. Предположим, что, как и в большинстве случаев, 137.132.1.15 - это брандмауэр, который будет преобразовывать порт назначения PORT в чужую локальную сеть, например 10.0.0.1, и предположим, что это веб-сервер, поэтому он будет транслировать пакет. как 201.22.14.15 -> 10.0.0.1:80.
  5. Затем сервер на 10.0.0.1 получит запрос от 201.22.14.15, и при возврате то же самое произойдет в другом направлении, на основе своей таблицы маршрутизации он вернется к 201.22.14.15.
  6. Маршрутизатор / межсетевой экран должен будет маскироваться по-другому, изменяя адреса пакетов как 137.132.1.15 -> 201.22.14.15.
  7. Ваш маршрутизатор на 201.22.14.15 получит пакет, сможет обнаружить, что связано с потоком, генерируемым 192.168.1.1, и вернет ответ. 192.168.1.1 увидит пакет из 137.132.1.15, так как 10.0.0.1 был замаскирован.

Надеюсь, что это помогает, и это не вызывает больше путаницы.

Примечание

TCP-соединения не организованы в дейтаграммы, они являются потоками. Дейтаграммы являются UDP.

Для ясности вы можете изменить слово переводить, чтобы переписать. (Строго говоря, транзакции не происходят, пакеты переписываются на основе отслеживания в таблице поиска). Ваш ответ, конечно, в противном случае правильный. davidgo 5 лет назад 1
Привет @davidgo спасибо за ваш комментарий, и позвольте мне уважительно не согласен. На самом деле это перевод (не транзакция, как вы хорошо сказали, но я не сказал транзакция), более того, «перевод» - это буква T в NAT. Я бы сказал, что переписать это просто еще один способ сказать это Jorge Valentini 5 лет назад 0
Привет @JorgeValentini от шага 2 до шага 3, когда вы говорите, что ваш пакет прибывает на устройство, которое настроило Source NAT, это шлюз-маршрутизатор по умолчанию, о котором вы говорите? Таким образом, может быть несколько NAT, когда ваше домашнее устройство хочет подключиться к серверу в Интернете, потому что я думал, что для вашей домашней сети был только один перевод NAT? Эти устройства настраивают маршрутизаторы Source NAT? calveeen 5 лет назад 0
Привет @ calveen, обычно в домашней среде NAT выполняется вашим маршрутизатором / модемом ISP, в то время как строго говоря, NAT является экземпляром брандмауэра, обычно эти домашние устройства делают все и являются также шлюзом по умолчанию для сети, поэтому он размыт , Отвечая на ваш вопрос, в более сложной сети может быть один или несколько NAT, типичным примером двойного NAT может быть DMZ, но я думаю, что вы идете в гораздо более простую среду, верно? Поскольку мне было не ясно, насколько это было просто / сложно, я не хотел указывать, какое устройство выполняет NAT Jorge Valentini 5 лет назад 0
1
dirkt

Следующее относится к ядру Linux, но я предполагаю, что MacOS и Windows работают аналогично.

То, что вы называете «таблицей NAT», называется трекером соединения или conntrackдля краткости. Есть инструменты, которые вы можете использовать для проверки этой таблицы.

1) да.

2) Да. Если быть точным, таблица отслеживания соединений не имеет записи для этого соединения, она не должна быть пустой. Соединение характеризуется адресом источника, портом источника, адресом назначения и портом назначения; номер порта, к которому он нужен, является дополнительной записью.

3a) Да, где 2345 - это порт, который еще не используется. IIRC по умолчанию использует исходный порт источника. Запись трекера соединения сделана, потому что есть iptablesправило с целью SNAT (исходный NAT).

б) Нет, это соединение не отслеживается как обычное TCP-соединение. Трекер соединений netfilter и таблица состояний соединений TCP совершенно разные.

4) Да. Обратите внимание, что не должно быть обратного iptablesправила; это смущает многих людей.

Пожалуйста, подумайте о цитировании запросов ОП в вашем посте, чтобы ответить на них, чтобы их было легче понять. (Это не обязательно, просто лучше.) Twisty Impersonator 5 лет назад 1
«Есть инструменты, которые вы можете использовать для проверки этой таблицы». Существуют ли эти инструменты для большинства потребительских маршрутизаторов, или вы говорите о чем-то специфичном для Linux `netfilter`? Barmar 5 лет назад 0
@ Бармар: Хорошо, оба: инструменты специфичны для сетевого фильтра Linux, но подавляющее большинство потребительских маршрутизаторов являются встроенными машинами Linux, так что вы можете кросс-компилировать инструменты / модули или устанавливать прошивку, которая уже имеет их. dirkt 5 лет назад 0

Похожие вопросы