Конфигуриране на OpenVPN сървър с рутер Linksys WRT54GL

от ComelSoftWiki

Направо към: навигация, търсене

VPN връзки

С постоянно подобряващото се качество на достъпа до Интернет, възможностите за отдалечена връзка с офис LAN мрежата стават все по-примамлив вариант за работа на множество служители.

Възможността да работите с локалната мрежа на офиса от собствения си дом или от хотелската стая носи очевидни удобства и предимства и Ви позволява да сте в крак със събитията на работното място без оглед на това къде се намирате физически.

Ето защо виртуалните частни мрежи (VPN) вече се ползват масово като удобен начин за защитен достъп до офис мрежата през Интернет. Подробното описание на основните концепции стоящи зад VPN технологиите би отнело много време, затова тук само ще посочим основните VPN имплементации, масово използвани днес. Това са SSL, IPSec и PPTP.

Рутерите на Linksys притежават VPN функционалност от много години насам - първите IPSec съвместими устройства, BEFSX41/BEFVP41/RV042/RV082 и до днес се използват като средство за защитено свързване на офис мрежи или на отделни потребители. Някои от тях (моделите RV042/RV082) в допълнение към IPSec функциите разполагат и с вграден PPTP сървър, конфигурацията на който по правило е много по-лесна от IPSec настройките и който е удобно (но не дотолкова надеждно) средство за отдалечено свързване на единични потребители.

OpenVPN е напълно безплатен софтуер, проект с отворен код, базиран на възможностите на фамилията протоколи SSL. Предимството му спрямо IPSec се крие в неговото много по-лесно имплементиране в различни операционни системи, а спрямо PPTP - в по-добрата защита.

OpenVPN може да се инсталира като клиентски или сървърен режим под Linux/Unix/Windows/Mac с почти идентичен начин за конфигурация, а тук ще Ви покажем как да го използвате като част от фърмуера на Вашия маршрутизатор Linksys WRT54GL.

Идеята е да демонстрираме как съвсем безплатно може да получите модерно средство за отдалечен VPN достъп с най-популярния SOHO рутер на Linksys.

Крайната ни цел е да получите възможност, докато сте далеч от дома/офиса, да можете да се свържете към домашната/офис мрежата през Интернет чрез защитен канал (тунел), да получите IP адрес от локалната мрежа чрез DHCP и да можете да си комуникирате с останалите мрежови устройства по същия начин, по който бихте правили това ако сте свързани локално в мрежата - да използвате фирмената ERP, да ползвате VoIP PBX централата без никакви грижи свързани с NAT traversal, да отпечатвате документи на мрежовия принтер, да теглите документи от фирмения файлов сървър и т.н.

Преди да започнете, моля имайте предвид че настоящото упътване не бива да се разглежда като единствено възможно и оптимално! Напротив, OpenVPN поддържа сложни конфигурации, а ние сме подбрали и описали само един частен случай. Ето защо Ви препоръчваме горещо да се запознаете с документацията на OpenVPN, налична на сайта на проекта. Там ще откриете принципите на работа на софтуера, както и и множество полезна допълнителна информация, която не е описана тук.


Какво е необходимо:

Рутер Linksys WRT54GL Копие от VPN версията на фърмуера с отворен код DD-WRT (v. 24SP2), която съдържа инсталиран предварително OpenVPN Копие от OpenVPN софтуера за всеки от отдалечените компютри, от които ще се свързвате към рутера


Инсталация на фърмуера:

Ако рутерът Ви ползва оригиналния фърмуер на Linksys, изтеглете от сайта на DD-WRT версията mini, след което я инсталирайте на рутера. След като тя се инсталира върху рутера, възстановете фабричните му настройки и инсталирайте VPN версията на DD-WRT. Това ще Ви спести труда по ръчното инсталиране на OpenVPN върху рутера. След като качите VPN-фърмуера, добре е отново да върнете устройството към фабричните му настройки и да започнете конфигурацията на чисто.

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

Важна проверка: Тъй като за автентикацията на клиентите на рутера ще използваме сертификати, необходимо е да се уверим че разполагаме с достатъчно свободна nvram за съхранението им. Работа е там, че подаваме сертификатите през уеб-интерфейса на рутера, а всичко което се записва през уеб-интерфейса се пази в nvram паметта. Има голяма вероятност ако тази област се препълни, рутерът да стане неизползваем, така че е много важно да знаем предварително с колко свободна памет разполагаме и дали тя е достатъчна за нашите цели. Как да разберем това? По подразбиране фърмуерът стартира telnet сървър на рутера и Вие можете да се свържете към него от LAN мрежата. Ако ползвате Windows, oтворете команден прозорец и (ако ползвате стандартния IP адрес на рутера) напишете:

