Трансляция сетевых адресов

Как сказано выше, шлюз - это устройство с двумя адресами: по одному в каждой сети, к которой оно подключено.

Итак, из вашей LAN в WAN выходит только один адрес. Что произойдёт, если в LAN 5, 10 или даже 100 компьютеров одновременно пытаются использовать шлюз для выхода в Интернет?

Здесь на помощь приходит трансляция сетевых адресов (Network Address Translation, NAT). При NAT все компьютеры LAN «прячутся» за шлюзом:

  • Хост в LAN устанавливает исходящее соединение с каким-либо узлом в WAN.
  • Пакеты сначала поступают на шлюз (на пути наружу).
  • Шлюз затем изменяет пакеты так, чтобы они выглядели так, будто:
  • шлюз сам их создал;
  • пакеты исходят из определённого порта шлюза (не обязательно того, с которого они изначально пришли). Этот порт сопоставлен с хостом LAN, который изначально отправил пакет. Теперь шлюз знает, что пакеты, приходящие на порт 30189 (например), нужно переслать внутри сети на хост 192.168.0.17 и на порт 80 (например).
  • Шлюз отправляет пакеты в путь.
  • Пакеты доходят до удалённого хоста-получателя.
  • Удалённый хост отвечает и направляет ответ на IP-адрес и порт маршрутизатора, который раньше отправил пакеты.
  • Маршрутизатор получает ответ (на порт 30189 в нашем примере), изменяет пакет и пересылает его внутри сети хосту, который изначально инициировал исходящее соединение.

an009_nat

note_glossary-termДвоеточие (:) в конце IP-адреса обозначает порт этого адреса. Так, запись 64.233.187.107:80 означает порт 80 IP-адреса 64.233.187.107.

Много хостов может инициировать исходящие соединения

Главное преимущество NAT - сокращение количества «настоящих» IP-адресов, которые нужны. Сотни компьютеров могут обмениваться данными с разными хостами в Интернете, используя всего один «настоящий» IP-адрес. Это даёт значительную экономию средств.

Ниже показаны четыре рабочие станции в одной LAN, которые одновременно обмениваются данными с тремя разными веб-серверами в WAN через один «настоящий» IP-адрес (адрес маршрутизатора):

an009_nat_1

Ни один хост не может принимать входящее соединение

Главный недостаток NAT - невозможность инициировать входящие соединения. Предположим, внутри сети есть хост и вы хотите установить с ним соединение извне (от какого-либо хоста в WAN). Маршрутизатор не будет знать, куда направить входящее соединение. Ни один внутренний хост не пытался установить исходящее соединение с этим удалённым хостом, поэтому ни один внутренний хост не сопоставлен с этим портом маршрутизатора и не ожидает соединения от этого внешнего хоста. Когда пакет приходит на маршрутизатор, он никуда не попадает (отбрасывается):

an009_nat_2



Совет
Подробнее о NAT, включая другие реализации, см. статью Википедии «Network address translation».