Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik | Сертификаты

Безопасный метод авторизации на php

Примечание: мини-статья написана для новичков

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

1. Модель (клиент)
Регистрация
— логин (a-z0-9)
— пароль
Вход
— логин
— пароль
Cookie
— уникальный идентификатор юзера
— хэш

Модель (сервер)
MySQL
Таблица users
user_id (int(11))
user_login (Varchar(30))
user_password (varchar(32))
user_hash (varchar(32))
user_ip (int(10)) по умолчанию 0

При регистрации в базу данных записываеться логин пользователя и пароль(в двойном md5 шифровании)

При авторизация, сравниваеться логин и пароль, если они верны, то генерируеться случайная строка, которая хешируеться и добавляеться в БД в строку user_hash. Также записываеться IP адрес пользователя(но это у нас будет опциональным, так как кто-то сидит через Proxy, а у кого-то IP динамический… тут уже пользователь сам будет выбирать безопасность или удобство). В куки пользователя мы записываем его уникальный индетификатор и сгенерированный hash.

Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?
1. Из-за невнимательности программиста, во всей системе могут быть дырки, воспользовавшийсь этими дырками, злоумышленик может вытащить хеш пароля из БД и подставить его в свои куки, тем самым получить доступ к закрытым данным. В нашем же случае, двойной хеш пароля не чем не сможет помочь хакеру, так как расшифровать он его не сможет(теоретически это возможно, но на это он потратит не один месяц, а может быть и год) а воспользоваться этим хешем ему негде, ведь у нас при авторизации свой уникальный хеш прикрепленный к IP пользователя.

2. Если злоумышленик вытащит трояном у пользователя уникальный хеш, воспользовать им он также не сможет(разве если только, пользователь решил принебречь своей безопастностью и выключил привязку к IP при авторизации).