telnet 192.168.1.1

След като въведете име и парола, попадате в командния шел на фърмуера на рутера. Там изпълнете командата:

root@ovpn:~# nvram show | grep size size: 23566 bytes (9202 left)

Както е видно, в нашия случай разполагаме с 9202 свободни байта. За сертификатите и конфигурационния файл на OpenVPN сървъра са необходими между 6000 и 7000 байта и ако не разполагате с толкова, по-добре НЕ ПРОДЪЛЖАВАЙТЕ НАТАТЪК. По-надолу в страницата сме описали как се генерират сертификатите/ключовете. Те се съхраняват в текстови файлове, така че можете просто да обедините необходимите за рутера файлове в текстов редактор и да видите колко памет ще заемат при Вашия случай.


Инсталация на OpenVPN върху клиентския компютър

Тъй като вероятно по-голямата част от отдалечените потребители ще ползват Windows като ОС, тук ползваме за примера Win-версията на OpenVPN. Изтеглете я от сайта на OpenVPN и я инсталирайте. Програмата е съвсем малка и се инсталира без никакви особености. Оставете всички опции за инсталация както са маркирани по подразбиране в инсталатора. В края на инсталацията ще разполагате с още един виртуален мрежов интерфейс.


Генериране на файловете за автентикация и конфигуриране на VPN сървъра

Това е, общо взето, най-трудоемката част от целия процес, но хубавото е, че тя се прави само веднъж.

Необходимо е да се отбележи, че освен с PKI инфраструктурата (популярен метод за автентикация с частни ключове и сертификати), OpenVPN може да работи също и с предварително генериран ключ (preshared key), както и с външни модули за оторизация с потребителски имена и пароли и дори със смарт карти и т.нар. дву-факторна автентикация. PKI инфраструктурата е популярен и изпитан метод за автентикация със сертификати и частни ключове, не изисква да помните имена и пароли, а просто да разполагате със сертификат и частен ключ под формата на файлове записани на диска на клиентския компютър. Генерирането на всички сертификати ще извършим на компютъра с Windows (клиентския компютър), но това е само за удобство. Те могат да се генерират на произволна машина с инсталиран OpenVPN.

За да започнем с генерирането на файловете, отваряме инсталационната директория на OpenVPN в Program Files, след което отваряме папката easy-rsa и стартираме файла init-config.bat. Той от своя страна ще създаде файловете vars.bat и openssl.cnf. Редактираме файла vars.bat и задавайки стойности на променливите KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, и KEY_EMAIL в неговия край. Важно е всички те да са попълнени, тъй като се подават като автоматични параметри за конфигуриране на сертификатите впоследствие. След като направим това, стартираме файловете vars.bat и clean-all.bat.

След това генерираме CA (certificate authority) частния ключ и сертификата, с които пък ще подписваме сертификатите на клиента и сървъра. За целта стартираме файла build-ca.bat. Този скрипт ще генерира частния ключ ca.key и сертификата ca.crt в подпапката keys. Този сертификат е единствения файл, който трябва да присъства и при всеки клиент и при сървъра. Ще видите, че в процеса на конфигурацията му трябва да попълните няколко полета, част от които се зареждат с автоматични стойности, които въведохме в променливите от vars.bat. Остава да въведете стойност на полето Common Name.

Следващата стъпка е да генерираме частен ключ и сертификат за VPN сървъра. За целта също имаме готов скрипт, изпълняваме командата:

build-key-server server

Отново на екрана ще видите подобен процес с познатите стойности за променливите. Отговорете с Y на последните два въпроса и просто натиснете Enter на редовете питащи за парола и optional company name. В резултат в папката keys ще се появят два нови файла: server.crt и server.key. Те са необходими само за сървъра и след като ги въведем в полетата на уеб-интерфейса на рутера, могат (и следва) да бъдат изтрити от клиентския компютър. Това се отнася и за файла ca.key.

Остава да генерираме сертификат и ключ за клиентския компютър. За целта използваме скрипта build-key:

build-key client1

Ще видите почти същата процедура както при генериране на сървърните сертификат и частен ключ. След това в папката keys ще се появят още два файла - client1.key и client1.crt. Ако Ви трябват още клиентски сертификати (ще се свързват повече от 1 клиенти), можете да ги генерирате с командите build-key client2, build-key client3 и т.н. Просто внимавайте имената да са различни и да отговаряте със съответното име за полето Common Name.

