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.path & "OpenVPN\bin\openvpn.exe", "REG_SZ"
WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\log_dir",f.path & "OpenVPN\log", "REG_SZ"
WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\OpenVPN\priority","NORMAL_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.
© 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 - адресса и шифрацией трафика
Будут вопросы - спрашивайте