2. Практика
-- <br>
-- Структура таблицы `users` <br>
-- <br>
CREATE TABLE `users` ( <br>
`user_id` int(11) unsigned NOT NULL auto_increment, <br>
`user_login` varchar(30) NOT NULL, <br>
`user_password` varchar(32) NOT NULL, <br>
`user_hash` varchar(32) NOT NULL, <br>
`user_ip` int(10) unsigned NOT NULL default '0', <br>
PRIMARY KEY (`user_id`) <br>
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ; <br>

register.php

<?

// Страница регситрации нового пользователя

# Соединямся с БД

mysql_connect(“localhost”“myhost”“myhost”);

mysql_select_db(“testtable”);

if(isset($_POST[‘submit’]))

{

    $err = array();

    # проверям логин

    if(!preg_match(“/^[a-zA-Z0-9] $/”,$_POST[‘login’]))

    {

        $err[] = “Логин может состоять только из букв английского алфавита и цифр”;

    }

    if(strlen($_POST[‘login’]) < or strlen($_POST[‘login’]) > 30)

    {

        $err[] = “Логин должен быть не меньше 3-х символов и не больше 30”;

    }

    # проверяем, не сущестует ли пользователя с таким именем

    $query mysql_query(“SELECT COUNT(user_id) FROM users WHERE user_login='”.mysql_real_escape_string($_POST[‘login’]).“‘”);

    if(mysql_result($query) > )

    {

        $err[] = “Пользователь с таким логином уже существует в базе данных”;

    }

    # Если нет ошибок, то добавляем в БД нового пользователя

    if(count($err) == )

    {

        
$login $_POST[‘login’];

        # Убераем лишние пробелы и делаем двойное шифрование

        $password md5(md5(trim($_POST[‘password’])));

        mysql_query(“INSERT INTO users SET user_login='”.$login.“‘, user_password='”.$password.“‘”);

        header(“Location: login.php”); exit();

    }

    else

    {

        print “<b>При регистрации произошли следующие ошибки:</b><br>”;

        foreach($err AS $error)

        {

            print $error.“<br>”;

        }

    }

}

?>

<form method=”POST”>

Логин <input name=”login” type=”text”><br>

Пароль <input name=”password” type=”password”><br>

<input name=”submit” type=”submit” value=”Зарегистрироваться”>

</form>

login.php

<?

// Страница авторизации

# Функция для генерации случайной строки

function generateCode($length=6) {

    $chars “abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789”;

    $code “”;

    $clen strlen($chars) – 1;  
while (strlen($code) < $length) {

            $code .= $chars[mt_rand(,$clen)];  
}

    return $code;

}

# Соединямся с БД

mysql_connect(“localhost”“myhost”“myhost”);

mysql_select_db(“testtable”);

if(isset($_POST[‘submit’]))

{

    # Вытаскиваем из БД запись, у которой логин равняеться введенному

    $query mysql_query(“SELECT user_id, user_password FROM users WHERE user_login='”.mysql_real_escape_string($_POST[‘login’]).“‘ LIMIT 1”);

    $data mysql_fetch_assoc($query);

    # Соавниваем пароли

    if($data[‘user_password’] === md5(md5($_POST[‘password’])))

    {

Про сертификаты:  Продлены сроки действия сертификатов ФСБ России на продукты ViPNet Client 3.2, ViPNet Coordinator 3.2 и ViPNet Administrator 3.2. | ИнфоТеКС

        # Генерируем случайное число и шифруем его

        $hash md5(generateCode(10));

        if(!@$_POST[‘not_attach_ip’])

        {

            # Если пользователя выбрал привязку к IP

            # Переводим IP в строку

            $insip “, user_ip=INET_ATON(‘”.$_SERVER[‘REMOTE_ADDR’].“‘)”;

        }

        # Записываем в БД новый хеш авторизации и IP

        mysql_query(“UPDATE users SET user_hash='”.$hash.“‘ “.$insip.” WHERE user_id='”.$data[‘user_id’].“‘”);

        # Ставим куки

        setcookie(“id”$data[‘user_id’], time() 60*60*24*30);

        setcookie(“hash”$hashtime() 60*60*24*30);

        # Переадресовываем браузер на страницу проверки нашего скрипта

        header(“Location: check.php”); exit();

    }

    else

    {

        print “Вы ввели неправильный логин/пароль”;

    }

}

?>

<form method=”POST”>

Логин <input name=”login” type=”text”><br>

Пароль <input name=”password” type=”password”><br>

Не прикреплять к IP(не безопасно) <input type=”checkbox” name=”not_attach_ip”><br>

<input name=”submit” type=”submit” value=”Войти”>

</form>

check.php

<?

// Скрипт проверки

# Соединямся с БД

mysql_connect(“localhost”“myhost”“myhost”);

mysql_select_db(“testtable”);

if (isset($_COOKIE[‘id’]) and isset($_COOKIE[‘hash’]))

{   

    $query mysql_query(“SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = ‘”.intval($_COOKIE[‘id’]).“‘ LIMIT 1”);

    $userdata mysql_fetch_assoc($query);

    if(($userdata[‘user_hash’] !== $_COOKIE[‘hash’]) or ($userdata[‘user_id’] !== $_COOKIE[‘id’])<br> or (($userdata[‘user_ip’] !== $_SERVER[‘REMOTE_ADDR’])  and ($userdata[‘user_ip’] !== “0”)))

    {

        setcookie(“id”“”time() – 3600*24*30*12“/”);

        setcookie(“hash”“”time() – 3600*24*30*12“/”);

        print “Хм, что-то не получилось”;

    }

    else

    {

        print “Привет, “.$userdata[‘user_login’].“. Всё работает!”;

    }

}

else

{

    print “Включите куки”;

}

?>

Для защиты формы логина от перебора, можно использовать <a href=«captcha.ru target=»_blank”>капчу.

Хочу отметить, что здесь я рассматривал авторизацию основоную на cookies, не стоит в комментариях кричать, что сессии лучше/удобнее и т.д. Спасибо.

Инструкция по настройке шлюза удаленных рабочих столов

Для того чтобы повысить уровень безопасности Windows-сервера бывает недостаточно сменить TCP-порт RDP . Рассмотрим настройку шлюза  удаленных рабочих столов (Remote Desktop Gateway / Terminal Services Gateway) в домене Active Directory.

Remote Desktop Gateway, что это?

Remote Desktop Gateway – это роль Windows-сервера, обеспечивающая защищенное соединение, с помощью протокола SSL, с сервером по RDP. Главное преимущество этого решения в том, что не требуется развертывание VPN-сервера, для этого и используется шлюз.

Следует отметить, что начиная с Windows Server 2008 R2, были изменены названия всех служб удаленных рабочих столов. Именуемые ранее службы Terminal Services были переименованы в Remote Desktop Services.

Преимущества Remote Desktop Gateway в следующем:

  • Используя зашифрованное соединение, шлюз позволяет подключаться к внутренним сетевым ресурсам без необходимости использования VPN-соединения удаленными пользователями;
  • Шлюз дает возможность контроля доступа к определенным сетевым ресурсам, тем самым реализуя комплексную защиту;
  • Шлюз разрешает подключение к сетевым ресурсам, которые размещены за межсетевыми экранами в частных сетях или NAT;
  • С помощью консоли диспетчера шлюза появляется возможность настраивать политики авторизации для тех или иных условий, которые должны быть выполнены при подключении к сетевым ресурсам удаленными пользователями. В качестве примера, можно указать конкретных пользователей, которые могут подключаться к внутренним сетевым ресурсам, а также должен ли клиентский компьютер при этом быть членом группы безопасности AD, допустимо ли перенаправление устройства и диска;
  • Консоль диспетчера шлюза содержит инструменты, предназначенные для отслеживания состояния шлюза. Используя их, вы можете назначить отслеживаемые события для аудита, например, неудачные попытки подключения к серверу шлюза служб терминалов.

Важно! Шлюз служб терминалов должен входить в домен Active Directory. Настройка шлюза выполняется только от имени администратора домена, на любом сервере в домене.

Установим роль.

Открываем Диспетчер серверов.

Выбираем “Добавить роли и компоненты”.

На этапе “Тип установки”, выбираем “Установка ролей и компонентов”.

Следующим шагом выбираем текущий сервер.

Роль сервера – Служба удаленных рабочих столов.

Переходим к службе ролей. Выбираем “Шлюз удаленных рабочих столов”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Переходим к этапу подтверждения, нажимаем кнопку “Установить”.

Настройка политики авторизации подключения и ресурсов.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В открывшемся окне диспетчера шлюза удаленных рабочих столов, в левой части окна, раскрываем ветку с именем сервера  → Политики → Политики авторизации подключений.
В правой части того же окна выбираем Создать новую политику → Мастер.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В открывшемся окне “Мастер создания новых политик авторизации” выбираем рекомендуемый параметр “Создать политику авторизации подключений к удаленным рабочим столам и авторизации ресурсов удаленных рабочих столов”. Нажимаем кнопку “Далее”.

Про сертификаты:  Сертификаты – ООО «ФИРМА БАРД»

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

На следующем шаге вводим удобное имя для политики авторизации подключения. Мы рекомендуем давать имена на английском языке.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В окне выбора групп кликаем по кнопке “Дополнительно”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Окно изменит размеры. Нажимаем кнопку “Поиск”. В результатах поиска находим “Администраторы домена” и нажимаем кнопку “OK”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В окне выбора группы проверяем выбранные имена объектов и нажимаем “OK”.

Группа добавлена. Для перехода к следующему шагу нажимаем кнопку “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

На следующем этапе выбираем пункт “Включить перенаправление устройств для всех клиентских устройств” и нажимаем “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Устанавливаем таймауты – время простоя и время работы сессии, значения указаны в часах. Нажимаем “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Проверяем выполненные настройки. Все правильно – нажимаем “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

На следующем этапе настроим политику авторизации ресурсов. Указываем желаемое имя политики. Нажимаем “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Следующим шагом установим членство в группах. Обычно, группа уже установлена, но если это не выполнено, следует выполнить действия приведенные выше. Нажимаем “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Выбираем доступные сетевые ресурсы. Для этого необходимо выбрать группу, которая содержит серверы на которых требуемые группы пользователей могли бы работать с удаленным рабочим столом. Нажимаем кнопку “Обзор”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В окне выбора группы, нажимаем кнопку “Дополнительно”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В измененном окне нажимаем кнопку “Поиск”. В окне результатов находим “Контроллеры домена”. Нажимаем “OK”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Проверяем выбранные объекты и нажимаем “OK”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Еще раз проверяем какая сетевая группа добавлена и нажимаем “Далее”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Если номер RDP-порта неизменялся, устанавливаем значение переключателя в “Разрешить подключение только к порту 3389”. Если порт был изменен, следует указать новое значение.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Кликаем “Готово

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

На этапе подтверждения создания политики нажимаем кнопку “Закрыть”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

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

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Установим SSL-сертификат.

В том же окне “Диспетчер шлюза удаленных рабочих столов”, в левой окна кликаем по значку сервера, в основной части окна – “Просмотр и изменение свойств сертификата”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В открывшемся окне “Свойства <имя_сервера>” переходим на вкладку “Сертификат SSL”. Устанавливаем переключатель “Создать самозаверяющий сертификат” и кликаем по кнопке “Создать и импортировать сертификат…”.

Хотя возможны еще 2 варианта:

  • импорт ранее загруженного сертификата (самоподписанного ранее или стороннего);
  • загрузка стороннего сертификата (например, Comodo) и его импорт;

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В окне “Создание самозаверяющего сертификата” проверяем параметры и нажимаем кнопку “OK”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Система уведомит, что сертификат был создан успешно. также присутствует информация, где можно найти сам файл сертификата. Нажимаем кнопку “OK”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В окне свойств сервера, нажимаем кнопку “Применить”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Самозаверенный сертификат установлен на TCP-порт 443 (SSL-порт по умолчанию).

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Мы рекомендуем, в целях безопасности, изменить порт SSL, используемый по-умолчанию. Для этого, в основном меню окна, выбираем “Действия” → “Свойства”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Переходим на вкладку “Параметры транспорта” и устанавливаем желаемое значение поля “HTTPS-порт”. Сохраняем параметры нажимая кнопку “Применить”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Система запросит подтверждение – отвечаем ”Да”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Выполним подключение через шлюз.

Открываем RDP-клиент, переходим на вкладку “Дополнительно” и нажимаем кнопку “Параметры”.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

В открывшемся окне выбираем “Использовать следующие параметры сервера шлюза удаленных рабочих столов”. Указываем доменное имя сервера и через двоеточие (:) указываем SSL-порт. Метод входа – “Запрашивать пароль”. Нажимаем “OK

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Переходим на вкладку “Общие”. Указываем адрес компьютера и пользователя под которым будет выполняться подключение. Нажимаем кнопку “Подключить

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Программа запросит пароль от учетной записи.

Настройка vpn (openvpn, l2tp, pptp, ipsec и др.) server в mikrotik |

Результаты работы шлюза можно проверить трассировкой – команда tracert.

Создание домашней сети на базе устройств mikrotik: часть 4 — создание openvpn туннеля

Продолжение предыдущих статей по организации единой локальной сети.
В предыдущих статьях мы с Вами настроили два наших роутера — это hAP ac и hEX
Создание домашней сети на базе устройств MikroTik: Часть 1
Создание домашней сети на базе устройств MikroTik: Часть 2 — Настройка hAP ac
Создание домашней сети на базе устройств MikroTik: Часть 3 — Настройка RB750gr3 hEX
Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля (Вы тут)
Создание домашней сети на базе устройств MikroTik: Часть 5 — Создание EoIP туннеля
Создание домашней сети на базе устройств MikroTik: Часть 6 — Firewall защита доступа
Создание домашней сети на базе устройств MikroTik: Часть 7 — Firewall правильное перенаправление портов в сети с двумя шлюзами
Создание домашней сети на базе устройств MikroTik: Часть 8 — Установка и настройка MikroTik DUDE Network Monitor

В данной статье мы создадим защищенный туннельный интерфейс на базе OpenVPN.
Почему OpenVPN спросите Вы, ведь есть же PPTP, L2TP.
Отвечаю, я тестировал соединения на базе этих двух протоколов. К сожалению они не показали достаточно стабильного соединения между собой. Происходили частые падения туннельных интерфейсов.
Возможно это было связано с какой-то прошивкой. Но это не столь важно. Важно то, что настроив один раз туннель на OpenVPN, я забыл про разрывы связи совсем и до сих пор все работает отлично.

Про сертификаты:  СПА для Двоих | SPA Bamboo

Прежде чем настраивать OpenVPN сервер и создавать туннель, разберемся с тем, как он работает на Mikrotik. Т.к. на RouterOS v6 есть ограничения.
Обратимся к официальному источнику — Wiki Mikrotik(Eng) и Manual Interface(Eng).
В OpenVPN используются два типа интерфейса:
tun — в RoS он определяется, как ip, это туннельный уровень.
tap — в RoS он определяется, как ethernet, это канальный уровень.
Только начиная с прошивки 6.39.x была добавлена топология subnet для tun режима.
Выдержка из Changelog:
*) ovpn — added support for «push-continuation»;
*) ovpn — added support for topology subnet for IP mode;
*) ovpn — fixed duplicate default gateway presence when receiving extra routes;
*) ovpn — improved performance when receiving too many options;

