Как работает NAT за NAT (NAT маршрутизатора и NAT интернет-провайдера)?

Как работает NAT за NAT (NAT маршрутизатора и NAT интернет-провайдера)?

Я использую модем-маршрутизатор и в некоторых случаях также нахожусь за NAT провайдера. Как работает NAT (NAT маршрутизатора) за NAT (NAT провайдера)?

Насколько мне известно, NAT работает следующим образом: компьютеры A и B получают внутренние IP-адреса internal1и internal2. Затем NAT назначает им порты на том же IP-адресе, так что при публичном доступе они оказываются за someIP:1и someIP:2.

Но если это сделает маршрутизатор, а затем это сделает провайдер, IP-адреса будут иметь вид someIP:1:100, someIP:2:101что невозможно, поскольку порты не имеют портов второго уровня.

Так как же это работает?

решение1

Давайте рассмотрим простой пример.

В "обычной" домашней сети NAT 192.168.1.2:11223сопоставляется с парой "публичный" адрес:порт 203.0.113.5:22334. Таким образом, конечный хост назначения думает, что получил пакет 203.0.113.5:22334и не имеет сведений о "частной" сети за ним.


Теперь давайте расширим это до сети с двойным NAT, с двумя уровнями NAT.

На ближайшем к хосту маршрутизаторе 192.168.1.2:11223сопоставляется с парой "публичный" адрес:порт 10.0.0.8:22334. Теперь 10.0.0.8это все еще частный адрес, просто в другой сети. Что касается этого маршрутизатора, его работа выполнена.

На следующем маршрутизаторе, который служит шлюзом для локальной сети, в которой находится первый маршрутизатор, 10.0.0.8:22334он сопоставляется с другой парой адрес:порт на своем собственном публичном интерфейсе, 203.0.113.5:12345.

Конечный хост назначения думает, что получил пакет от 203.0.113.5:12345. Он, как и весь публичный интернет, не имеет сведений ни о какой из 10.0.0.0/8или 192.168.0.0/16подсетей, которые были здесь задействованы. Он отправит ответ обратно на этот адрес, который должен быть транслирован обратно каждым маршрутизатором по очереди.

                              Different address:port pairs for
                              thesame endpoint in one connection!
+------------------------+    -----------------------------------
|Host                    |
|192.168.1.2             |
+------------------------+    192.168.1.2:11223 <--- Host sees
                                                     this pair

+------------------------+    192.168.1.2:11223 <--- Router 1 sees
|Router 1                |                           req from this
|internal 192.168.1.1/24 |
|external 10.0.0.8       |
+------------------------+    10.0.0.8:22334 <------ Router 1 sends
                                                     req from this

+------------------------+    10.0.0.8:22334 <------ Router 2 sees
|Router 2                |                           req from this
|internal 10.0.0.1/24    |
|external 203.0.113.5    |
+------------------------+    203.0.113.5:12345 <--- Router 2 sends
                                                     req from this

+------------------------+    203.0.113.5:12345 <--- Public internet
|Public internet         |                           sees this pair
+------------------------+

CGN ("ISP NAT") работает примерно так же. Единственное отличие в том, что он не дает своим внутренним хостам частный адрес RFC1918, поскольку он может конфликтовать с корпоративными сетями. Вместо этого адрес из диапазона 100.64.0.0/10(RFC6598) распределяется "Маршрутизатором 2" на схеме выше. Насколько видит собственный маршрутизатор клиента, его "публичный" адрес из этого диапазона - но фактически недоступен в публичном Интернете!

решение2

Насколько мне известно, NAT работает следующим образом: компьютеры A и B получают внутренние IP-адреса internal1 и internal2. Затем NAT назначает им порты на том же IP-адресе, так что для публичного просмотра они находятся за someIP:1 и someIP:2.

Количество портовнечасть адреса хоста – на уровне IP нет такого понятия, как порты, независимо от того, используется NAT или нет. IP-адрес хоста всегдатолькоадрес; у него нет портов «второго уровня», и у него также нет портов «первого уровня». [1]

Вместо этого порты принадлежат каждому отдельному TCP/UDP-серверу.связькоторые хост создает поверх IP. (Ну, строго говоря, они являются частью каждого пакета, и все пакеты в одном соединении используют одни и те же порты.)

Итак, когда вы видите адрес, написанный как 12.34.56.78:123, все дело в том,нетIP-адрес хоста – это конечная точка TCP-соединения для порта 123вхост, IP-адрес которого по-прежнему просто 12.34.56.78.

Эти портыне добавленыпо NAT – они всегда были там; каждый пакет TCP или UDP имеет ровно два порта (один порт «источника» и один порт «назначения»). Маршрутизатор, который выполняет NAT, просто транслирует их в разные значения. Независимо от того, сколько у вас уровней NAT, этот пакет все равно будет иметь два порта.


[1] Это означает, что когда у вас есть два хоста, NAT-защищенных одним публичным адресом, они фактически неразличимы для уровня IP – когда IP-пакет извне отправляется, someIPу него нет возможности указать, какой хост ему нужен; маршрутизатор NAT должен вывести это из уровня TCP. Вот почему вам нужно настроить правила «переадресации портов», чтобы принимать входящие соединения.

Связанный контент