| Настройка VPN на основе OpenVPN 25.08.2006 | |
| 1. Предисловие.. Для большинства присутсвующих здесь VPN озночает организация шифрованого соеденения до сервера и получение в конечном итоге интернета не со своего ip-адресса.. Чтож, об том как это реализовать и будет описано в этой статье. В частности будет так же расмотренна установка мобильного клиента(т.е. можно записать на флэшку, и подключаться к впн пару кликами) Что нам нужно: шелл с правами рута, желательно дедик. Рассматривать будем сервер с ОС FreeBSD 2. Устанавливаем и конфигурируем OpenVPN Эта часть статьи почти полностью написана KaDaBR'ой(vbs скрипты и не большие переделки конкретно под freebsd с меня) 2.1 Устанавливаем OpenVPN на сервер # wget http://openvpn.net/release/openvpn-2.0.7.tar.gz # tar xvzf ./openvpn-2.0.7.tar.gz # cd ./openvpn-2.0.7 # ./configure # make # make install # rehash 2.2 Создаём ключи после успешного завершения всех операций необходимо создать сертефикаты и ключи Заходим в папку с исходниками OpenVPN и в ней: # cd ./easy-rsa # ee ./vars (в этом файлике внизу изменяете данные для подписи ключей под себя) Внимание! Если у вас неустановлен баш, то перед следующими операциями нужно набрать в консоли "sh" # . ./vars (загружаем эти переменные в оболочку) # ./clean-all (отчищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей) # ./build-ca (Создаем Certificate Authority для сервера) # ./build-key-server server(Создаем сертификат X.509 для сервера) # ./build-key client (Создаем сертификат X.509 для клиента) Будьте внимательны при заполнени данных сертификатов, поле Common Name обязательно к заполнению, причем для сервера оно должно быть одно, а для клиента другое. Например в поле Common Name при генерации сертификата X.509 для сервера можно написать server, а для клиента соотвественно client Создаем ключ Диффи Хельман(о нем можно почитать здесь: http://www.rsasecurity.com/rsalabs/node.asp?id=2248) # ./build-dh Теперь выходим из sh написав команду "exit" И в конце создаем ключ для tls-аутификации # openvpn --genkey --secret keys/ta.key После всех этих манипуляций в папке keys получается много файлов: ca.crt - Главный CA сертификат, этот файл нужен и клиенту и серверу dh1024.pem - ключ Диффи Хельман, этот файл нужен только серверу server.crt - Сертификат сервера, нужен только серверу server.key - Ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл) client.crt - Сертификат клиента, нужен только клиенту client.key - Ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл) ta.key - TLS-ключ, нужен и клиенту и серверу Следовально серверу достаются файлы ca.crt, dh1024.pem, server.crt, server.key, ta.key, а клиентуca.crt, dh1024.pem,client.crt, client.key, ta.key 2.3 Настраиваем сервер Файл конфигурации можно разместить где угодно, например в /etc/openvpn, так же для удобства скопируем туда все ключи(ca.crt, dh1024.pem, server.crt, server.key, ta.key). Создаем конфигурационный файл openvpn.conf следующего содержимого: proto udp #Сервер слушает только udp-порт local 100.100.100.100 #IP, с которого принимаем подключения dev tap #используемый тип устройства tap port 1194 #используемый порт 1194 tls-server #включаем TLS аутификацию tls-auth ta.key 0 #указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента ca ca.crt #указываем файл CA cert server.crt #указываем файл с сертификатом сервера key server.key #указываем файл с ключем сервера dh dh1024.pem #указываем файл Диффи Хельман mode server #включаем режим сервера ifconfig 192.168.231.5 255.255.255.0 #задаем IP-адрес сервера и маску подсети виртуальной сети ifconfig-pool 192.168.231.6 192.168.231.20 #задаем диапазон IP-адресов выдаваемых клиентам push "route-gateway 192.168.231.5" #отправляем клиентам строку, с указанием шлюза push "dhcp-option DNS 192.168.231.5" #задаём адрес dns-сервера duplicate-cn #ВАЖНО! разрешаем пользоватся одним и тем же ключем, нескольким клиентам одновременно, иначе прийдется для всех клиентов генерировать отдельные сертификаты. cipher DES-EDE3-CBC #включаем шифрацию пакетов Triple-DES user nobody #устанавливаем OpenVPN-демону права пользователя nobody group nobody persist-tun #Не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart persist-key #Не перечитывать ключи после получения SIGUSR1 или ping-restart comp-lzo #Включить сжатие траффика keepalive 10 120 #Проверка жизни клиента каждые 10 секунд, если в течении 120 секунд не пришел ответ, то закрывается соединение verb 3 #Уровень информации для отладки Всё, сервер настроен, теперь мы его запускаем: openvpn vpn.conf(или то имя, которое вы дали конфигу) Если vpn незапуститься, и ошибка будет что типа "непподерживаеться tun\tap устройство" то делаем kldload if_tap и загружаем заного 2.4 Настраиваем клиент под Windows Скачиваем клиента по ссылке http://openvpn.se/files/install_pack....3-install.exe ![]() Устанавливаем необходимые компоненты: ![]() OpenVPN User-Space Components OpenVPN GUI OpenSSL DLLs TAP-Win32 Virtual Ethernet Adapter Теперь приступим к настройке клиента. Создадим конфигурационный файл openvpn.ovpn в папке config (Например C:\Program Files\OpenVPN\config). И скопируем туда же все необходимые ключи для работы (ca.crt, dh1024.pem, client.crt, client.key, ta.key). ![]() Содержимое файла openvpn.ovpn: client #указываем OpenVPN, что необходимо работать в режиме клиента proto udp #указываем, что сервер работает через udp remote x.x.x.x #хост, к которому присоединяемся port 1194 #порт к которому следует подключатся dev tap #используемый тип устройства tap resolv-retry infinite #количество повторов соединения redirect-gateway #ВАЖНО! переназначить стандартный шлюз на шлюз VPN persist-tun #Не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart persist-key #Не перечитывать ключи после получения SIGUSR1 или ping-restart tls-client #указываем, что подключение осуществляется по средствам tls-ключа tls-auth ta.key 1 #указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента dh dh1024.pem #указываем файл Диффи Хельман ca ca.crt #указываем файл CA cert client.crt #указываем файл с сертификатом клиента key client.key #указываем файл с ключем клиента cipher DES-EDE3-CBC # Triple-DES #включаем шифрацию пакетов comp-lzo #Включить сжатие траффика verb 3 #Уровень информации для отладки Теперь можно проверить работу клиента. Нажимаем правой кнопкой мышки по значку в трее. и выбираем Connect ![]() Сначала вылезет вот такое окошко: ![]() Следом если пройдет все хорошо, то в трее загорится зеленый значек с ip-адресом виртуального VPN соединения. ![]() Отключаемся тем же путем что и соединялись только выбрав Disсonnect. 2.5 Мобилизация Теперь приступим к мобилизации нашего OpenVPN дистрибутива. Для начала скопируем на переносной носитель информации всю папку OpenVPN (C:\Program Files\OpenVPN) Далее создадим в корне переносного носителя три VB-скрипта: InstallVPN.vbs: Set WSHShell = WScript.CreateObject("WScript.Shell") set a = createobject("Scripting.FileSystemObject") set f = a.getfolder(".") WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN",f.path & "OpenVPN", "REG_SZ" WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\config_dir",f .path & "OpenVPN\config", "REG_SZ" WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\config_ext"," ovpn", "REG_SZ" WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\exe_path",f.p ath & "OpenVPN\bin\openvpn.exe", "REG_SZ" WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\log_dir",f.pa th & "OpenVPN\log", "REG_SZ" WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\priority","NO RMAL_PRIORITY_CLASS","REG_SZ" WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\log_append",0 , "REG_SZ" aScript = WSHShell.run("OpenVPN\bin\tapinstall.exe install OpenVPN\driver\OemWin2k.inf tap0801") UninstallVPN.vbs: Set WSHShell = WScript.CreateObject("WScript.Shell") aScript = WSHShell.run("OpenVPN\bin\tapinstall.exe remove tap0801") WshShell.RegDelete "HKEY_LOCAL_MACHINE\Software\OpenVPN\" WshShell.RegDelete "HKEY_LOCAL_MACHINE\Software\OpenVPN-GUI\" RunVPN.vbs: Set WSHShell = WScript.CreateObject("WScript.Shell") aScript = WSHShell.run("OpenVPN\bin\openvpn-gui.exe") Теперь, когда нам необходимо восользоватся VPN, вставляем переносной носитель информации, и запускаем файл InstallVPN.vbs. Дожидаемся установки драйвера TUN-TAP Win32, далее запускаем RunVPN.vbs. После запуска OpenVPN GUI, выбираем Connect, и насдаждаемся мобильным VPN. (c) KaDaBRa(icq 161222, email: kadabra@iks.ru) 2006 3. Выдаём ВПН'у интернет ЗЫ сразу говорю что этот способ не претендует на лучшее решение=) Ядро должно быть скомпиленно со следующими опциями: options IPFIREWALL options IPDIVERT options IPFIREWALL_FORWARD ( ipfw впнриципе можно подгрузить и модулем: kldload ipfw; ipfw add 65000 allow ip from any to any А если у вас FreeBSD >= 6.0 то перекомпиляция ядра может вообще непонадобиться: kldload ipdivert ) В /etc/rc.conf прописываем следующие строчки: firewall_enable="YES" firewall_type="/etc/firewall.conf" firewall_quiet="YES" firewall_logging="YES" firewall_flags=" gateway_enable="YES" natd_enable="YES" Содержимое /etc/firewall.conf : add 65000 allow ip from any to any Нужно перезагрузиться Далее: natd -a х.х.х.х -p 8668 # где x.x.x.x - внешний ip-адресс сервера ipfw add 10 divert 8668 ip from 192.168.231.0/24 to any ipfw add 20 fwd y.y.y.y ip from x.x.x.x to any # где y.y.y.y - дефолтный гейт(можно посмотреть в rc.conf) а x.x.x.x тот самый адресс, который указывали в первой команде ipfw add 30 divert 8668 ip from any to x.x.x.x # думаю что такое x.x.x.x всем понятно Вот вообщем то и всё, теперь покрайней мере вы сможете попинговать инетовские адреса с клиента, а если правильно указали днс сервера то и получите полноценный мобильный клиент со скрытием ip - адресса и шифрацией трафика Будут вопросы - спрашивайте Обсуждение на форуме: http://forum.zloy.org/showthread.php?t=17241 | |