У меня есть эта конфигурация сети:

- Local router 10.0.0.1, public IP 1.2.3.4
  forwarding port 1002 to 10.0.0.2
  forwarding port 1003 to 10.0.0.3
- Local host 10.0.0.2, server on port 1002, no default route
- Local host 10.0.0.3, server on port 1003, default route via 10.0.0.1
- Remote host public IP 5.6.7.8

Брандмауэры не настроены.

Я могу подключиться с 10.0.0.3 до 10.0.0.2:1002 без проблем.

С 5.6.7.8 я подключаюсь к 1.2.3.4:1003 без проблем, но 1.2.3.4:1002 не отвечает. Однако, если я добавлю маршрут по умолчанию через 10.0.0.1 на хосте 10.0.0.2, соединение начнет работать.

Таким образом, подключение к 10.0.0.2:1002 всегда работает в локальной сети, но работает с удаленных хостов, только если включен маршрут по умолчанию.

Я не понимаю разницы: с точки зрения 10.0.0.2, почему и входящий упакованный отличается, когда приходит с другого локального IP или когда он пересылается?

1 ответ1

1

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

Объяснение: Предполагается, что 10.0.0.2 и 10.0.0.3 находятся в одной подсети (определяется маской подсети).

Пример таблицы маршрутов в 10.0.0.2 (ROUTE PRINT в Windows)

Network Destination        Netmask          Gateway       Interface
          0.0.0.0          0.0.0.0         10.0.0.1        10.0.0.2
         10.0.0.0    255.255.255.0         On-link         10.0.0.2
(added by me)10.0.2.0    255.255.255.0         10.0.0.99       10.0.0.2  

Начиная с 10.0.0.2, машина .3 находится в сети назначения «10.0.0.0». Это «On-Link», то есть 10.0.0.2 и 10.0.0.3 находятся на одной и той же логической ссылке. Таким образом, пакеты в .2 и .3 не нужно маршрутизировать. Они отправляют их прямо друг другу. Нет маршрутизации не участвует.

Когда .3 или .2 пытаются отправить пакет обратно на 5.6.7.8 в ответ на запрос с 5.6.7.8 (будь то переадресация NAT или фактическая маршрутизация), потому что 5.6.7.8 не находится ни непосредственно на линии, ни в других маршрутах в таблице маршрутов он находится под сетевым адресатом «0.0.0.0» и должен знать, куда отправить пакет для маршрутизации в конечный пункт назначения - в данном случае это маршрут по умолчанию.

В приведенной выше таблице маршрутов, если 10.0.0.2 пытается отправить на 10.0.2.50, он будет маршрутизировать пакет через другой маршрутизатор на 10.0.0.99, потому что этот маршрут указан в таблице маршрутов. Если этот маршрут не был указан, он вернется к маршруту по умолчанию.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .