Почему для доступа к входящим портам необходим маршрут по умолчанию

287
Wizard79

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

- 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 или когда он пересылается?

0
Где вы добавили маршрут по умолчанию? djsmiley2k 6 лет назад 0
Разве 10.0.0.2 не нужно знать, как отправлять пакеты обратно на 5.6.7.8? Это должно было бы знать маршрут по умолчанию. У 10.0.0.3 установлен маршрут по умолчанию? Я полагаю, что это должно было бы. Dawn Benton 6 лет назад 0
@ djsmiley2k: написано в вопросе: _добавить маршрут по умолчанию через 10.0.0.1 на хосте 10.0.0.2_ Wizard79 6 лет назад 0
@DawnBenton: но как 10.0.0.2 узнает, как отправлять пакеты обратно в 10.0.0.3? Почему это отличается? В этом суть вопроса. Да, 10.0.0.3 имеет маршрут по умолчанию, это написано в вопросе. Wizard79 6 лет назад 0
10.0.0.2 не нужно маршрутизировать к 10.0.0.3, потому что он может видеть это. Маршрут по умолчанию - это то, как пакеты отправляются в другую сеть. 2 и 3 находятся в одной сети. Кроме того, я извиняюсь, что не прокрутил достаточно далеко, чтобы увидеть, что вы указали, что у 3 был установлен маршрут. Dawn Benton 6 лет назад 0
@DawnBenton: но перенаправленные пакеты не приходят с 10.0.0.1? 10.0.0.2 вижу это ... - Почему бы вам не написать полный пояснительный ответ вместо комментариев? Wizard79 6 лет назад 0

1 ответ на вопрос

1
Dawn Benton

Когда 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, потому что этот маршрут указан в таблице маршрутов. Если этот маршрут не был указан, он вернется к маршруту по умолчанию.

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

То есть пакеты, поступающие из 5.6.7.8, просто маршрутизируются, когда включена переадресация портов? Другими словами, в заголовке IP `source` это` 5.6.7.8`, а `destination` это` 1.2.3.4`, а `1.2.3.4` пересылает его как есть на` 10.0.0.2` без перевода адресов? Wizard79 6 лет назад 0
Если у вас нет настройки NAT, тогда да, он просто перешлет его. djsmiley2k 6 лет назад 1
NAT перезаписывает место назначения в заголовке входящего пакета, чтобы доставить его на хост в локальной сети, но источник не изменился. Таким образом, если 5.6.7.8 отправляет запрос на 1.2.3.4:1002, то 10.0.0.2 увидит пакет с 5.6.7.8 и попытается ответить на него. Обратите внимание, что источник входящего пакета одинаков, независимо от того, находится ли внутреннее назначение за NAT или имеет реальный маршрутизируемый IP-адрес (например, 1.2.3.6). Все, что делает NAT, это заставляет снаружи видеть один хост, переписывать адрес назначения входящих пакетов и отслеживать с помощью таблицы сопоставления портов. Dawn Benton 6 лет назад 1