Накрая остава да генерираме един последен файл с Diffie-Hellman параметрите за OpenVPN сървъра:

build-dh.bat

Изпълнението на този скрипт може да отнеме около минута-две, така че бъдете търпеливи. В резулат ще получите файла dh1024.pem, отново в директорията keys.

Връщайки се към ограничението с размера на nvram паметта на рутера, тук вече можем да сметнем колко байта ще са ни необходими от нея - съберете размера на файловете ca.crt, server.key, server.crt, dh1024.pem. Най-добре обединете всички тези файлове в един времен отделен текстов файл и пребройте символите в него. Към тях следва да се добавят и символите в полето OpenVPN Config на уеб-интерфейса (описано е по-долу). Сумарният им размер трябва да е по-малък от свободната nvram памет или конфигурацията няма да работи и възможно рутерът да стане неизползваем. Ето защо бъдете внимателни!

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


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

Отворете уеб-интерфейса на Вашия рутер, след което минете в менюто Services-VPN. В секцията OpenVPN Daemon, изберете Enable за Start OpenVPN, както и Wan Up за Start Type. В полето Public Server Cert трябва да влезе съдържанието на файла ca.crt, така че отворете този файл с обикновен текстов редактор и внимателно изкопирайте цялото му съдържание в клипборда, след което го вмъкнете в уеб-интерфейса.

Полето Certificate Revoke List оставете празно.

В полетата Public Client Cert, Private Client Key и DH PEM трябва да се попълни съдържанието на файловете, съответно server.crt, server.key и dh1024.pem

В полето OpenVPN Config въведете:

mode server proto udp port 1194 dev tap0 keepalive 10 120 server-bridge daemon verb 5 comp-lzo client-to-client dh /tmp/openvpn/dh.pem ca /tmp/openvpn/ca.crt cert /tmp/openvpn/cert.pem key /tmp/openvpn/key.pem

Тук трябва да направим едно уточнение. Една OpenVPN връзка може да работи в два режима, известни като routed и bridged. При routed режима, виртуалните устройства имат собствено адресно пространство. Като цяло, той се смята за по-ефективен и скалируем, но изисква да се конфигурира рутиране между виртуалния интерфейс на OpenVPN и локалната мрежа. Bridged-режимът симулира устройство, което хипотетично може да се опише като "софтуерен суич". При него VPN виртуалните мрежови интерфейси, както и реалните такива използват IP адреси от една и съща подмрежа. Освен това той не изисква никакво рутиране и позволява във VPN тунела да влизат broadcast пакетите, които Windows използва в Network Neighborhood, както и в NetBIOS споделянето на файлове. DHCP сървърът в локалната мрежа също така може да раздава адреси на свързаните VPN клиенти и като цяло предоставя повече удобство за пътуващите потребители.

Ето защо в този пример ползваме bridged режима.

Остава да настроим още две неща на сървъра, отворете Administration-Commands и въведете в полето за изпълнение на команди:

openvpn --mktun --dev tap0 brctl addif br0 tap0 ifconfig tap0 0.0.0.0 promisc up

след което натиснете Save Startup.

След това, в същото поле въведете: iptables -A INPUT -i tap0 -j ACCEPT iptables -I INPUT -p udp --dport 1194 -j ACCEPT

и натиснете Save Firewall.

Тези команди осигуряват активирането на бридж интерфейса, а също и внасят необходимите правила в защитната стена на рутера, необходими за нормалната работа на VPN тунела.

След като въведете и потвърдите всичко, рестартирайте рутера. След рестарта би следвало да имате стартиран и чакащ за клиенти OpenVPN сървър.

Тъй като е възможно да е станала грешка при конфигурирането, можете да включите log-модула на рутера и да следите за съобщения във файла /var/log/messages. Модулът се включва от Services-Services-System Log. При нормално стартиране трябва да видите нещо подобно: във файла:

root@ovpn:/tmp/openvpn# cat /var/log/messages | grep openvpn Nov 23 16:33:01 ovpn daemon.notice openvpn[1371]: Diffie-Hellman initialized with 1024 bit key Nov 23 16:33:02 ovpn daemon.notice openvpn[1371]: TLS-Auth MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ] Nov 23 16:33:02 ovpn daemon.notice openvpn[1371]: TUN/TAP device tap0 opened Nov 23 16:33:02 ovpn daemon.notice openvpn[1371]: TUN/TAP TX queue length set to 100 Nov 23 16:33:03 ovpn daemon.notice openvpn[1371]: Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ] Nov 23 16:33:03 ovpn daemon.notice openvpn[1486]: Socket Buffers: R=[32767->65534] S=[32767->65534] Nov 23 16:33:03 ovpn daemon.notice openvpn[1486]: UDPv4 link local (bound): [undef]:1194 Nov 23 16:33:03 ovpn daemon.notice openvpn[1486]: UDPv4 link remote: [undef] Nov 23 16:33:03 ovpn daemon.notice openvpn[1486]: MULTI: multi_init called, r=256 v=256 Nov 23 16:33:03 ovpn daemon.notice openvpn[1486]: Initialization Sequence Completed

