Локальное подключение через публичный IP непредсказуемо

Тема в разделе "WASM.NETWORKS", создана пользователем Luzer, 10 сен 2011.

  1. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Добрых дней, господа!
    Как и в прошлый раз, отношение к ассемблеру косвенное, но где, если не здесь могут помочь?:)
    Ситуация такова:
    Компьютер А, Компьютер Б, Компьютер С
    Компьютер Б находится в локальной сети с Компьютером А.
    Компьютер С НЕ находится в локальной сети с Компьютером А.

    У компьютера А есть внутренний ИП (192.168...) и внешний ИП.
    На компьютере А открыт порт 10000.

    При попытке подключения с компа А к компу А на порт 10000 по внутреннему ИП - все нормально, никаких отклонений.
    При попытке подключения с компа А к компу А на порт 10000 по внешнему ИП - "... конечный компьютер отверг запрос на подключение" после выхода таймаута.
    При попытке подключения с компа Б к компу А на порт 10000 по внешнему ИП - та же самая ошибка.
    При попытке подключения с компа Б к компу А на порт 10000 по внутреннему ИП - все нормально...
    При попытке подключения с компа С к компу А на порт 10000 (по внешнему конечно же) - ВСЕ нормально.

    Компьютер А и Б выходят в сеть через роутер (адсл модем)
    Компьютер С не имеет значения.

    Провел эксперимент на других провайдерах - все 5 случаев из 5 отрабатываются нормально.

    В связи с этим, у меня вопрос, на что можно обратить внимание, чтобы попытаться решить проблему?
    Абсолютно нет никаких идей. а проблема какая-то ненормальная...

    З.Ы: Понимаю, что инорфмативность минимальная, но надеюсь на какие нибудь направления и указания.

    Спасибо)
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Нормально, в смысле, без ошибок?
     
  3. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Можно подробнее, как организован "внешний адрес" на компе А? ПРосто белый адрес прописан на сетевой карте, белый адрес получается через PPPOE или PPTP?
    И к чему были упомянуты роутеры(модемы) и провайдеры? Может быть под внешним адресом понимался такой, под которым роутер NAT-ит этот комп в интернет (тогда непонятно, как мог вообще подключаться С из инета, если только специально в модеме не прописан проброс порта/виртуальный сервер)?

    Еще, как именно подключен модем-роутер, включен в общую локалку с A и Б, или Б работает через А?
     
  4. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Aspire
    Нормально, значит работает. т.е происходит подключение(если тсп) и отправка-прием данных.

    Важное дополнение: На Компьютере А происходит именно ошибка(со стороны винды, приложение валится), на компьютере Б - приложение не валится, просто блокируется поток в receive. (что означает, что данные просто где-то потерялись)

    Dmitry_Milk
    Адрес выдается провайдером, он динамический, но белый. На компьютере А в настройках подключения указан статический локальный адрес(остальные адреса раздаются по DHCP).
    в настройках роутера указан DMZ хост на статический адрес компьютера А. Что делает компьюер А полностью видимым в сети.
    Адрес получается через PPPoE.

    Роутеры(модемы) и провайдеры упомянул потому, что у человека Х эзернет провайдер и у него никаких проблем(с другими не тестил).
    Да, все верно роутер переадресовывает все пакеты(ну или почти все) из сети на Компьютер А.

    А и Б включены в общую локалку и интернет раздается роутером(модемом) на все компьютеры в сети (А и Б)
     
  5. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Все же размещу алгоритм действий тестовой программы:

    ТочкаВхода
    {
    СозданиеПоток А
    СозданиеСокета1_Привязка его к порту 10000 (УДП)
    БлокирующийВызов recv у сокета 1
    ОтправкаДанныхОбратноПри получении от сокета 1
    }

    ПотокА
    {
    ОжиданиеВводаENTER
    СозданиеСокета2_Привязка его к порту 42343 (УДП любой порт)
    ОтправкаДанных_С Сокета на оконечную точку - ПубличныйIP:10000
    БлокирующийВызов recv у сокета 2 -- Именно здесь валится ошибка (в случае компа А) или просто ожидание данных (в случае компа Б)
    }

    recv у сокета 1 не разблокируется, а у сокета 2 ошибка. Код ошибки 10054 (для компьютера А)
     
  6. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Ну тогда все понятно. У вас ведь на компьютере А нет внешнего белого адреса. А роутер будет NAT-ить destination-IP только для пакетов, пришедших к нему с WAN-стороны, и наоборот, будет NAT-ить source-IP только у тех пакетов, что должны уйти через WAN-порт (а при обращении компа А или Б к белому адресу ни в ту, ни в другую сторону прохожения WAN-порта нет).

    То есть, таким образом вы не сможете организовать однозначное обращение. Вам необходимо сделать именно наличие белого адреса на компе А, скажем, использовать сам комп А как роутер с NAT, переведя модем просто в режим бриджа, и устанавливая соединение с провайдером прямо с компа А, и, конечно же, используя теперь на других компах локалки в качестве defaul-маршрута внутренний адрес компа А (но только не на самом компе А).
     
  7. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Есть еще один вариант - некоторые модемы-роутеры имеют опцию pppoe passthrou, то есть несмотря на то, что сам модем устанавливает PPPOE-соединение и является роутером с NAT, он может как бридж пропускать PPPOE-фреймы из локалки и обратно. Если провайдер разрешает устанавливать несколько PPPOE через один модемный линк и каждому PPPOE-линку дает уникальный белый IP-адрес, то параллельно к работающей схеме с модемом-роутером компьютер А сможет получить еще и свой персональный белый адрес. От какого адреса компьютер А будет обращаться к компам вне локалки зависит от приоритетов default-маршрута. Под Windows дефаулт PPPOE становится приоритетнее дефаулта на сетевухе. К локалке комп А будет продолжать обращаться от своего серого адреса.
     
  8. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Dmitry_Milk
    Спасибо за Ваш ответ. Выручаете который раз:)