Как работает отражение NAT (NAT loopback)?

Чтобы преобразовать удаленные абсолютные (начиная с / ) символические ссылки относительно точки монтирования sshfs , используйте follow_symlinks Параметр :

sshfs -o follow_symlinks ...

Параметр transform_symlinks ничего не делает для меня, см. этот выпуск .

5
09.05.2016, 19:53
2 ответа

Для правильной работы NAT как пакеты от клиента к серверу, так и пакеты от сервера к клиенту должны пройти через NAT.

Обратите внимание, что таблица NAT в iptables используется только для первого пакета соединения. Более поздние пакеты, относящиеся к соединению, обрабатываются с использованием внутренних таблиц сопоставления, установленных при трансляции первого пакета.

iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200

При наличии этого правила происходит следующее.

  • Клиент создает начальный пакет (tcp syn) и направляет его на общедоступный IP-адрес. Клиент ожидает получить ответ на этот пакет с заменой IP / порта источника и IP / порта назначения.
  • Поскольку клиент не имеет конкретных записей в своей таблице маршрутизации, он отправляет его на свой шлюз по умолчанию. Шлюзом по умолчанию является блок NAT.
  • Блок NAT принимает исходный пакет, изменяет IP-адрес назначения, устанавливает запись в таблице сопоставления, ищет новое место назначения в своей таблице маршрутизации и отправляет пакеты на сервер. Исходный адрес остается неизменным.
  • Сервер получает начальный пакет и формирует ответ (синхронное подтверждение). В ответе исходный IP / порт заменяется на целевой IP / порт. Поскольку исходный IP-адрес входящего пакета не изменился, IP-адрес назначения ответа - это IP-адрес клиента.
  • Сервер ищет IP-адрес в своей таблице маршрутизации и отправляет пакет обратно клиенту.
  • Клиент отклоняет пакет, потому что адрес источника не совпадает с ожидаемым.
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1

Как только мы добавляем это правило, последовательность событий меняется.

  • Клиент создает начальный пакет (tcp-синхронизацию) и направляет его на общедоступный IP-адрес. Клиент ожидает получить ответ на этот пакет с заменой IP / порта источника и IP / порта назначения.
  • Поскольку клиент не имеет конкретных записей в своих таблицах маршрутизации, он отправляет его на свой шлюз по умолчанию. Шлюзом по умолчанию является блок NAT.
  • Блок NAT получает исходный пакет, следуя записям в таблице NAT, он изменяет IP-адрес назначения, IP-адрес источника и, возможно, порт источника (порт источника изменяется только при необходимости для устранения неоднозначности), устанавливает запись в таблице сопоставления, выполняет поиск новый пункт назначения в своей таблице маршрутизации и отправляет пакеты на сервер.
  • Сервер получает начальный пакет и формирует ответ (синхронное подтверждение). В ответе исходный IP / порт заменяется на целевой IP / порт. Поскольку IP-адрес источника входящего пакета был изменен блоком NAT, IP-адрес назначения пакета является IP-адресом блока NAT.
  • Сервер ищет IP-адрес в своей таблице маршрутизации и отправляет пакет обратно в блок NAT.
  • Блок NAT ищет сведения о пакете (исходный IP-адрес, исходный порт, целевой IP-адрес, порт назначения) в своих таблицах сопоставления NAT и выполняет обратное преобразование.Это изменяет исходный IP-адрес на общедоступный IP-адрес, исходный порт на 80, целевой IP-адрес на IP-адрес клиента и порт назначения обратно на любой исходный порт, который использовал клиент.
  • Блок NAT ищет новый IP-адрес назначения в своей таблице маршрутизации и отправляет пакет обратно клиенту.
  • Клиент принимает пакет.
  • Связь продолжается с NAT, транслирующим пакеты туда и обратно.
19
27.01.2020, 20:32

Похоже, это заставляет обратный трафик также проходить через openwrt. Переписав исходный адрес, который увидит веб-сервер.

Если веб-сервер ответил напрямую клиенту, адрес источника для тех пакетов все равно будет принадлежать веб-серверу. Но клиент пытается поговорить с IP-адресом openwrt. Следовательно, ответные пакеты будут отброшены.

В первом случае такое принуждение не требуется, потому что маршрут от веб-сервера к клиентам через Интернет уже проходит через окно openwrt.

0
27.01.2020, 20:32

Теги

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