Не поддерживается в 6 версии операционной системы:
UDP протокол, т.е. необходимо использовать исключительно TCP!
LZO сжатие
TLS аутентификация
Аутентификация без имени пользователя и пароля
Если Вы будете читать эту статью, и уже будет доступна 7 версия RouterOS, то в ней, все это, уже должно работать (но это не точно)!

К сожалению сложно сказать, почему Mikrotik пришли именно к такому решению и именно таким ограничениям, но мы имеем то, что имеем.
По ТСР, сервер в типичном случае будет получать ТСР-сегменты OpenVPN, которые содержат другие ТСР-сегменты от клиента. В результате в цепи получается двойная проверка на целостность информации, что совершенно не имеет смысла, т.к. надежность не повышается, а скорости соединения и пинга снижаются.
UDP конечно предпочтительней, но его нет…

OpenVPN предлагает пользователю несколько видов аутентификации.
Предустановленный ключ — самый простой метод.
Сертификатная аутентификация — наиболее гибкий в настройках метод.
С помощью логина и пароля — может использоваться без создания клиентского сертификата (серверный сертификат всё равно нужен).

Мы будем использовать Сертификатную аутентификацию для обеспечения хорошей защищенности нашего соединения.

Для создания туннеля, нам понадобятся сертификаты и ключи к ним. Данные сертификаты можно создать, как на Windows, Linux, так и на самом роутере.
Я сторонник создания сертификатов на своем ПК, чтобы они были у меня в файлах и я мог их достать в случаях «А вдруг что».