Можете да проверите дали сървърът работи още и с командата:

root@ovpn:/tmp/openvpn# ps

 PID USER       VSZ STAT COMMAND
   1 root      1468 S    /sbin/init noinitrd
   2 root         0 SW   [keventd]
   3 root         0 RWN  [ksoftirqd_CPU0]
   4 root         0 SW   [kswapd]
   5 root         0 SW   [bdflush]
   6 root         0 SW   [kupdated]
  10 root         0 SW   [mtdblockd]
  14 root      1508 S    watchdog
  93 root      1464 S    resetbutton
 219 root      2580 S    httpd -p 80
 284 root      1460 S    process_monitor
 375 root       696 S    cron
 600 root      1460 S    wland
1348 root       800 S    dnsmasq --conf-file=/tmp/dnsmasq.conf
1355 root      1176 S    telnetd
1386 root      1176 S    syslogd -L
1393 root      1176 S    klogd

1486 root 2064 S openvpn --config /tmp/openvpn/openvpn.conf --route-up /tmp/openvpn/route-up.sh --down /tmp/openvpn/route-down.sh --daemon

1721 root      1204 S    -sh
1963 root      1180 R    ps


Конфигуриране на клиентския компютър:

След като OpenVPN сървърът е конфигуриран и стартиран, остава да настроим и изпробваме връзката с VPN клиента. Клиентите се настройват по подобен на сървъра начин - а именно с конфигурационен файл указващ местоположението на сертификатите във файловата система, както и останалите необходими за връзката параметри.

При инсталацията, OpenVPN генерира примерен клиентски конфигурационен файл (client1.ovpn), който можете да намерите в папката sample-config. Можете да ползвате него за шаблон и внасяйки съответните промени да го запишете в папката config. След това, GUI-приложението Open VPN GUI автоматично ще Ви даде възможност за стартиране на VPN конекция за всеки от откритите конфигурационни файлове в тази папка (при Windows, те трябва да са с разширение .ovpn).

Стандартно генерираният конфигурационен файл съдържа настройка за routed-vpn връзка, така че се налага да въведем следните корекции:

Редът съдържащ dev tun трябва да стане dev tap.

Редът съдържащ remote my-server-1 1194 трябва да стане remote XX.XX.XX.XX 1194, като замените XX.XX.XX.XX с IP адреса на рутера (на неговия WAN порт).

Остава само да укажем във файла пълните пътища до двата сертфиката и частния ключ на клиента:

ca "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt" cert "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\client1.crt" key "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\client1.key"

Обърнете внимание на кавичките и двойните наклонени черти, които трябва да се използват в Windows.

Запишете файла като client1.ovpn в папката config.

Стартирайте Open VPN GUI - приложението ще се появи като икона в system tray. Щракнете с десния бутон върху иконата и изберете Connect (ако имате повече от един конфигурационен файл, ще имате Connect команда за всеки от файловете).

Ако всичко е наред, след няколко секунди клиентския компютър би следвало да се свърже към сървъра и да получите адрес и достъп до локалната Ви мрежа. Изпробвайте връзката като опитате да видите машините в мрежата и размените файлове между тях.


Допълнителна информация:

Както подчертахме в началото на тази страница, моля имайте предвид че не бива да гледате на нея като на окончателно и единствено правилно средство за изграждане на OpenVPN връзка. Както всеки друг open source проект, OpenVPN Ви предоставя безплатно мощен набор от функции, но в замяна изисква да отделите време за да се запознаете поне в най-общи линии с принципите му на работа.

Ето защо Ви препоръчваме да се запознаете добре с документацията налична на сайта на проекта. Ще откриете много интересни детайли и VPN сценарии, които не се споменават тук:

Изключително полезна презентация с концепциите, историята и предимствата на VPN технологията

Компактно представяне на OpenVPN проекта, съдържа най-важната информация на една страница

Документация на OpenVPN


OpenVPN FAQ

Проблеми с PPTP

OpenVPN с фърмуера DD-WRT

Лични инструменти