Теория
Для работы OpenVPN необходимы сертификаты
Сертификат удостоверяющего центра CA
Сертификат сервера OpenVPN
Сертификат клиента OpenVPN
Пул адресов для OpenVPN клиентов
Имена и пароли пользователей
Практика
Подразумевается что у нас новый чистый роутер, обновленный до последней версии c дефолтным файрволлом
Если это не так то работать будет тоже, только подразумевается что вы знаете что у вас настроено
Обязательно проверьте установку времени
Если время будет не совпадать, то будут возникать ошибки подключения
Установить можно руками, или настроить NTP client
Настроим NTP
Код просто выделяет. Открываем консоль и щелкаем вставить. После последней строки нажать enter.
/system clock set time-zone-name=Europe/Moscow /system ntp client set enabled=yes client servers add address=time.google.com add address=0.pool.ntp.org add address=1.pool.ntp.org add address=2.pool.ntp.org add address=3.pool.ntp.org
В картинках
Ну ты красавчик!) ты смог… теперь иди делай сертификаты
# Сертификаты
Создается сертификат удостоверяющего центра /certificate add name="openvpn-ca" country="ru" state="Dmitrov" locality="Dmitrov" organization="openvpn" unit="ou" common-name="openvpn-ca" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign,tls-client,tls-server Создается сертификат сервера /certificate add name="openvpn-srv" country="ru" state="Dmitrov" locality="Dmitrov" organization="openvpn" unit="ou" common-name="openvpn-srv" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server Создается сертификат пользователя мастер сертификат из которого сделаем копии пользователям /certificate add name="openvpn-client-template" country="ru" state="Dmitrov" locality="Dmitrov" organization="openvpn" unit="ou" common-name="openvpn-client-template" key-size=4096 days-valid=365 key-usage=tls-client Делаем копии на трех пользователей из сертификата openvpn-client-template, для удобства можно переименовать openvpn-client-1 в openvpn-client-Vasso /certificate add name="openvpn-client-1" copy-from="openvpn-client-template" common-name="openvpn-client-1" /certificate add name="openvpn-client-2" copy-from="openvpn-client-template" common-name="openvpn-client-2" /certificate add name="openvpn-client-3" copy-from="openvpn-client-template" common-name="openvpn-client-3"
# Подписываем сертификаты
Сертификат удостоверяющего центра /certificate sign openvpn-ca ca-crl-host=127.0.0.1 Сертификат сервера, подписывается сертификатом удостоверяющего центра /certificate sign openvpn-srv ca="openvpn-ca" Сертификат пользователей, подписывается сертификатом удостоверяющего центра, мы сделали три сертификата со сроком службы 365 дней, для себя будет достаточно одного сертификата на несколько устройств но мы не такие и у нас будет их три :-) перед подписанием сертификата можно изменить срок службы, потом изменить нельзя будет. /certificate sign openvpn-client-1 ca="openvpn-ca" delay 60 /certificate sign openvpn-client-2 ca="openvpn-ca" delay 60 /certificate sign openvpn-client-3 ca="openvpn-ca"
Ну ты даёшь… ну погнали дальше)
Запускаем сервер
Включаем аутентификацию по пользователю /ppp aaa set accounting=yes Создаем мост /interface bridge add name=openvpn-bridge arp=enabled Создаем пул адресов для пользователей 10.20.30.100-10.20.30.200 /ip pool add name=openvpn-pool ranges=10.20.30.100-10.20.30.200 Создаем профиль PPP /ppp profile add name=openvpn-server local-address=10.20.30.1 remote-address=openvpn-pool Включаем сервер OVPN /interface ovpn-server server set auth=sha1,md5 certificate=openvpn-srv cipher=blowfish128,aes256-cbc default-profile=openvpn-server enabled=yes require-client-certificate=yes Добавляем разрешающие правило файрволла подключения к серверу, разместить его следуют самым первым. /ip firewall filter add action=accept chain=input comment="OpenVPN" dst-port=1194 protocol=tcp in-interface-list=WAN place-before=0
Создаем пользователей
/ppp secret add name="client-1" password="Qdjo0102$030405!" service=ovpn profile="openvpn-server" /ppp secret add name="client-2" password="ZdRb01#0203&0405" service=ovpn profile="openvpn-server" /ppp secret add name="client-3" password="VdRt010@2030*405" service=ovpn profile="openvpn-server"
Для любителей copy-paste:
/system clock set time-zone-name=Europe/Moscow /system ntp client set enabled=yes client servers add address=time.google.com add address=0.pool.ntp.org add address=1.pool.ntp.org add address=2.pool.ntp.org add address=3.pool.ntp.org /certificate add name="openvpn-ca" country="ru" state="Dmitrov" locality="Dmitrov" organization="openvpn" unit="ou" common-name="openvpn-ca" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign,tls-client,tls-server /certificate add name="openvpn-srv" country="ru" state="Dmitrov" locality="Dmitrov" organization="openvpn" unit="ou" common-name="openvpn-srv" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server /certificate add name="openvpn-client-template" country="ru" state="Dmitrov" locality="Dmitrov" organization="openvpn" unit="ou" common-name="openvpn-client-template" key-size=4096 days-valid=365 key-usage=tls-client /certificate add name="openvpn-client-1" copy-from="openvpn-client-template" common-name="openvpn-client-1" /certificate add name="openvpn-client-2" copy-from="openvpn-client-template" common-name="openvpn-client-2" /certificate add name="openvpn-client-3" copy-from="openvpn-client-template" common-name="openvpn-client-3" /certificate sign openvpn-ca ca-crl-host=127.0.0.1 delay 60 /certificate sign openvpn-srv ca="openvpn-ca" delay 60 /certificate sign openvpn-client-1 ca="openvpn-ca" delay 60 /certificate sign openvpn-client-2 ca="openvpn-ca" delay 60 /certificate sign openvpn-client-3 ca="openvpn-ca" /ppp aaa set accounting=yes /interface bridge add name=openvpn-bridge arp=enabled /ip pool add name=openvpn-pool ranges=10.20.30.100-10.20.30.200 /ppp profile add name=openvpn-server local-address=10.20.30.1 remote-address=openvpn-pool /interface ovpn-server server set auth=sha1,md5 certificate=openvpn-srv cipher=blowfish128,aes256-cbc default-profile=openvpn-server enabled=yes require-client-certificate=yes /ip firewall filter add action=accept chain=input comment="OpenVPN" dst-port=1194 protocol=tcp in-interface-list=WAN place-before=0
PS: не забудь создать пользователей
Выгружаем сертификаты
Путей много, часто используют несколько файлов, а именно файл конфигурации, файл учетной записи пользователя, и файлы сертификатов. Самый простой все эти файлы объединить в один файл конфигурации, и использовать на всех клиентах, как на мобильных, так и на ПК
# Экспортируем один сертификат, без пароля сертификат openvpn-client-1 выгрузить нельзя, установим пароль 12345678
/certificate export-certificate openvpn-ca /certificate export-certificate openvpn-client-1 export-passphrase=12345678
Выгружаем сертификаты к себе в папку на компьютер
Файл конфигурации
client dev tun remote 10.10.10.10 1194 tcp tun-mtu 1500 tls-client nobind user nobody group nogroup ping 15 ping-restart 45 persist-tun persist-key mute-replay-warnings verb 3 cipher AES-256-CBC auth SHA1 pull auth-user-pass connect-retry 1 reneg-sec 3600 remote-cert-tls server route 0.0.0.0 0.0.0.0 route-delay 3 <ca></ca> <cert></cert> <key></key>
Теперь содержимое сертификатов необходимо вставить в нужные секции,
<ca></ca> - cert_export_openvpn-ca.crt <cert></cert> - cert_export_openvpn-client-1.crt <key></key> - cert_export_openvpn-client-1.key
Должно получиться так:
Ну вот и все Дружок!
Bonus: На мобильных клиентах может возникает ошибка при запросе пароля сертификата клиента 12345678, поэтому мы его сбросим, но для этого нужна машина на Linux)
openssl rsa -in cert_export_openvpn-client-1.key -out nopas.key
Скачиваем файлик nopas.key и получаем сертификат без пароля)
Используемые материалы: Раз Два