Шукати в цьому блозі

пʼятниця, 9 вересня 2022 р.

Налаштування OpenVPN-сервера на Mikrotik

Перше зауваження, OpenVPN доволі чутливий до розходження часу між клієнтом та сервером, тому, перед тим як почати створювати сертифікати та налаштовувати OpenVPN-сервер, давайте спочатку змусимо наш роутер правильно виставляти і синхронізувати час. Не всі провайдери віддають по DHCP інформацію про свої NTP-сервера (якщо взагалі їх мають), тому будемо користуватися публічними серверами і намагатися час від часу оновлювати інформацію про них.
/system clock set time-zone-name=Europe/Kiev
/system script add dont-require-permissions=no name=NTPupdate owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive source=":global SYSname [/system identity get name];\r\
    \n\r\
    \n# NTP pools to use (check www.pool.ntp.org)\r\
    \n:global SYSntpa \"0.ua.pool.ntp.org\";\r\
    \n:global SYSntpb \"1.ua.pool.ntp.org\";\r\
    \n\r\
    \nping \$SYSntpa count=2 do-not-fragment;\r\
    \nping \$SYSntpb count=2 do-not-fragment;\r\
    \n\r\
    \n# Resolve the two ntp pool hostnames\r\
    \n:local ntpipa [:resolve \$SYSntpa];\r\
    \n:local ntpipb [:resolve \$SYSntpb];\r\
    \n\r\
    \n# Get the current settings\r\
    \n:local ntpcura [/system ntp client get primary-ntp];\r\
    \n:local ntpcurb [/system ntp client get secondary-ntp];\r\
    \n\r\
    \n# Define a variable so we know if anything's changed.\r\
    \n:local changea 0;\r\
    \n:local changeb 0;\r\
    \n\r\
    \n# Change primary if required\r\
    \n:if (\$ntpipa != \$ntpcura) do={\r\
    \n    :put (\"Old: \" . \$ntpcura . \" New: \" . \$ntpipa);\r\
    \n    :put \"Changing primary NTP\";\r\
    \n    /system ntp client set primary-ntp=\"\$ntpipa\";\r\
    \n    :set changea 1;\r\
    \n    }\r\
    \n\r\
    \n# Change secondary if required\r\
    \n:if (\$ntpipb != \$ntpcurb) do={\r\
    \n    :put (\"Old: \" . \$ntpcurb . \" New: \" . \$ntpipb);\r\
    \n    :put \"Changing secondary NTP\";\r\
    \n    /system ntp client set secondary-ntp=\"\$ntpipb\";\r\
    \n    :set changeb 1;\r\
    \n    }\r\
    \n"
/system scheduler add comment="Check and set NTP servers" interval=12h name=NTPupdate on-event="/system script run NTPupdate\r\
    \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=jan/01/1970 start-time=00:00:00
Все! Тепер ми знаємо кунг-фу… тобто тепер наш роутер має коректний час. В принципі такі налаштування бажано зробити як на роутері з OpenVPN-сервером так і з OpenVPN-клієнтом.

Тепер давайте згенеруємо та підпишемо сертифікати.

Створимо корневий сертифікат нашого "сертифікаційного центру".

/certificate add name=ca country="UA" state="AI" locality="Irpin" organization="OSBB" unit="Head" common-name="ca" key-size=8192 days-valid=3650 key-usage=crl-sign,key-cert-sign
/certificate sign ca
Тепер створимо сертифікат та закритий ключ для OpenVPN-сервера.
/certificate add name=ovpn-server country="UA" state="AI" locality="Irpin" organization="OSBB" unit="OpenVPN-server" common-name="ovpn-server" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server
/certificate sign ovpn-server ca="ca"
Ну й створюємо клієнтський сертифікат.
/certificate add name=ovpn-muter country="UA" state="AI" locality="Kyiv" organization="Muter" unit="OpenVPN-client-00" common-name="ovpn-muter" key-size=2048 days-valid=3650 key-usage=tls-client
/certificate sign ovpn-muter ca="ca"
Ну от, корньовий сертифікат, сертифікат OpenVPN-сервера та OpenVPN-клієнта згенеровано. Подивимося, що у нас вийшло:
/certificate print terse 
 0 KL A  T name=ca digest-algorithm=sha256 key-type=rsa country=UA state=AI locality=Irpin organization=OSBB unit=Head common-name=ca key-size=8192 subject-alt-name="" days-valid=3650 trusted=yes key-usage=key-cert-sign,crl-sign serial-number=251F3D523
8145BF4 fingerprint=58d9ff1808abbd38019c2e1b1d4b1f5c71a24d41fd6fc0e7b031661e0097e0aa akid="" skid=31c7dab19f80c4fa884d5efb9298a45e7de4d8cc invalid-before=sep/09/2022 13:58:13 invalid-after=sep/06/2032 13:58:13 expires-after=521w2d23h48m56s 
 1 K   I   name=ovpn-server digest-algorithm=sha256 key-type=rsa country=UA state=AI locality=Irpin organization=OSBB unit=OpenVPN-server common-name=ovpn-server key-size=4096 subject-alt-name="" days-valid=3650 trusted=no key-usage=digital-signature,k