1. Создание сертификатов для OpenVPN соединения
Я буду создавать сертификаты на операционной системе Windows, для всех остальных ОС принцип похож. Можно загуглить.
Для начала необходимо скачать и установить дистрибутив OpenVPN: Страница Загрузок OpenVPN
Запускаем установщик openvpn-install
Если Вы не собираетесь использовать все возможности туннелирования на своей Windows машине и Вам нужно исключительно создать сертификаты, то можно снять галки с пунктов TAP Virtual Ethernet Adapter и OpenVPN GUI.

openvpn-install
Выбираем нужные пункты

После скачивания и установки в указанную Вами папку в ней будет список файлов. у меня это папка C:Program FilesOpenVPN
Нам необходимо перейти в папку easy-rsa
Нужно открыть консоль Windows (для Windows Vista/7/8/8.1/10 нужно запускать от Администратора)
Переходим в папку easy-rsa по пути установки командой cd
Например:
cd C:Program FilesOpenVPNeasy-rsa

Запускаем файл init-config.bat
C:Program FilesOpenVPNeasy-rsa>init-config.bat
C:Program FilesOpenVPNeasy-rsa>copy vars.bat.sample vars.bat
Скопировано файлов: 1.

В папке появится файл vars.bat, открываем его текстовым редактором, нас интересуют строчки в самом конце, их нужно заполнить
Я подставил свои параметры, у Вас данные параметры будут другие:
set KEY_COUNTRY=RU
set KEY_PROVINCE=Moscow
set KEY_CITY=Moscow
set KEY_ORG=HOME
set KEY_EMAIL=my@email.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=HOME
set PKCS11_MODULE_PATH=server
set PKCS11_PIN=12345

