MikroTik OpenVPN

Защо OpenVPN ?

OpenVPN през последните 10 години набра популярност поради няколко причини, първата е, че е отворен код, което значи, че са го прегледали много очи за дупки в сигурноста което създава доверие. Втората е, че се поддържа за всякакви операционни системи (не мисля да ги изброявам защото на практика са всички ползващи се). Може да работи както на TCP така и на UDP протокол а също и на произволен порт (например 443) което го прави труден за филтриране в защитна стена, OpenVPN може да е едновременно сървър и клиент и не на последно място има добра поддръжка на сертификати. Не знам да има друг VPN с толкова много екстри в него. pptp e все още актуален, ползва се навсякъде, но пък е несигурен и лесно може да се филтрира. Големите производители на мрежов хардуер предлагат сигурни решения но достатъчно скъпи за да са нерентабилни за един офис да кажем от 10 човека персонал. Така стигаме до извода, че по високото ниво на сигурност в бюджетния сегмент малък и среден бизнес може да се получи от рутери с L2tp/ipsec или OpenVPN.

забележка: RouterOS засега все още не поддържа пренос по UDP и LZO компресия.

В интернет има различни примери за OpenVPN решения, една част от които чисто теоретични, други недовършени или в повечето случаи клиента е десктоп операционна система. В моята скромна практика обаче често задачата е два или повече обекта (нека ги наречем офиси) да имат нужда от сигурен тунел по между си, по който да тече само частната информация.

Нека да разгледаме картинката по долу и да поразсъждаваме върху нея. Имаме три отдалечени рутера някъде в Интернет на една и съща фирма или организация. Трите рутера са трите офиса на фирмата или организацията които ползват някакъв доставчик на Интернет без значение къде и как доставя услугата. Трите офиса имат вътрешни LAN мрежи които са оцветени в зелено, тези мрежи трябва да имат достъп до Интернет през локалния си доставчик от WAN порта на рутера и достъп до другите LAN мрежи на другите рутери чрез OpenVPN защитен тунел преминаващ през Интернет оцветен в червено. Тоест лаптопа ще отвори https://google.com от браузера си през местния си Интернет доставчик и сървъра на фирмата http://192.168.100.254 през OpenVPN защитен криптиран тунел.

Защо е нужно това ? Само си представете, че телефона на секретарката, pdf файла със заплатите, вътрешния мейл в който има списък с последните непрегледани порно сайтове излезе наяве в Интернет пространството и ще разберете защо !

Преди да затракаме по клавиатурата с треперещи пръсти трябва обаче да изясним няколко неща относно горната схема. OpenVPN ще криптира трафика само в тунела който преминава през големия лош Интернет (оцветено в червено) което на практика значи, че от лаптопа до червения рутер LAN трафика няма да е защитен (оцветен в зелено), тоест ако служител в office2 по някакъв начин успее да прихване и копира кукитата на секретарката от вътрешния фирмен мейл сървър 192.168.100.254 докато не са изтекли сесиите може да види неща от които ще му настръхнат косите. Служителя в доставчика на Интернет обаче, колкото и да го кефи секретарката и да има умения за man-in-the-middle атака няма този шанс защото този трафик ще мине през OpenVPN защитения тунел. Това е важно да се знае и да се има предвид когато се дава паролата “само за малко” на WiFi на служител от друга фирма от съседния офис в същата сграда, респективно също фен на сектретарката.

Ако си мислите, че това което съм написал е прекалено, значи щастливо живеете в детска градина и не знаете какво е да преминете през девете кръга на Ада с клиент параноик.

Създаване на сертификати в OpenVPN сървъра

Специално OpenVPN сървъра ще го конфигурирам през терминал защото има по добра прегледност и логически по лесно се свързват стъпките по конфигурацията.

Създавам authority сертификат в RouterOS:

/certificate
add name=CA common-name=CA organization=ITSERVICE days-valid=3650 key-usage=key-cert-sign,crl-sign
sign CA ca-crl-host=192.168.200.1 name=CA

Експортирам го локално във файл (може да се провери със /file print)

/certificate
export-certificate CA

Генериране на сертификати за сървър и клиент:

/certificate
add name=server common-name=server days-valid=3650
add name=client common-name=client days-valid=3650
sign server ca=CA name=server
sign client ca=CA name=client

Експортирам локално сертификата за клиента (няма нужда да се експортира сертификата на сървъра):

/certificate
export-certificate export-passphrase=12345678 client

Картинката по долу е само преглед в RouterOS чрез Winbox създадени ли са сертификатите в /Certificates и експортирани ли са те в /file list. Ако всичко е наред до тук във вашият рутер който ще е OpenVPN сървър тези два прозореца трябва да изглеждат така.

Конфигурация на OpenVPN сървър

Създавам потребители, пароли и какви адреси ще вдигат OpenVPN клиентите. Нарочно не използвам pool за адреси, искам да съм наясно кой клиент какъв адрес ще вдигне, за да имам възможност за допълнителна политика на маршрутизация и защитна стена.

/ppp secret
add name=office1 password=87654321 local-address=192.168.200.1 remote-address=192.168.200.2 service=ovpn 
add name=office2 password=87654321 local-address=192.168.200.1 remote-address=192.168.200.3 service=ovpn

