Почему не работает без маскировки?

Вопрос или проблема

У меня есть маршрутизатор – G, настольный компьютер – D, ноутбук – L. Я хочу подключить L к интернету через D.

G на 192.168.1.1

D: enp1s0 – 192.168.1.2/24, gw G,
eno1 – 10.0.0.1/16, выступает в роли маршрутизатора для L

L:
enp1s0 – 10.0.0.2, gw 10.0.0.1. Маршрутизирующие таблицы на L:

netstat -nr
Маршрутная таблица ядра IP
Назначение     Шлюз         Маска         Флаги   MSS Окно  irtt Интерфейс
0.0.0.0         10.0.0.1        0.0.0.0         UG        0 0          0 enp1s0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 enp1s0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

Перенаправление пакетов на D включено:

sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

Однако L не подключается к интернету:

traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1)  0.346 ms  0.339 ms *
 2  10.0.0.1 (10.0.0.1)  0.370 ms !X * *

Очевидно, что пакеты L могут достигать D, но не могут пройти дальше.

Однако L подключается, когда я включаю маскарадинг на D:

firewall-cmd --zone=public --add-masquerade=yes
успех

Можете объяснить, почему L подключается к интернету только когда маскарадинг на интерфейсе D (который соединен с L напрямую) включен?

Причина, по которой вам нужен MASQUERADE, заключается в том, как работает NAT.

Рассмотрите ваш маршрутизатор, G. Он получает IP-адрес от провайдера интернет-услуг. Этот IP-адрес — это то, что все системы за маршрутизатором используют для выхода в интернет, так что все системы маскируются под этот IP-адрес. (Так работают маршрутизаторы в основных домашних настройках).

Ваш компьютер D, выступая в качестве шлюза NAT для вашего ноутбука L, подчинен тем же правилам работы интернета. В идеале у вас должно быть как минимум один внутренний IP-адрес, и когда он запрашивает ресурс, отличный от других компьютеров в этой подсети, ему требуется возможность маскировать пакеты от L как внутренний IP-адрес D, чтобы правильно маршрутизировать пакеты через G.

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

Это просто то, как работает NAT. То же самое относится к прокси и т. д.

Ответ или решение

Почему не работает без маскарадинга в сетях NAT

В данном сценарии множество компонентов сети взаимосвязаны, и их правильная конфигурация критически важна для обеспечения доступа в интернет. Рассмотрим более подробно, почему клиент, подключенный к D (ноутбук L), не может выйти в интернет без использования функции маскарадинга на D.

Основные элементы конфигурации сети

  1. Сетевые интерфейсы:

    • G (роутер): локальный адрес 192.168.1.1.
    • D (рабочий компьютер): с двумя интерфейсами:
      • enp1s0 (192.168.1.2/24) — подключение к роутеру G.
      • eno1 (10.0.0.1/16) — интерфейс, через который D выполняет маршрутизацию для L.
    • L (ноутбук): настроен с IP-адресом 10.0.0.2 и шлюзом 10.0.0.1.
  2. Маршрутизация:

    • Как видно из таблицы маршрутизации на L, он знает, что для доступа к ресурсам за пределами своей подсети (10.0.0.0/24) ему нужно использовать шлюз 10.0.0.1, то есть D.
  3. Пересылка пакетов:

    • На D включена пересылка пакетов (sysctl net.ipv4.ip_forward = 1), что позволяет D пересылать пакеты от L к G и обратно.

Проблема доступа к интернету

Когда L пытается получить доступ к интернет-адресу (например, 8.8.8.8), его пакеты достигают D, так как D выполняет функции маршрутизатора. Однако через D пакеты не могут выйти через G в интернет, и это связано с концепцией NAT (Network Address Translation) и маскарадингом.

  1. Суть NAT:

    • Когда внутренние устройства (например, L) пытаются подключиться к интернету, они отправляют свои пакеты в G, который, в свою очередь, использует свой внешний IP-адрес для общения с интернетом. Это значит, что все устройства в локальной сети выглядят за пределами сети как единое устройство — роутер G.
  2. Необходимость маскарадинга:

    • Без маскарадинга на D, когда L отправляет пакеты на URL-адрес в интернете, D не изменяет исходный IP-адрес пакета (10.0.0.2) на свой собственный IP-адрес (192.168.1.2). Вместо этого пакет уходит "как есть" и G не знает, куда приписать ответ, так как он не знает, что делать с пакетом, пришедшим с внутреннего адреса 10.0.0.2. Это приводит к тому, что G блокирует такие пакеты или игнорирует их, потому что они не соответствуют внутренним правилам NAT для выходящих соединений.
  3. Активизация маскарадинга:

    • При включении маскарадинга с помощью команды firewall-cmd --zone=public --add-masquerade=yes, все исходящие пакеты от L (и других устройств в сети) получают замененный IP-адрес — D. Теперь G видит пакет как исходящий из 192.168.1.2, и может корректно направить ответ обратно на D, который затем пересылает ответ L.

Заключение

Таким образом, использование маскарадинга необходимо для корректной работы NAT. Это стандартная практика для маршрутизации трафика из частной сети в публичное пространство. Чтобы L мог установить соединение с интернетом, пакет должен быть "замаскирован", и на выходе должен быть виден только IP-адрес роутера G. Без выполнения этой операции, интернет-трафик остаётся недоступным для устройства L.

Надеюсь, данное объяснение проясняет важность маскарадинга в сетях NAT и его роль в обеспечении бесшовной связи между локальными устройствами и глобальной сетью.

Оцените материал
Добавить комментарий

Капча загружается...