Там где написано server, не трогаем. Сохраняем файл.

Далее открываем редактором файл openssl-1.0.0.cnf
Находим строчку default_days 365 и заменяем число 365 на 3650 или свое. Тем самым мы увеличим время жизни наших сертификатов на 10 лет.
Сохраняем и закрываем.

Дополнительно:
Если Вы тот еще параноик, то Вы можете отредактировать еще один параметр:
set KEY_SIZE=1024
Для пущей сложности данный параметр можно изменить на 2048 и на 4096(для современных версий OpenVPN)
Но будьте готовы к долгому ожиданию(на слабых ПК очень долгому), пока сгенерируется ключ.

Пишем в консоль команды
vars
clean-all

В ответ должно прийти
Скопировано файлов: 1.
Скопировано файлов: 1.

Создаем ключ Диффи-Хеллмана
build-dh
Вывод из консоли:
C:Program FilesOpenVPNeasy-rsa>build-dh
WARNING: can't open config file: /etc/ssl/openssl.cnf
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......... .........

Известные проблемы:
При подаче команды clean-all или build-dh в самом начале генерации сертификатов, может проявится одна ошибка, выглядит она так:
C:UsersTEST>build-dh
"openssl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Бороться с этим необходимо следующим образом. Нужно указать путь до файла openssl.exe в файле vars.bat в ручную.
А точнее стираем слово rem в строке (rem — это комментирование строки):
rem set "PATH=%PATH%;C:Program FilesOpenVPNbin"
Получаем:
set "PATH=%PATH%;C:Program FilesOpenVPNbin"
Сохраняем файл и производим весь процесс сначала
vars
clean-all
build….. и т.д