Активирам OpenVPN сървъра, избирам сертификата на сървъра:

/interface ovpn-server server
set enabled=yes certificate=server auth=sha1 cipher=aes128 port=1194 netmask=24 require-client-certificate=yes mode=ip

Картинката по долу е само преглед в RouterOS чрез Winbox създадени ли са потребитеслките акаунти на office1 и office2 както и активацията и конфигурацията на OpenVPN сървъра.

Прехвърляне на сертификата с Filezilla

Има три различни метода за прехвърляне на сертификата: SFTP, Winbox, и FTP който ще покажа тук.

Изтегляне сертификата от OpenVPN сървъра на локалния ми компютър.

Качване сертификата от локалния ми компютър на OpenVPN клиента – office1.

Конфигуриране на OpenVPN клиента

Та, прехвърлям се на втория рутер (office1) и преминавам към неговата конфигурация с Winbox.

След като прехвърлих сертификата с Filezilla през FTP Файловете трябва да ги импортирам последователно в OpenVPN клиента като първо направя това със cert_export_CA.crt,след това със cert_export_client.crt и последно със cert_export_client.key като добавям ордолу passphrase 12345678 която създадохме при експорта на client.crt в OpenVPN сървъра.

Някои може да се запита какво значат флаговете от лявата страна на името на сертификатите и защо се променят 🙂

# KLAT
K – private-key
L – crl
A – authority
T – trusted

След което от секцията Interface кликам на + и добавям OVPN Client със следната конфигурация:

Редовете оцветени в зелено са от секцията Log на RouterOS което ясно показва, че клиента е вдигнал OpenVPN сесия със сървъра.

Маршрути между рутерите

Тъй като и трите рутера си имат маршрути по подразбиране (default gateway) те знаят, че всичките мрежи освен тези който са вдигнати на собсвтвените и интерфейси LAN, излизат през локалния им доставчик на Интернет. Това значи, че OpenVPN сървъра, ще потърси мрежата на office1 през локалния си доставчик на Интернет а не през OpenVPN тунела. За да решим този проблем трябва двата рутера да си рутират съответно мрежите през OpenVPN тунела като по този начин криптирания трафик ще е само между офисите.

Сървъра рутира локалната мрежа на клиента.

[admin@VPN-Server] > ip route add dst-address=192.168.89.0/24 gateway=192.168.200.2

Клиента рутира локалната мрежа на сървъра.

[admin@VPN-Client] > ip route add dst-address=192.168.100.0/24 gateway=192.168.200.1

Проверявам има ли свързаност от лаптопа към сървъра.

[admin@laptop] > ping 192.168.100.254
SEQ HOST                                   SIZE TTL TIME  STATUS 
0 192.168.100.254                          56  62 4ms  
1 192.168.100.254                          56  62 3ms  
2 192.168.100.254                          56  62 4ms  
3 192.168.100.254                          56  62 4ms  
sent=4 received=4 packet-loss=0% min-rtt=3ms avg-rtt=3ms max-rtt=4ms

Проверявам рутерите по пътя от лаптопа до сървъра.

[admin@laptop] > traceroute  192.168.100.254
# ADDRESS                     LOSS SENT    LAST     AVG    BEST   WORST
1 192.168.89.1                0%    5   0.2ms     0.5     0.2     1.8
2 192.168.200.1               0%    5   3.6ms     3.5     3.1     3.9
3 192.168.100.254             0%    5   3.8ms     4.5     1.7     6.6

Проверка за скорост и ресурс

След като защитихме офисите с криптирана връзка през Интернет и идва времето тържествено да пуснем тапата с шампанско по случая, трябва да се споменат две три неща. Първо криптирането на трафика е математически процес което убива процесора на софтуерния рутер (хардуерни (3) не можем да си позволим, защото струват колкото брутния вътрешен продукт на южно африканска държава).

На картинките долу давам пример как връзката през Интернет между двата рутера е средно 150 мегабита а през OpenVPN тунела е средно 15 мегабита.

Затова трябва да се съобразим с някой неща: – например, ако някой от мрежата на office1 тръгне да тегли файл с големина 1 гигабайт от сървъра, то той не само ще се изтегли десет пъти по бавно но връзката буквално ще умре поради максималното запълване с трафик на канала на OpenVPN тунела. В този момент ако секретарката иска да изтегли pdf файла със заплатите по вероятно е да не успее или ако това се случи ще бъде много бавно.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This Post Has 3 Comments

  1. Иван Тодоров

    Здравейте, първо благодарности за труда и нагледното обяснение. Използвах примера Ви за да достъпвам DVR зад мобилен интернет. Всичко работи отлично но имам един проблем и не успявам да го реша. Рутера на който е сървърната част не е с masquerade, а със sourcenat поради факта, че има повече от едно IP на входящия интерфейс и повече от един лан. Та точно там идва проблема, че не мога да направя връзка локалната мрежа към VPN-а. Когато на рутера заменя sourcenat-a с masquarade всичко работи. Бихте ли подсказали какво може да се направи? Благодаря!

  2. imnotrobot

    В примерите по горе никъде не е посочен NAT а мрежите между офисите както е при мен е с рутиране. Офис А и Офис Б между тях няма никъде NAT, интересно при вас как е топологията …

  3. Michaele

    Възможно ли е да имате Policy Routing правила в рутера ?