Как работает NAT / PortForwarding / TCP / IP?

11

Недавно я прочитал статью под названием « Как работает NAT» . Некоторые вещи все еще остаются неясными для меня. Я был бы благодарен, если бы кто-то мог объяснить.

Ниже приведена часть статьи о DynamicNAT, которая наиболее запутана:

Компьютер в домене-заглушке пытается подключиться к компьютеру за пределами сети, например к веб-серверу.

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

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

1) Как NAT узнает, что пакет «возвращается» на конечный компьютер?

2) Что делать, если другие компьютеры в локальной сети подключены к тому же серверу? Как NAT знает, какой пакет должен «вернуться» куда?

3) Позволяет ли модификация заголовка пакета выполнить интернет-атаку, в которой «исходный IP-адрес» заменяется на IP-адрес жертвы, а автоответчик наводнит жертву нежелательными пакетами?

Я думаю, что несколько атакующих должны быть вовлечены ...

4) Является ли StaticNAT эквивалентным перенаправлению портов всех портов?

user2449761
источник

Ответы:

10

Существует общее заблуждение между NAT ( трансляция сетевых адресов) и PAT (трансляция адресов портов), что мы чаще всего используем в наших домашних маршрутизаторах.

NAT
Предположим, у нас есть сеть со следующей топологией:

Частная сеть <-------> Маршрутизатор <-------> The_Internet

Интерфейс маршрутизатора, который подключен к Private_Network, имеет частный IP-адрес , то есть тот, который не является уникальным в The_Internet . С другой стороны, в случае NAT , маршрутизатор имеет несколько интерфейсов , подключенных к The_Internet . Каждый интерфейс имеет уникальный IP-адрес в The_Internet . Теперь давайте предположим, что Host_A и Host_B находятся в Private_Network, и они оба хотят получить доступ к Website_X в The_Internet одновременно. IP-адреса и порты Host_AПакет будет:

Исходный IP: частный IP- адрес Host_A
: порт на Host_A.
IP- адрес назначения: открытый / уникальный IP- адрес Website_X
: порт, на котором сервер Website_X прослушивает.

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

Личный IP-адрес Host_A ======= Router's_unique_IP_K

и теперь пакет, который начался с Host_A и идет на Website_X, а теперь покидает интерфейс маршрутизатора, подключенного к The_Internet, будет иметь вид:

Исходный IP-адрес: Router's_unique_IP_K
Исходный порт: порт на Host_A.
IP- адрес назначения: открытый / уникальный IP- адрес Website_X.
Порт назначения: порт, который прослушивает сервер Website_X.

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

PAT
PAT - это то, что использует подавляющее большинство наших домашних маршрутизаторов. Основным ограничением является то, что маршрутизатор имеет один уникальный IP-адрес, с которым он соединяется с The_Internet , но мы все же хотим разрешить нескольким хостам из частной сети доступ к The_Internet одновременно.
То, как мы это делаем, «похоже» на то, как это делает NAT с ключевым отличием: вместо маршрутизатора, содержащего пул IP-адресов, он содержит пул номеров портов. Точнее говоря, пакет, поступающий на маршрутизатор от Host_A в Private_Network, предназначенный для Website_X вThe_Internet будет иметь следующий формат:

Исходный IP: частный IP- адрес Host_A
: порт на Host_A.
IP- адрес назначения: открытый / уникальный IP- адрес Website_X
: порт, на котором сервер Website_X прослушивает.

Теперь маршрутизатор будет выполнять две задачи:

  1. Это изменит IP-адрес источника на уникальный публичный IP- адрес маршрутизатора И
  2. Это изменит исходный порт на порт из пула, который поддерживает маршрутизатор и еще не используется, например, Port_Z

и теперь пакет, который начался с Host_A и идет на Website_X, а теперь покидает интерфейс маршрутизатора, подключенного к The_Internet, будет иметь вид:

Исходный IP-адрес: Router's_unique_IP_K
Исходный порт: Port_Z
IP- адрес назначения: общедоступный / уникальный IP- адрес веб - сайта Website_X
: порт, который прослушивает сервер Website_X

и маршрутизатор сохранит следующее отображение:

Личный IP- адрес Host_A И порт Host_A ======= Port_Z

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

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

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

ПАТ опасно балансирует в сером межслоевом пространстве. Номера портов являются частью транспортного протокола, в то время как маршрутизаторам разрешено работать по Интернет-протоколу. Технически говоря, это то, что запрещено протоколами. Поэтому существуют, по крайней мере теоретически, потенциальные опасности: пул портов ограничен. Поэтому, если моя частная сеть состоит из 1000 хостов, и в каждом из них запущены приложения port_pool / 10, в таблице сопоставления на маршрутизаторе закончатся доступные записи, и доступ к приложениям будет закрыт.

Этот ответ значительно превысил мою предполагаемую длину, но я надеюсь, что он был полезен.

Джордж
источник
2
Пара замечаний: во-первых, вы используете термин «NAT» для обозначения того, что RFC называют «базовым NAT», и «PAT» для обозначения того, что RFC называют «NAPT». RFC обычно используют «NAT» как общий термин, охватывающий как «Basic NAT», так и «NAPT». Во-вторых, даже «Основной NAT» должен изменить заголовок TCP / UDP, потому что заголовок TCP / UDP содержит контрольную сумму, которая покрывает IP-адреса.
Питер Грин
@PeterGreen, но суть ответа точна?
lpydawa
6

Маршрутизатор знает, куда принадлежат пакеты, потому что The router saves ... an address translation table.он запоминает, какие внутренние и внешние адреса он выполнил. Таким образом, один внутренний адрес равняется одному внешнему адресу, и назначение вне Интернета не имеет значения. Это, конечно, игнорирует брандмауэр, присутствующий практически на каждом маршрутизаторе NAT, который отслеживает полные соединения:

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

NAT может изменить любую комбинацию ip и / или порта.

№ 3 - это совсем другой предмет: подмена

# 4 «Статический NAT», или «1 к 1», является только адресной картой. Итак, порт (и даже протокол: tcp, udp, gre и т. Д.) Не имеет значения.

Рики Бим
источник
2) Что делать, если другие компьютеры в локальной сети подключены к тому же серверу? Как NAT знает, какой пакет должен «вернуться» куда?
user2449761
1 и 2 один и тот же ответ: потому что он отслеживает соединения / переводы. Два внутренних хоста не будут сопоставлены одному и тому же внешнему адресу; поэтому любой пакет, поступающий на сопоставленный внешний адрес, автоматически имеет только один внутренний адресат. Если у вас есть только один внешний (публичный) адрес, то это не "NAT", а PAT (трансляция порта)
Ricky Beam