Начальная подготовкаnnПеред началом настройки сервера необходимо настроить центр сертификации, которым можно будет подписать серверный и пользовательские сертификаты.n
Услуги по настройке vpn сервера, [email protected]
В первую очередь нужно установить необходимые нам пакеты:n
$ sudo apt-get updaten$ sudo apt-get install openvpn easy-rsa isc-dhcp-server ufw
Далее необходимо скопировать шаблонную директорию easy-rsa в домашнюю директорию:n
$ make-cadir ~/openvpn-ca
Для настройки переменных центра сертификации нам с вами необходимо отредактировать файл ~/openvpn-ca/vars:n
export KEY_COUNTRY="USA"nexport KEY_PROVINCE="CA"nexport KEY_CITY="SanFrancisco"nexport KEY_ORG="Fort-Funston"nexport KEY_EMAIL="[email protected]"nexport KEY_OU="MyOrganizationalUnit"
Данным переменным можно задать желаемые значения или же просто оставить их как есть, главное – не оставлять пустыми.nТакже нужно отредактировать значение KEY_NAME, которое заполняет поле субъекта сертификатов:nexport KEY_NAME=»server» Теперь можно использовать заданные в файле vars переменные и утилиты easy-rsa для создания центра сертификации. Далее, находясь в директории центра сертификации,nнужно использовать команду source к файлу vars:n
$ cd ~/openvpn-can$ source vars
Должен появиться следующий вывод:n
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/%username%/openvpn-ca/keys
Удалить все предыдущие созданные ключи можно следующей командой:n
$ ./clean-all
Теперь мы можем создать корневой центр сертификации командой:n
$ ./build-ca
На этом создание центра сертификации завершено. Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера:n
$ ./build-key-server server
Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.nГенерация ключа для клиента:n
$ ./build-key client1
Генерация ключа протокола Диффи-Хеллмана, используемого при обмене ключами:n
$ ./build-dh
Далее нужно сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:n
$ openvpn --genkey --secret keys/ta.key
После этого можно приступать к настройке непосредственно сервера OpenVPN.n
Объединение серверов OpenVPN, слушающих разные порты
Для реализации повышенной доступности нашего VPN-сервера было решено объединить в одной виртуальной подсети несколько серверов, каждый из которых прослушивал бы свой порт. На данный момент из-за отсутствия многопоточности у OpenVPN действует правило «один демон – один порт», поэтому это единственная возможность связать клиентов, если им приходится использовать для подключения к серверу различные порты. В качестве используемых портов были выбраны 53 UDP, 53 TCP и 443 TCP. Соответственно, для каждого из запущенных демонов OpenVPN необходим отдельный виртуальный TUN/TAP-адаптер. Использование VPN второго уровня позволяет объединить их в мост, таким образом объединив клиентов различных серверов OpenVPN в одну подсеть. Ниже приведены опции из конфигурационного файла одного из трех серверов:n
//Порт, который будет слушать серверnport 443n//Используемый сервером транспортный протоколnproto tcpn//Имя сетевого адаптера, используемого данным серверомndev tap0n//Режим работы сервера на втором уровнеnserver-bridgen//Включение принудительного перенаправления трафика клиентовn//в VPNnpush "redirect-gateway def1 bypass-dhcp"n//Возможность клиентам сервера видеть друг друга. Остальныеn//опции не являются ключевыми для рассматриваемойn//конфигурации и могут быть использованы по усмотрениюnclient-to-client
Настройки для клиента
Также необходимо обратить внимание на процесс создания конфигурационных файлов для клиентов нашей VPN. Все настройки OpenVPN могут быть переданы как ключи запуска демона, однако для удобства пользователя OpenVPN поддерживает использование файлов с расширением ovpnnи conf, в которые могут быть записаны списком желаемые настройки. Также в такой файл можно записать данные пользовательского сертификата. Особенным для используемой в данной конфигурацииnявляется способ записи в конфигурационный файл данных об адресе VPN-сервера:n
# This configuration designed for use with <connection> blocksn# for 3 servers on one machinen<connection>nremote my.own.vpn 53 udpn</connection>n<connection>nremote my.own.vpn 53 tcpn</connection>n<connection>nremote my.own.vpn 443 tcpn</connection>
Данная группа параметров позволяет клиенту автоматически предпринимать попытки подключения к любому из перечисленных серверов. В нашем случае это один и тот же адрес (с доменным именем my.own.vpn), но различные номера портов на нем, соответствующие различным демонам OpenVPN. В зависимости от настроек следующий в очереди попыток подключения сервер может быть выбран из списка последовательно или случайно. После формирования конфигурационные файлы, содержащие данные сертификата, следует доставлять клиентам по защищенным каналам – например, посредством sftp:n
sftp [email protected]:configs/client1.ovpn
Настройка сетевых интерфейсов
Для конфигурации сетевых интерфейсов, используемых серверами OpenVPN, и объединения их в мост необходимо добавить в файл /etc/network/interfaces следующие строки:n
auto br0niface br0 inet staticnbridge_ports tap0 tap1 tap2nnetwork 192.168.11.0naddress 192.168.11.1nnetmask 255.255.255.0nbroadcast 192.168.11.255nauto tap0niface tap0 inet manualnauto tap1niface tap1 inet manualnauto tap2niface tap2 inet manual
Такие настройки автоматически будут поднимать соответствующие виртуальные сетевые интерфейсы при включении машины, при этом они сразу же будут объединены в мост.n
Настройка DHCP-сервера
У OpenVPN есть встроенный механизм распределения IP-адресов внутри VPN, однако работает он только с клиентами, подключившимися к серверу посредством клиентского ПО. Следовательно, для корректной работы устройств, подключившихся через шлюз, необходимо использовать внутриnVPN отдельный DHCP-сервер. Для настройки ISC DHCP-сервера на мостовом сетевомnинтерфейсе следует в файле /etc/default/isc-dhcp-server записать имя такового интерфейса, которое было задано в предыдущем пункте:n
INTERFACES="br0"
При задании опций в конфигурационном файле нас особенно интересуют следующие опции:n
option classless-static-routes code 121 = array of unsigned integer 8;noption ms-classless-static-routes code 249 = array of integer 8;
Данные опции, по сути, являются объявлениями переменных, предназначенn
option classless-static-routes 0, 192.168.11.1;noption ms-classless-static-routes 0, 192.168.11.1;
Данные опции задают значение объявленным ранее переменным. В нашем случае это значение равно адресу основного шлюза нашей VPN. Данные строки должны быть помещены в раздел декларации подсети, в которой будет работать DHCP-сервер.n
Настройка доступа в интернет
Проброс трафика из VPN в интернет будет производиться посредством iptables. В файл /etc/ufw/before.rules необходимо добавить следующие правила для активации NAT:n
# START OPENVPN RULESn# NAT table rulesn*natn:POSTROUTING ACCEPT [0:0]n#Allow traffic from OpenVPN client to eth0n-A POSTROUTING -o ens4 -j MASQUERADEn-A POSTROUTING -o ens4 -j LOG --log-prefix "POSTROUTING"nCOMMITn# END OPENVPN RULES
Настройка аппаратного шлюза
В данной статье не рассматривается алгоритм установки OpenWRT на роутер и настройки доступа к нему посредством WEB GUI и SSH извне. Освещаются основные настройки, касающиеся именно использования в качестве шлюза для доступа в VPN. Так как локальный DHCP-сервер роутера необходимо будет отключить, администрирование производится из подсети, к которой роутер подключен WAN-портом. После каждого изменения настроек, произведенного посредством веб-интерфейса роутера, необходимо сохранить их нажатием кнопки Save&Apply в нижнем правом углу страницы.nВ первую очередь установим соответствующий пакет:n
# opkg updaten# opkg install openvpn-openssl
Теперь нужно настроить роутер таким образом, чтобы интерфейсы его LAN были объединены с виртуальным сетевым интерфейсом, образуя коммутатор LAN-VPN. Однако для этого необходимо отключить межсетевой экран и DHCP-сервер роутера. Для отключения DHCP-сервера роутера и его межсетевого экрана нужно перейти в меню Network → Interfaces и выб рать вкладку LAN (см. рис. 1).nnnВнизу страницы нужно поставить галку в чекбоксе Ignore interface (см. рис. 2).nnnВ верхнем меню выберите пункт System → Startup и переведите состояние службы firewall в Disabled (см .рис. 3).nnnПосле этого необходимо зайти в консоль роутера – например, посредством SSH. В файле /etc/config/network нужно проверить, что в декларации сетевого интерфейса присутствует следующая строчка:n
option proto 'dhcp'
Также в этом файле необходимо добавить декларацию виртуального сетевого интерфейса, используемого OpenVPN, для корректной его работы с DHCP:n
config interface 'tap0'noption ifname 'tap0'noption proto 'dhcp'
В файле /etc/config/openvpn в секции custom_config установите значение параметра enabled, равное 1, опции config – равное полному пути к конфигурационному файлу:n
###################################################n# Sample to include a custom config file. #n###################################################nconfig openvpn custom_confign# Set to 1 to enable this instance:noption enabled 1n# Include OpenVPN configurationnoption config /etc/openvpn/%configname%.ovpn
Установите скрипт запуска OpenVPN в автозапуск следующей командой:n
# /etc/init.d/openvpn enable
После настройки используемого ПО согласно приведенной конфигурации все поставленные требования удовлетворены. При подключении удаленных клиентов к созданному «тройному» VPN-серверу они попадают в одну подсеть с видеооборудованием, позволяя беспрепятственно обмениваться с ним данными.