Создаем основной сертификат
build-ca

При генерации основного сертификата в консоли будут отображаться вопросы. Просто нажимаем Enter, т.к. все эти параметры мы ввели в файле vars.bat
Нажимаем Enter до тех пор, пока не отобразиться строка приглашения
C:Program FilesOpenVPNeasy-rsa

Далее создаем сертификат сервера и его ключ:
build-key-server server

На вопросы так же нажимаем Enter, но не торопимся, в самом конце будет задано два вопроса
Sign the certificate?
1 out of 1 certificate requests certified, commit?

На оба эти вопроса отвечаем Y
Вывод из консоли:
Certificate is to be certified until Oct 16 07:03:55 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Теперь создаем сертификат и ключ клиента:
build-key client

Также не торопимся с ответами, как только увидим строку «Common Name (eg, your name or your server’s hostname)» нужно ответить client
В самом конце также будут два вопроса, отвечаем также Y
Причем: для каждого клиента, нужно будет создать отдельные ключи и называть их по разному, например client1, client2 или как-то иначе, все зависит от Вашего воображения. Также не забывайте вводить эти имена при запросе Common Name
Вывод из консоли:
C:Program FilesOpenVPNeasy-rsa>build-key client
WARNING: can't open config file: /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
............
.............................................................................
writing new private key to 'keysclient.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Home]:
Organizational Unit Name (eg, section) [Home]:
Common Name (eg, your name or your server's hostname) [server]:client
Name [server]:client
Email Address [my@email.ru]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
WARNING: can't open config file: /etc/ssl/openssl.cnf
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Moscow'
localityName :PRINTABLE:'Moscow'
organizationName :PRINTABLE:'Home'
organizationalUnitName:PRINTABLE:'Home'
commonName :PRINTABLE:'client'
name :PRINTABLE:'client'
emailAddress :IA5STRING:'my@email.ru'
Certificate is to be certified until Oct 16 07:16:56 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Пример создания клиентских сертификатов:
build-key client1
build-key office1

На этом создание файлов сертификатов и ключей завершено.
Все файлы будут лежать в папке C:Program FilesOpenVPNeasy-rsakeys

dir-sert-keys
Примерной такой список файлов должен получиться у Вас

2. Настройка OpenVPN сервера и интерфейса туннеля на hAP ac
Переходим к созданию туннеля на роутере hAP ac
Необходимо загрузить сертификат сервера, ключ сервера и основной сертификат в роутер. Файлы:
ca.crt
server.crt
server.key

Открываем раздел Files и переносим туда наши файлы. (Или используем FTP)

hap-file-certkey
Загруженные файлы сертификатов и ключа

Теперь нам необходимо импортировать данные сертификаты в RouterOS, чтобы она могла ими оперировать.

system-cert
Меню сертификатов

Импортируем наши сертификаты и ключи

import-certkey
Выбираем нужные сертификаты и ключ и импортируем их

Консольно:
/certificate import file-name=ca.crt passphrase=""
/certificate import file-name=server.crt passphrase=""
/certificate import file-name=server.key passphrase=""

Займемся настройкой OpenVPN. переходим в меню PPP

ppp
Меню PPP
ppp-profiles
Добавляем новый профиль для нашего туннеля

Нам необходимо выделить IP адреса, которые мы будем использовать для туннельных интерфейсов.
Я выбрал подсеть 172.16.10.0/24 соответственно сервер будет иметь адрес 172.16.10.1, а клиенты далее по маске. 2,3,4 и т.д.

new-ppp-profile
Заполняем необходимые параметры профиля
new-ppp-profile-2
Заполняем оставшиеся параметры профиля

Консольно:
/ppp profile add name=ovpn-server local-address=172.16.10.1 change-tcp-mss=yes use-upnp=no use-mpls=yes use-compression=no use-encryption=yes only-one=default

Добавляем авторизационные данные для каждого клиента, который будет подключаться к OpenVPN серверу.

ppp-secrets
Открываем вкладку с записями данных авторизации

Т.к. у сервера IP 172.16.10.1 выдаем клиенту IP 172.16.10.2

new-ppp-secret
Добавляем нашего клиента

Консольно:
/ppp secret add name=client password=123456789 service=ovpn profile=ovpn-server remote-address=172.16.10.2

Теперь нужно включить саму службу OpenVPN

ppp-ovpn-server
Нажимаем кнопку для отображения параметров сервера
ppp-ovpn-enabled
Выполняем настройки сервера

Консольно:
/interface ovpn-server server set enabled=yes port=1194 mode=ip netmask=24 default-profile=ovpn-server certificate=server.crt_0 require-client-certificate=yes auth=sha1,md5 cipher=blowfish128,aes128,aes192,aes256

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

ppp-ovpn-server-binding
Биндим интерфейс
ppp-new-bind
Достаточно ввести имя клиента из PPP Secret и имя самого интерфейса

Консольно:
/interface ovpn-server add name=ovpn-inclient user=client

Может показаться, что мы все уже настроили, но это не совсем так. Остался последний штрих. Необходимо разрешить прохождение запросов на OpenVPN сервер через Firewall
Для этого переходим в меню межсетевого экрана

ip-firewall
Переходим в меню Firewall
ip-firewall-addnew
Добавляем новую запись
ip-firewall-newrule
Разрешаем входящий трафик на порту 1194 с интерфейса WAN
ip-firewall-newrule2
Само разрешение

Консольно:
/ip firewall filter add chain=input protocol=tcp dst-port=1194 in-interface=WAN action=accept comment="Accept OpenVPN Requests"

На этом настройка OpenVPN на роутере hAP ac завершена, переходим к роутеру hEX

3. Настройка OpenVPN клиента и интерфейса туннеля на hEX
На данном роутере нам необходимо проделать гораздо меньше операций для запуска клиента.
Помним, что создали сертификат клиента! Загружаем его в роутер и импортируем по аналогии с hAP ac.

hex-import-cert
Загружаем и импортируем сертификат и ключ клиента

Консольно:
/certificate import file-name=client.crt passphrase=""
/certificate import file-name=client.key passphrase=""

Создаем профиль для OpenVPN в меню PPP

ppp-ovpn-client-profile
Добавляем новый профиль

Консольно:
/ppp profile add name=ovpn-client change-tcp-mss=yes use-upnp=no use-mpls=yes use-compression=no use-encryption=yes

Добавляем интерфейс OpenVPN для подключения к OpenVPN серверу.
Как мы помним из первой части цикла статей, внешний IP адрес у нас 98.76.54.32

ovpn-client
Добавляем интерфейс клиента OpenVPN
new-ovpn-client
Задаем имя интерфейса
ppp-ovpn-clientnew
Заполняем параметры для подключения к серверу OpenVPN

Консольно:
/interface ovpn-client add name=ovpn-outclient connect-to=98.76.54.32 port=1194 mode=ip user=client password=123456789 profile=ovpn-client certificate=client.crt_0 auth=md5 cipher=blowfish128

Шифрование Вы можете выбрать любое, которое установили доступным для сервера.
После создания интерфейса туннель должен уже быть активен. В списке IP адресов Вы должны увидеть IP 172.16.10.2 полученный от OpenVPN сервера.
Также в статусе можно увидеть с какими параметрами подключен интерфейс.

ovpn-client-status
Признаки активного соединения

Вот мы и закончили создание OpenVPN туннеля между двумя роутерами hAP ac и hEX
Буду рад любым замечаниям или комментариям. Возможно Вы знаете, как сделать лучше!

P.S.
Аналогом данного решения может послужить вариант PPTP туннеля. А шифрование можно организовать в самом EoIP посредством IPsec

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

Продолжение:
Создание домашней сети на базе устройств MikroTik: Часть 5 — Создание EoIP туннеля

Список всех статей в хронологическом порядке: История статей

Оцените статью
Мой сертификат
Добавить комментарий