Материал из for iRidium developers
Перейти к: навигация, поиск
Эта страница является переводом страницы VPNConnection. Перевод выполнен на 100%.

Other languages:

Использование VPN в i3 Pro

Начиная с версии 1.1.7 платформа i3 Pro поддерживает VPN соединение. Для использования VPN соединения вам потребуется сгенерировать сертификаты безопасности и модифицировать ваш проект. В этой статье вы найдете подробные инструкции по генерации сертификатов и настройке проекта

Принцип работы VPN

О том что такое VPN и принцип его работы можно прочитать тут

Генерация сертификатов

Перед настройкой VPN в вашем проекте, необходимо сгенерировать сертификаты безопасности. Для этого надо скачать на компьютер под управлением OS Windows программу OpenVPN для генерации необходимых сертификатов.

Внимание! При установке программы выбираем все галочки

Далее переходим в C:\Program files\OpenVPN\easy-rsa, запускаем init-config.bat, появится vars.bat.sample, открываем его в блокноте и редактируем следующие строки:

set KEY_COUNTRY=RU
set KEY_PROVINCE=MoscowRegion
set KEY_CITY=Moscow
set KEY_ORG=OpenVPN
set KEY_EMAIL=mybox@voxlink.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=voxlink

Все строки кроме “Key_CN” и “Key_NAME” заполняем в произвольном порядке. Сохраняем как vars.bat на рабочий стол, затем перемещаем в C:\Program files\OpenVPN\easy-rsa. Теперь открываем openssl-1.0.0.cnf и проверяем параметр. default_days=3650 (Это срок действия сертификата, 3650=10лет).
Открываем командную строку от имени администратора и пишем:

cd C:\Program Files\OpenVPN\easy-rsa
vars
clean-all

Если видим сообщение о том, что «Скопировано файлов: 1». Значит, процедура успешна. В этом же окне набираем:

build-dh (создание ключа Диффи-Хеллмана)
build-ca (создание основного сертификата)

На все вопросы нажимаете Enter пока не увидите путь
C:\Program files\OpenVPN\easy-rsa Далее набираем:

build-key-server server

На все вопросы кроме «Sign the certificate?» и «1 out of 1 certificate requests certified, commit?» жмем Enter, на эти два жмём Y. Создадим сертификат клиента: build-key client На вопрос Common Name (eg, your name or your server's hostname) нужно ввести client. В конце дважды ввести Y. Из папки C:\Program Files\OpenVPN\easy-rsa\keys забираем: ca.crt, server.crt, server.key

Использование в i3 Pro

Для использования VPN в проекте i3 Pro, необходимо добавить к проекту специальный скрипт, в котором указать сгенерированные ключи. Создайте новый скриптый файл и добавите в него скрипт

var g_Name = "OpenVPN"; //название конфигурации, менять его не надо
var g_Config = //Конфигурация VPN
"proto tcp-client                                                \n" +
"# в этой строчке мы указываем адрес в интернете                 \n" +
"remote 217.114.30.30                                            \n" +   
"dev tun                                                         \n" +
"                                                                \n" +
"nobind                                                          \n" +
"persist-key                                                     \n" +
"                                                                \n" +
"tls-client                                                      \n" +
"#указываем имена публичного CA сертификата                      \n" +
"#ca ca.crt                                                      \n" +
"# публичного сертификата клиента                                \n" +
"#cert client.crt                                                \n" +
"# и его закрытый ключ                                           \n" +
"#key client.key                                                 \n" +
"                                                                \n" +
"verb 3   									                     \n" +
"       												         \n" +
"                                                                \n" +
"ns-cert-type server                                             \n" +
"cipher AES-256-CBC                                              \n" +
"auth SHA1                                                       \n" +
"pull                                                            \n" +
"tls-cipher TLS-RSA-WITH-AES-256-CBC-SHA                         \n" +
"                                                                \n" +
"<ca>                                                            \n" +
"-----BEGIN CERTIFICATE-----                                     \n" +
"/n"+//Прописываем публичный сертификат
"-----END CERTIFICATE-----                                       \n" +
"</ca>                                                           \n" +
"<cert>                                                          \n" +
"-----BEGIN CERTIFICATE-----                                     \n" +
"\n" +//Прописываем публичный сертификат клиента
"-----END CERTIFICATE-----                                       \n" +
"</cert>                                                         \n" +
"<key>                                                           \n" +
"-----BEGIN PRIVATE KEY-----                                     \n" +
"\n" +//Прописываем закрытый ключ
"-----END PRIVATE KEY-----                                       \n" +
"</key>                                                          \n";
 
var g_oPage;
var g_oStatusItem;
var g_iStatusInterval = 0; //флаг опроса VPN конфигурации
 
function VPNLog(name, event, result, msg)
{
   IR.Log("name: " + name);
   IR.Log("event: " + event);
   IR.Log("result: " + result);
   IR.Log("msg: " + msg);
}
 
function activateConfiguration()
{
   IR.ActivateVPNConfiguration(//Функция активации VPN
      g_Name,
      {
         type: "OpenVPN",
         username: "ovpn_user3",
         password: "user3",
         NotUseDefaulRoute: 0,
         ovpn: g_Config//,
 
         //iridium_debug: true,
         //iridium_debug_level: 7,
         //iridium_debug_host: "192.168.0.89",
         //iridium_debug_port: 514,
      },
      VPNLog
   );
}
 
function startConfiguration()//Функция старта VPN соединения, в которой создается таймер обновления конфигурации, если флаг g_iStatusInterval=1
{
   if(!g_iStatusInterval)
   {
      g_iStatusInterval = IR.SetInterval(1000, function(){
         getConfigurationStatus();
      });
    }
 
   IR.StartVPNConfiguration(
      g_Name,
      VPNLog
   );
}
 
function stopConfiguration()//Функция прекращения VPN соединения
{
   if(!g_iStatusInterval)
   {
      g_iStatusInterval = IR.SetInterval(1000, function(){
         getConfigurationStatus();
      });
    }
 
   IR.StopVPNConfiguration(
     g_Name,
     VPNLog
   );
} 
 
function getConfigurationStatus()//Функция обновления VPN конфигурации
{
   if(!g_oPage)
      g_oPage = IR.GetPage("Page 1");
 
   if(g_oPage && !g_oStatusItem)
      g_oStatusItem = g_oPage.GetItem("Item 5");
 
   IR.GetVPNConfigurationStatus(
      g_Name,
      function (name, event, result, msg)
      {
         IR.Log("name: " + name);
         IR.Log("event: " + event);
         IR.Log("result: " + result);
         IR.Log("msg: " + msg);
 
         g_oStatusItem.Value = result;
 
         if(g_iStatusInterval && result <= 4)
         {
            IR.ClearInterval(g_iStatusInterval);
            g_iStatusInterval = 0;
         }               
      }
   );
}
 
IR.AddListener(IR.EVENT_START,0,function()//Запуск получения конфигурации при старте проекта
{
   if(!g_iStatusInterval)
   {
      g_iStatusInterval = IR.SetInterval(1000, function(){
         getConfigurationStatus();
      });
    }
});