ey-encipherment,tls-server ca=ca serial-number=3EDCD88C2647E3F4 fingerprint=0554fd7ec66f744918a362350ab9bebeb715ccb0e7d425f87ec1b0b398a1b069 akid=31c7dab19f80c4fa884d5efb9298a45e7de4d8cc skid=4bf227acb26304896949a77468a438dceac2222f invalid-before=sep/
09/2022 14:01:49 invalid-after=sep/06/2032 14:01:49 expires-after=521w2d23h52m32s 
 2 K   I   name=ovpn-muter digest-algorithm=sha256 key-type=rsa country=UA state=AI locality=Kyiv organization=Muter unit=OpenVPN-client-00 common-name=ovpn-muter key-size=2048 subject-alt-name="" days-valid=3650 trusted=no key-usage=tls-client ca=ca s
erial-number=4FBA81F2BB4BB3C4 fingerprint=3f8eef1079b14c1d81478f22263f382ab10f21ccc5fa010d0443aa019ee7a2b0 akid=31c7dab19f80c4fa884d5efb9298a45e7de4d8cc skid=d319e641924be93afe83eca512a1cb7ba7dbd879 invalid-before=sep/09/2022 14:07:30 invalid-after=sep
/06/2032 14:07:30 expires-after=521w2d23h58m13s
Експортуємо клієнтський сертифікат в файл формату PKCS12
/certificate export-certificate ovpn-muter type=pkcs12 export-passphrase="p@\$\$w0rd"
/file print terse where type=".p12 file" 
 0 name=cert_export_ovpn-muter.p12 type=.p12 file size=5.8KiB creation-time=sep/09/2022 14:12:52
Як бачимо, за допомогою RouterOS доволі легко керувати сертифікатами, не треба заморочуватися з будь-якими додатковими інструментами. Ну ok, поїхали далі.

Нарешті ж давайте налаштуємо OpenVPN-сервер.

І хоч OpenVPN-канали зв'язку можна налаштовувати як точка-точка, ми підемо більш "універсальним" шляхом і будемо використовувати пул адрес для наших клієнтів. Створення каналів точка-точка нехай залишиться як "домашнє завдання".

/ip pool add name=ovpn-pool ranges=192.168.120.98-192.168.120.110
/ppp profile add name=ovpn local-address=192.168.120.97 remote-address=ovpn-pool
/ppp aaa set accounting=yes
/interface ovpn-server server set auth=sha1 certificate=ovpn-server cipher=aes128,aes256 default-profile=ovpn enabled=yes netmask=28 require-client-certificate=yes
Додаємо користувачів
/ppp secret add name=muter password=PASSWORD profile=ovpn service=ovpn
Не забуваємо відкрити 1194/tcp на вхідних правилах файрволу.
/ip firewall filter add action=accept chain=input dst-port=1194 protocol=tcp
Ну от, ми налаштували OpenVPN-сервер на Mikrotik-у.

OpenVPN-сервер налаштовано, давайте тепер налаштуємо OpenVPN-клієнта.

Для початку перенесемо експортований файл сертифікату cert_export_ovpn-muter.p12 на клієнтський роутер.

Імпортуємо сертифікат.

/certificate import file-name=cert_export_ovpn-muter.p12 passphrase="p@\$\$w0rd"
     certificates-imported: 2
     private-keys-imported: 1
            files-imported: 1
       decryption-failures: 0
  keys-with-no-certificate: 0
  /certificate print terse 
 0 K     T name=cert_export_ovpn-muter.p12_0 issuer=C=UA,ST=AI,L=Irpin,O=OSBB,OU=Head,CN=ca digest-algorithm=sha256 key-type=rsa country=UA state=AI locality=Kyiv organization=Muter unit=
OpenVPN-client-00 common-name=ovpn-muter key-size=2048 subject-alt-name="" days-valid=3650 trusted=yes key-usage=tls-client serial-number=4FBA81F2BB4BB3C4 fingerprint=3f8eef1079b14c1d8147
8f22263f382ab10f21ccc5fa010d0443aa019ee7a2b0 akid=31c7dab19f80c4fa884d5efb9298a45e7de4d8cc skid=d319e641924be93afe83eca512a1cb7ba7dbd879 invalid-before=sep/09/2022 14:07:30 invalid-after=
sep/06/2032 14:07:30 expires-after=521w2d23h24m31s 
 1    A  T name=cert_export_ovpn-muter.p12_1 issuer=C=UA,ST=AI,L=Irpin,O=OSBB,OU=Head,CN=ca digest-algorithm=sha256 key-type=rsa country=UA state=AI locality=Irpin organization=OSBB unit=
Head common-name=ca key-size=8192 subject-alt-name="" days-valid=3650 trusted=yes key-usage=key-cert-sign,crl-sign serial-number=251F3D5238145BF4 fingerprint=58d9ff1808abbd38019c2e1b1d4b1
f5c71a24d41fd6fc0e7b031661e0097e0aa akid="" skid=31c7dab19f80c4fa884d5efb9298a45e7de4d8cc invalid-before=sep/09/2022 13:58:13 invalid-after=sep/06/2032 13:58:13 expires-after=521w2d23h15m
14s
А тепер просто з'єднаємося з сервером
/interface ovpn-client add certificate=cert_export_ovpn-muter.p12_0 cipher=aes256 connect-to=f97709ad83b1.sn.mynetname.net name=ovpn-out1 password=PASSWORD use-peer-dns=no user=muter
Якщо все було зроблено правильно, OpenVPN-тунель підніметься майже миттєво. Ну, а налаштування файрволу, маршрутизації, тощо - це тема для зовсім іншої розмови.

Немає коментарів: