Подключение к локальной сети с использованием IP-адреса WAN

У меня простая сеть в моей компании, где я использую ADSL-маршрутизатор ISP. ЛВС 192.168.1.0/24. IP-адрес маршрутизатора: 192.168.1.1. Он также поддерживает DHCP, который варьируется от 2 to 250.

У меня есть цифровой видеорегистратор (DVR), настроенный со статическим IP-адресом, со следующей конфигурацией локальной сети:

IP  : 192.168.1.254
MASK: 255.255.255.0
GW  : 192.168.1.1
DNS1: 192.168.1.1
HTTP: 8080
SRVR: 6036

Мне также нужно настроить порты подключения - в этом случае HTTP-порт DVR - это 8080 и порт сервера 6036. Я сделал настройки на моем маршрутизаторе для пересылки портов в DVR.

Итак, я загрузил приложение APP и настроил его для подключения 192.168.1.254 - он работает. Поэтому правильная настройка сети DVR. Затем я сконфигурировал DVR DDNS и перенастроил APP на моем мобильном телефоне ... и вот здесь проблема:

Когда я вне моей рабочей сети (т. е. 3G или у меня дома), она работает. Он подключается к моему DVR с помощью DDNS. Однако, если я в сети, это не сработает.

Допустим, что общий адрес моей сети: 200.30.20.10. Таким образом, из моего телефона выходят пакеты с адресом назначения 200.30.20.10 для обоих портов (8080 и 6036). Поэтому он пытается правильно подключиться, как и ожидалось (потому что я могу подключиться к DVR из своего дома, поэтому я знаю, что как DDNS, так и переадресация портов верны)

Мое рассуждение: когда я в сети, пакет достигает моего маршрутизатора, соответствует только маршруту по умолчанию и выходит из шлюза. Однако теперь пакет будет иметь как адрес источника, так и адрес назначения, равный 200.30.20.10 ... так что сеть шлюза просто отбросит мой пакет?

Я думал, что добавление статического маршрута в мою таблицу маршрутизации исправит это, но поскольку мой общедоступный IP-адрес всегда изменяется, это не будет каждый эффективный ...

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

(Почему я хочу решить эту проблему: так, как сейчас, всем телефонам нужны две конфигурации: одна для подключения к DVR, когда мы здесь, а другая, когда нас здесь нет.)

Мой вопрос: что именно происходит и почему?

1 голос | спросил Enzo Ferber 12 Maypm17 2017, 21:01:18

2 ответа


4

Ваше мышление верное. Одним словом, который вы можете искать, является «шпилька». По сути, идея о том, что пакет делает разворот, и направляется обратно туда, откуда он появился. Различные маршрутизаторы и брандмауэры настраивают это по-другому, поэтому вам придется искать свой.

Я также видел, что он называется «NAT loopback», но я думаю, что шпилька является более распространенным термином.

Редактировать: это по сути то, что делает шпилька для вас.
Представьте, что вы настроили внешний IP-адрес в приложении телефона.
Ваш телефон (пример 192.168.1.5) отправляет пакет до 200.30.20.10. Если вы только измените IP-адрес назначения (DNAT), а затем, когда пакет попадет на DVR, он будет выглядеть так: 192.168.1.5 -> 192.168.1.254. DVR будет отвечать непосредственно на телефон, так как они находятся в одной подсети. Ваш телефон отбросит пакет ответа, поскольку, насколько это известно, он ничего не отправил на 192.168.1.254, он отправил пакет до 200.30.20.10! Таким образом, вам придется изменить исходный адрес (SNAT), а также в этом случае, чтобы пакеты возвращались к брандмауэру, а затем обратно к вашему телефону.

Итак, в конце концов:
ТЕЛЕФОН НА ВНЕШНЕМ z.z.z.z -> 208.30.20.10
Маршрутизатор видит этот пакет и меняет его на: z.z.z.z -> 192.168.1.254

ТЕЛЕФОН НА ВНУТРИ (телефон настроен одинаково)
192.168.1.5 -> 200.30.20.10
Маршрутизатор видит этот пакет и должен изменить его на: 192.168.1.1 -> 192.168.1.254

ответил Willie 12 Maypm17 2017, 21:11:54
2

Самое простое решение - не использовать IP-адрес, а имя DDNS. Настройте маршрутизатор (при условии, что его локальный DNS-сервер) разрешает это имя на внутренний IP-адрес вашего DVR (это называется «split DNS»).

Если это невозможно, добавьте локальный IP-адрес и имя DDNS в локальный файл «hosts», чтобы он вообще не разрешался DNS. Для Windows это C:\Windows\System32\drivers\etc\hosts; для Linux это /etc/hosts.

ответил Zac67 12 Maypm17 2017, 22:11:57

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132