Назад | Перейти на главную страницу

Почему прокси-серверы могут получить доступ к моему серверу, а я нет?

Итак, у меня есть сервер. Он запущен и работает. Доступен через прокси-серверы. Проблема в том, что сервер доступен из локальной сети по своему глобальному имени и недоступен внутри по этому имени ...

Я использовал Windows NAT Traversal api (UPnP), чтобы сделать мой сервер доступным из локальной сети ...

Как сделать его доступным для компьютеров в локальной сети, обращающихся к моему серверу, используя не локальный IP-адрес?

Длинная история с подробностями:

На локальной машине есть сервер (VLC например, трансляция видеоданных в реальном времени с моей веб-камеры на какой-либо сокет) Я могу получить к нему доступ через 127.0.0.1:5281 (loopback) и в моей локальной сети (у меня есть ADSL-маршрутизатор с 4 портами Ethernet + wify), перейдя на 192.168.1.13 : 5281 - это мой адрес в локальной сети, созданной роутером.

Я использовал бесплатную программу с открытым исходным кодом, например этот для перенаправления (привязки) моего порта 4773 с помощью UPnP к моему внешнему IP-адресу 97.132.48.111 (например) в качестве порта 33333, так что теперь любой (пользователи Интернета, прокси-серверы и т. д.) имеют доступ к этому прямому потоку, просто перейдя по URL-адресу например 97.132.48.111:33333

Но я или пользователи из моей локальной сети, где мой адрес 192.168.1.13, не могут получить доступ к моему потоку, используя 97.132.48.111:33333, только используя 192.168.1.13:5281

Мой вопрос: почему я не могу получить данные из своего потока, используя глобальный адрес, возможно ли (и если это так) для меня и ребят из моей локальной сети получить данные потока с использованием глобального адреса?

Как я уже сказал, я использовал программу, которая использовала протокольные запросы (UPnP) для перенаправления порта. Могу ли я сконфигурировать (по крайней мере теоретически) мой маршрутизатор, используя какой-либо протокол, например UPnP, чтобы он сделал мой маршрутизатор умным? Есть ли такие протоколы?

Поэтому для меня главное - делать это с помощью программ, которые максимально используют открытые протоколы, потому что я программист, и моя цель - создать программу, которая позволила бы пользователям ADSL открывать свои серверы и получать к ним доступ так, как я описал в мой вопрос - по глобальному адресу (который, кстати, может быть временным - у меня временный) =)

На данный момент я использую библиотеки UPnP в своей программе для перенаправления порта. Теперь мне нужен какой-то протокол, чтобы настроить маршрутизаторы, чтобы они были немного умнее. Кто-нибудь знает такое?

К сожалению, в вашем вопросе нет подробностей, но если я загляну в свой хрустальный шар, я пойму, что у вас есть веб-сервер, размещенный в вашей сети внутри NAT, и у вас есть общедоступный IP-адрес сервера в DNS.

Вероятно, вам нужно настроить DNS с разделенным представлением. Это означает, что вам необходимо обслуживать внутренний IP-адрес в ответ на запросы DNS от хостов внутри вашего NAT, а внешний адрес - для внешних хостов.

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

  1. Внутренний пользователь (расположенный по адресу 192.168.1.30) подключается к 93.100.45.201:33333. Отправленный SYN-пакет.
  2. Шлюз NAT перенаправляет это соединение на 192.168.1.13:4773.
  3. Сервер по адресу 192.168.1.13:4773 видит, что 192.168.1.30 отправил ему SYN-пакет на 4773, чтобы начать TCP-диалог. Он отвечает SYN / ACK на 192.168.1.30.
  4. Внутренний пользователь (192.168.1.30) видит пакет SYN / ACK от 192.168.1.13 и бросает его на пол. Ожидался SYN / ACK от 93.100.45.201.
  5. Через 3 и 9 секунд (или около того) 192.168.1.13 повторно передает SYN / ACK, который 192.168.1.30 послушно падает на пол, поскольку он ВСЕ ЕЩЕ ждет, пока 93.100.45.201 вернется к нему.

У вас есть два варианта. Первый - это, как указал Зоредак, создание DNS с разделенным горизонтом (внутренние пользователи видят один набор записей DNS, внешние пользователи видят другой). Таким образом, одно и то же имя может указывать на два разных IP-адреса в зависимости от того, где вы находитесь.

Второй способ исправить это - использовать шлюз NAT, который достаточно умен, чтобы распознавать эту конкретную маршрутизацию. Вместо того, чтобы слепо пересылать пакет 192.168.1.30 без изменений, он перепишет его так, чтобы источником был сам шлюз. Это называется Source-NAT (и может называться многими другими способами в зависимости от того, кто продает устройство). Это инвертирует NAT, поэтому перезаписывается источник, а не пункт назначения.

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