Установка и настройка OpenVPN-сервера
Начальная подготовка
Перед началом настройки сервера необходимо настроить центр сертификации, которым можно будет подписать серверный и пользовательские сертификаты.
Услуги по настройке vpn сервера, [email protected]
В первую очередь нужно установить необходимые нам пакеты:
1 2 |
$ sudo apt-get update $ sudo apt-get install openvpn easy-rsa isc-dhcp-server ufw |
Далее необходимо скопировать шаблонную директорию easy-rsa в домашнюю директорию:
1 |
$ make-cadir ~/openvpn-ca |
Для настройки переменных центра сертификации нам с вами необходимо отредактировать файл ~/openvpn-ca/vars:
1 2 3 4 5 6 |
export KEY_COUNTRY="USA" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_OU="MyOrganizationalUnit" |
Данным переменным можно задать желаемые значения или же просто оставить их как есть, главное – не оставлять пустыми.
Также нужно отредактировать значение KEY_NAME, которое заполняет поле субъекта сертификатов:
export KEY_NAME=»server» Теперь можно использовать заданные в файле vars переменные и утилиты easy-rsa для создания центра сертификации. Далее, находясь в директории центра сертификации,
нужно использовать команду source к файлу vars:
1 2 |
$ cd ~/openvpn-ca $ source vars |
Должен появиться следующий вывод:
1 |
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/%username%/openvpn-ca/keys |
Удалить все предыдущие созданные ключи можно следующей командой:
1 |
$ ./clean-all |
Теперь мы можем создать корневой центр сертификации командой:
1 |
$ ./build-ca |
На этом создание центра сертификации завершено. Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера:
1 |
$ ./build-key-server server |
Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.
Генерация ключа для клиента:
1 |
$ ./build-key client1 |
Генерация ключа протокола Диффи-Хеллмана, используемого при обмене ключами:
1 |
$ ./build-dh |
Далее нужно сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
1 |
$ openvpn --genkey --secret keys/ta.key |
После этого можно приступать к настройке непосредственно сервера OpenVPN.
Объединение серверов OpenVPN, слушающих разные порты
Для реализации повышенной доступности нашего VPN-сервера было решено объединить в одной виртуальной подсети несколько серверов, каждый из которых прослушивал бы свой порт. На данный момент из-за отсутствия многопоточности у OpenVPN действует правило «один демон – один порт», поэтому это единственная возможность связать клиентов, если им приходится использовать для подключения к серверу различные порты. В качестве используемых портов были выбраны 53 UDP, 53 TCP и 443 TCP. Соответственно, для каждого из запущенных демонов OpenVPN необходим отдельный виртуальный TUN/TAP-адаптер. Использование VPN второго уровня позволяет объединить их в мост, таким образом объединив клиентов различных серверов OpenVPN в одну подсеть. Ниже приведены опции из конфигурационного файла одного из трех серверов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//Порт, который будет слушать сервер port 443 //Используемый сервером транспортный протокол proto tcp //Имя сетевого адаптера, используемого данным сервером dev tap0 //Режим работы сервера на втором уровне server-bridge //Включение принудительного перенаправления трафика клиентов //в VPN push "redirect-gateway def1 bypass-dhcp" //Возможность клиентам сервера видеть друг друга. Остальные //опции не являются ключевыми для рассматриваемой //конфигурации и могут быть использованы по усмотрению client-to-client |
Настройки для клиента
Также необходимо обратить внимание на процесс создания конфигурационных файлов для клиентов нашей VPN. Все настройки OpenVPN могут быть переданы как ключи запуска демона, однако для удобства пользователя OpenVPN поддерживает использование файлов с расширением ovpn
и conf, в которые могут быть записаны списком желаемые настройки. Также в такой файл можно записать данные пользовательского сертификата. Особенным для используемой в данной конфигурации
является способ записи в конфигурационный файл данных об адресе VPN-сервера:
1 2 3 4 5 6 7 8 9 10 11 |
# This configuration designed for use with <connection> blocks # for 3 servers on one machine <connection> remote my.own.vpn 53 udp </connection> <connection> remote my.own.vpn 53 tcp </connection> <connection> remote my.own.vpn 443 tcp </connection> |
Данная группа параметров позволяет клиенту автоматически предпринимать попытки подключения к любому из перечисленных серверов. В нашем случае это один и тот же адрес (с доменным именем my.own.vpn), но различные номера портов на нем, соответствующие различным демонам OpenVPN. В зависимости от настроек следующий в очереди попыток подключения сервер может быть выбран из списка последовательно или случайно. После формирования конфигурационные файлы, содержащие данные сертификата, следует доставлять клиентам по защищенным каналам – например, посредством sftp:
1 |
sftp serviceaccount@my.own.vpn:configs/client1.ovpn |
Настройка сетевых интерфейсов
Для конфигурации сетевых интерфейсов, используемых серверами OpenVPN, и объединения их в мост необходимо добавить в файл /etc/network/interfaces следующие строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
auto br0 iface br0 inet static bridge_ports tap0 tap1 tap2 network 192.168.11.0 address 192.168.11.1 netmask 255.255.255.0 broadcast 192.168.11.255 auto tap0 iface tap0 inet manual auto tap1 iface tap1 inet manual auto tap2 iface tap2 inet manual |
Такие настройки автоматически будут поднимать соответствующие виртуальные сетевые интерфейсы при включении машины, при этом они сразу же будут объединены в мост.
Настройка DHCP-сервера
У OpenVPN есть встроенный механизм распределения IP-адресов внутри VPN, однако работает он только с клиентами, подключившимися к серверу посредством клиентского ПО. Следовательно, для корректной работы устройств, подключившихся через шлюз, необходимо использовать внутри
VPN отдельный DHCP-сервер. Для настройки ISC DHCP-сервера на мостовом сетевом
интерфейсе следует в файле /etc/default/isc-dhcp-server записать имя такового интерфейса, которое было задано в предыдущем пункте:
1 |
INTERFACES="br0" |
При задании опций в конфигурационном файле нас особенно интересуют следующие опции:
1 2 |
option classless-static-routes code 121 = array of unsigned integer 8; option ms-classless-static-routes code 249 = array of integer 8; |
Данные опции, по сути, являются объявлениями переменных, предназначен
1 2 |
option classless-static-routes 0, 192.168.11.1; option ms-classless-static-routes 0, 192.168.11.1; |
Данные опции задают значение объявленным ранее переменным. В нашем случае это значение равно адресу основного шлюза нашей VPN. Данные строки должны быть помещены в раздел декларации подсети, в которой будет работать DHCP-сервер.
Настройка доступа в интернет
Проброс трафика из VPN в интернет будет производиться посредством iptables. В файл /etc/ufw/before.rules необходимо добавить следующие правила для активации NAT:
1 2 3 4 5 6 7 8 9 |
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] #Allow traffic from OpenVPN client to eth0 -A POSTROUTING -o ens4 -j MASQUERADE -A POSTROUTING -o ens4 -j LOG --log-prefix "POSTROUTING" COMMIT # END OPENVPN RULES |
Настройка аппаратного шлюза
В данной статье не рассматривается алгоритм установки OpenWRT на роутер и настройки доступа к нему посредством WEB GUI и SSH извне. Освещаются основные настройки, касающиеся именно использования в качестве шлюза для доступа в VPN. Так как локальный DHCP-сервер роутера необходимо будет отключить, администрирование производится из подсети, к которой роутер подключен WAN-портом. После каждого изменения настроек, произведенного посредством веб-интерфейса роутера, необходимо сохранить их нажатием кнопки Save&Apply в нижнем правом углу страницы.
В первую очередь установим соответствующий пакет:
1 2 |
# opkg update # opkg install openvpn-openssl |
Теперь нужно настроить роутер таким образом, чтобы интерфейсы его LAN были объединены с виртуальным сетевым интерфейсом, образуя коммутатор LAN-VPN. Однако для этого необходимо отключить межсетевой экран и DHCP-сервер роутера. Для отключения DHCP-сервера роутера и его межсетевого экрана нужно перейти в меню Network → Interfaces и выб рать вкладку LAN (см. рис. 1).
Внизу страницы нужно поставить галку в чекбоксе Ignore interface (см. рис. 2).
В верхнем меню выберите пункт System → Startup и переведите состояние службы firewall в Disabled (см .рис. 3).
После этого необходимо зайти в консоль роутера – например, посредством SSH. В файле /etc/config/network нужно проверить, что в декларации сетевого интерфейса присутствует следующая строчка:
1 |
option proto 'dhcp' |
Также в этом файле необходимо добавить декларацию виртуального сетевого интерфейса, используемого OpenVPN, для корректной его работы с DHCP:
1 2 3 |
config interface 'tap0' option ifname 'tap0' option proto 'dhcp' |
В файле /etc/config/openvpn в секции custom_config установите значение параметра enabled, равное 1, опции config – равное полному пути к конфигурационному файлу:
1 2 3 4 5 6 7 8 |
################################################### # Sample to include a custom config file. # ################################################### config openvpn custom_config # Set to 1 to enable this instance: option enabled 1 # Include OpenVPN configuration option config /etc/openvpn/%configname%.ovpn |
Установите скрипт запуска OpenVPN в автозапуск следующей командой:
1 |
# /etc/init.d/openvpn enable |
После настройки используемого ПО согласно приведенной конфигурации все поставленные требования удовлетворены. При подключении удаленных клиентов к созданному «тройному» VPN-серверу они попадают в одну подсеть с видеооборудованием, позволяя беспрепятственно обмениваться с ним данными.