NAT traversal (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
Строка 6: Строка 6:
 
* '''Хаб''' -- gedemin.exe в качестве веб-сервера, где регистрируются '''серверы предприятий''' и куда мобильные приложения обращаются за адресами серверов предприятий.
 
* '''Хаб''' -- gedemin.exe в качестве веб-сервера, где регистрируются '''серверы предприятий''' и куда мобильные приложения обращаются за адресами серверов предприятий.
 
* '''Мобильное приложение''' -- android приложение, которое обращается к '''серверу предприятия''' за данными. Адрес '''сервера предприятия''' '''мобильное приложение''' узнает, послав запрос на '''хаб'''.
 
* '''Мобильное приложение''' -- android приложение, которое обращается к '''серверу предприятия''' за данными. Адрес '''сервера предприятия''' '''мобильное приложение''' узнает, послав запрос на '''хаб'''.
 +
* '''Внешний адрес сервера предприятия''' -- адрес и порт сервера предприятия, под которым он виден из сети интернет.
 +
* '''Внутренний адрес сервера предприятия''' -- адрес и порт сервера предприятия в локальной сети предприятия.
  
 
===Хаб===
 
===Хаб===
Строка 11: Строка 13:
 
Один из серверов выступает в роли хаба, где регистрируются сервера предприятий и куда обращаются мобильные приложения за адресами.  
 
Один из серверов выступает в роли хаба, где регистрируются сервера предприятий и куда обращаются мобильные приложения за адресами.  
  
Сервера предприятий мы прописываем в таблице [[GD_WEBHUB]]:
+
Только сервера предприятий, прописанные в таблице [[GD_WEBHUB]], обслуживаются хабом. Структура таблицы:
  
 
   ...
 
   ...
   allowedip  -- список допустимых адресов. Если пустой, то мы разрешаем
+
   allowedip  -- Список допустимых внешних адресов. Может указываться как только
                 регистрацию сервера предприятия с любым внешним  
+
                адрес, так и адрес с номером порта. Если пустой, то мы разрешаем
                адресом.
+
                 регистрацию сервера предприятия с любым внешним адресом.
   aliases    -- список алиасов, обслуживаемых данным сервером предприятия.
+
   aliases    -- Список алиасов, через запятую, обслуживаемых данным сервером  
                 если пустой, то мобильные приложения смогут подключиться
+
                 предприятия. Если пустой, то мобильные приложения смогут  
                 только по адресу.
+
                 подключиться только по адресу. Алиасы не чувствительны к регистру.
 
   companyruid -- РУИД организации.
 
   companyruid -- РУИД организации.
 
   computerid  -- id компьютера сервера.
 
   computerid  -- id компьютера сервера.
   adminemail -- адреса электронной почты для уведомления о недоступности
+
   lastactive -- Дата и время последней регистрации (обновления) сервера на хабе.
                сервера.
+
   lastip      -- Внешний адрес и порт сервера предприятия из последней
   lastactive  -- дата и время последней регистрации сервера на хабе.
+
                регистрации (обновления).  
   accessdenied-- отказано в доступе. Адрес сервера предприятия не будет  
+
   accessdenied-- Флаг "отказано в доступе". Адрес сервера предприятия не будет  
 
                 передан в мобильное приложение. Вместо этого будет передан  
 
                 передан в мобильное приложение. Вместо этого будет передан  
 
                 код и текстовое сообщение.
 
                 код и текстовое сообщение.
   usermessage -- сообщение которое будет передано пользователю.
+
   usermessage -- Сообщение, которое будет передано пользователю.
                 мобильное приложение отображает это сообщение на экране.
+
                 Мобильное приложение отображает это сообщение на экране.
                 используется в коомбинации с флагом accessdenied.
+
                 Используется в коомбинации с флагом accessdenied.
                 Например, "Сервер находится на плановом обслуживании.
+
                 Пример сообщения: "Сервер находится на плановом обслуживании.
 
                 С 14:00 до 16:00".
 
                 С 14:00 до 16:00".
 +
  adminemail  -- Адреса электронной почты, через запятую, для уведомления о
 +
                недоступности сервера.
 
   ...
 
   ...
  
 
===Сервер предприятия===
 
===Сервер предприятия===
 
   
 
   
Сервер предприятия активируется через файл gedemin.ini:
+
Сервер предприятия активируется через файл [[gedemin.ini]]. В рамках решения данной задачи добавляем или расширяем следующие параметры:
  
 
   [WEB SERVER]
 
   [WEB SERVER]
   Active          = 1
+
   ...
   Bindings        = можно не указывать, тогда сервер привяжется к
+
   Bindings        = адрес, к которому будет привязан сервер предприятия.
                    локальному адресу.
+
 
   Register        = 1 -- флаг указывает, что веб сервер должен  
 
   Register        = 1 -- флаг указывает, что веб сервер должен  
 
                     зарегистрироваться на хабе. По умолчанию равен 0.
 
                     зарегистрироваться на хабе. По умолчанию равен 0.
Строка 59: Строка 62:
 
* :порт будет использован локальный адрес и заданный номер порта
 
* :порт будет использован локальный адрес и заданный номер порта
 
* пустое значение -- локальный адрес и порт 80
 
* пустое значение -- локальный адрес и порт 80
 +
 +
Если на компьютере несколько локальных адресов и в Bindings адрес не прописан, то будет взят любой из них.
 +
 +
Узнать к какому именно адресу и номеру порта привязан сервер можно в окне '''О программе'''.
  
 
===Сценарий регистрации===
 
===Сценарий регистрации===
  
# запускается веб сервер предприятия
+
# Запускается '''сервер предприятия'''.
# если параметры из gedemin.ini указывают на необходимость регистрации на хабе, то шлется запрос на зашитый в экзешник адрес (например, gs.selfip.biz:47002/web_register)
+
# Если параметры из [[gedemin.ini]] указывают на необходимость регистрации на хабе, то шлется запрос на зашитый в экзешник адрес (например, gs.selfip.biz:47002/web_register).
# на хаб передается id компьютера и ruid организации.
+
# На хаб передается '''id компьютера''' и '''ruid''' текущей [[Рабочая организация|рабочей организации]].
# если хаб не доступен, то сервер переходит в неактивное состояние. на экран и в лог выдается сообщение о полученной ошибке.
+
# Если хаб недоступен, то сервер переходит в неактивное состояние. На экран и в лог выдается сообщение о полученной ошибке.
# хаб сверяет переданный ид компьютера и руид организации с информацией в GD_WEBHUB. Если сервер не прописан то возвращается соответствующий код. Сервер предприятия выдает на экран и в лог сообщение.
+
# Хаб сверяет переданный '''ид компьютера''' и '''руид организации''' с информацией в [[GD_WEBHUB]].  
 +
# Если сервер предприятия не прописан на хабе то возвращается соответствующий код. Сервер предприятия выдает на экран и в лог сообщение.
 
# хаб регистрирует  
 
# хаб регистрирует  
  

Версия 12:25, 8 февраля 2016

Описанная ниже схема не отменяет действующего механизма, когда на мобильном устройстве прописан адрес с портом, а на файрволле предприятия настроен статический роут на внутренний компьютер.

Терминология:

  • Сервер предприятия -- gedemin.exe в качестве веб-сервера, обслуживающий запросы мобильных приложений.
  • Хаб -- gedemin.exe в качестве веб-сервера, где регистрируются серверы предприятий и куда мобильные приложения обращаются за адресами серверов предприятий.
  • Мобильное приложение -- android приложение, которое обращается к серверу предприятия за данными. Адрес сервера предприятия мобильное приложение узнает, послав запрос на хаб.
  • Внешний адрес сервера предприятия -- адрес и порт сервера предприятия, под которым он виден из сети интернет.
  • Внутренний адрес сервера предприятия -- адрес и порт сервера предприятия в локальной сети предприятия.

Хаб

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

Только сервера предприятий, прописанные в таблице GD_WEBHUB, обслуживаются хабом. Структура таблицы:

 ...
 allowedip   -- Список допустимых внешних адресов. Может указываться как только 
                адрес, так и адрес с номером порта. Если пустой, то мы разрешаем
                регистрацию сервера предприятия с любым внешним адресом.
 aliases     -- Список алиасов, через запятую, обслуживаемых данным сервером 
                предприятия. Если пустой, то мобильные приложения смогут 
                подключиться только по адресу. Алиасы не чувствительны к регистру.
 companyruid -- РУИД организации.
 computerid  -- id компьютера сервера.
 lastactive  -- Дата и время последней регистрации (обновления) сервера на хабе.
 lastip      -- Внешний адрес и порт сервера предприятия из последней
                регистрации (обновления). 
 accessdenied-- Флаг "отказано в доступе". Адрес сервера предприятия не будет 
                передан в мобильное приложение. Вместо этого будет передан 
                код и текстовое сообщение.
 usermessage -- Сообщение, которое будет передано пользователю.
                Мобильное приложение отображает это сообщение на экране.
                Используется в коомбинации с флагом accessdenied.
                Пример сообщения: "Сервер находится на плановом обслуживании.
                С 14:00 до 16:00".
 adminemail  -- Адреса электронной почты, через запятую, для уведомления о 
                недоступности сервера.
 ...

Сервер предприятия

Сервер предприятия активируется через файл gedemin.ini. В рамках решения данной задачи добавляем или расширяем следующие параметры:

 [WEB SERVER]
 ...
 Bindings        = адрес, к которому будет привязан сервер предприятия.
 Register        = 1 -- флаг указывает, что веб сервер должен 
                   зарегистрироваться на хабе. По умолчанию равен 0.
 RegisterPeriod  = 580 -- период в секундах, через который сервер
                   обновляет информацию о себе на хабе. По умолчанию
                   580 сек, так как есть информация, что на некоторых
                   свитчах и файрволах используется 10-ти минутный
                   интервал времени, в течение которого сохраняется
                   информация о соответствии внутреннего адреса и
                   внешнего порта. 

Допустимые значения для Bindings:

  • адрес:порт
  • адрес -- будет использован порт 80
  •  :порт будет использован локальный адрес и заданный номер порта
  • пустое значение -- локальный адрес и порт 80

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

Узнать к какому именно адресу и номеру порта привязан сервер можно в окне О программе.

Сценарий регистрации

  1. Запускается сервер предприятия.
  2. Если параметры из gedemin.ini указывают на необходимость регистрации на хабе, то шлется запрос на зашитый в экзешник адрес (например, gs.selfip.biz:47002/web_register).
  3. На хаб передается id компьютера и ruid текущей рабочей организации.
  4. Если хаб недоступен, то сервер переходит в неактивное состояние. На экран и в лог выдается сообщение о полученной ошибке.
  5. Хаб сверяет переданный ид компьютера и руид организации с информацией в GD_WEBHUB.
  6. Если сервер предприятия не прописан на хабе то возвращается соответствующий код. Сервер предприятия выдает на экран и в лог сообщение.
  7. хаб регистрирует

Мобильное приложение

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

  1. Приложение помнит адрес, порт и время последнего сеанса связи с сервером предприятия.
  2. Если с момента последней связи прошло времени меньше, чем установлено константой, то пытаемся связаться по сохраненному адресу, не запрашивая хаб.
  3. Если мы не можем связаться с сервером предприятия по сохраненному адресу (тайм аут или иной код ошибки), то не выдаем никаких сообщений пользователю, а идем на хаб за новым адресом.
  4. Если хаб недоступен, выводим соответствующее сообщение об ошибке.
  5. Если хаб вернул код ошибки (алиас неизвестен или отказано в доступе), то выдаем пользователю соответствующее сообщение.
  6. Если мы не можем соединиться с сервером предприятия по полученному от хаба адресу (тайм аут или код ошибки), то выдаем пользователю сообщение.
  7. Важно, чтобы сообщения пользователю позволяли однозначно идентифицировать проблему. Т.е. при жалобе пользователя мы должны сразу идентифицировать что произошло: недоступен хаб, подключение запрещено, недоступен сервер предприятия и т.п.
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты