Configuration: Network Settings
About the Page
The Server Network Settings page allows you to edit the settings for hostname, protocol, daemons, and port numbers for the three network servers compromising the Access Server: the VPN Server, the Admin Web UI, and the Client Web Server.
An overview of the Network Settings page:
VPN Server
The fields and settings within the VPN Server section configure the hostname or IP address, interfaces, protocols, daemons, and ports. Incorrect configuration of the hostname or IP address of your server breaks Access Server functionality. Any changes to these settings directly affects the client configuration files issued to VPN clients. Thus, making any alterations will require any users that have downloaded VPN Client installers and/or configuration files to redownload or update their VPN profile.
The hostname or IP address of the server must be configured properly in order for the Access Server to function correctly. There is also the option to choose between using TCP, UDP, or both protocols. Regardless of which choice, you have the option to define the port used by each protocol. If both are chosen, you also have the option to define how many daemons both protocols may have.
VPN Server Section
Hostname or IP Address
This is the name or IP address that VPN clients will use to access the VPN Server. It must be a public IP address or Fully-Qualified Domain name (FQDN). We strongly recommend using an FQDN for this setting.
Interface and IP Address
This configures the port where OpenVPN Access Server will listen to Admin Web UI requests. If you cannot access the interface listed, you will be unable to login to your server.
Protocol
You can choose TCP, UDP, or Both (multi-daemon mode) for protocol options. The OpenVPN protocol functions best over just the UDP protocol. By default, the downloaded connections profiles from Access Server are pre-programmed to try UDP first, then TCP, if that fails. However, for certain networks that may block some traffic, you may need TCP or both.
For example, on a public network, only traffic for protocols such as HTTP, HTTPS, FTP, SMTP, POP3, and IMAP, are allowed. Most of those are TCP-only. For connections through such a network, it’s useful to also support TCP connections. By default, we choose port TCP 443, which is the same port as HTTPS traffic, which is usually allowed even on restrictive networks.
We consider TCP less ideal due to the possibility of the TCP meltdown phenomenon, which occurs when you stack one transmission protocol on top of another (such as TCP traffic transported within an OpenVPN TCP tunnel). The underlying layer may encounter a problem and attempt to correct or compensate it, but the layer above overcompensates, which causes delays and problems.
Daemons and Port Numbers
You can change the number of TCP or UDP daemons as well as their port numbers with these fields.
Admin and Client Web Servers
When TCP or Both (multi-daemon mode) are selected, you have the option to choose whether the VPN Server provides access to the Admin and/or Client Web Server services through its IP address and port. If you choose No, they are still accessible via their configured IP address and port number.
Admin and Client Settings
The sections for the Admin and Client UIs allow you to configure the ports to access each and the interfaces they listen on. You can change these settings with one of the three options beneath Interface and IP Address.
Admin and Client Configuration Settings
Notice that the Client Web Server section has the option to use the same IP address and Port as the Admin UI. If chosen, it will inherit the port, interface and IP address, defined for the Admin Web UI. If you choose to use a different IP address or port, you will see additional configuration options.
If you select Use a different IP address or port then this additional section displays for configuration
Press the Save Settings button to finalize all changes.
Summary
Configuration: Network Settings provides a clear interface to configure the settings for the VPN Server and the website settings for the Admin and Client servers. It is a simple page that showcases the ease of configuring the Access Server in comparison to configuring these settings on your own.
Настройка сервера OpenVPN в Debian
sudo apt-get update sudo apt-get install openvpn easy-rsa
Шаг 2. Создание директории центра сертификации
OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.
Создайте пользователя с именем, например, openvpn-ca
и перейдите в его домашний каталог:
adduser openvpn-ca su - openvpn-ca
Для начала скопируем шаблонную директорию easy-rsa
в нашу домашнюю директорию с помощью команды make-cadir:
make-cadir ~/openvpn-ca cd ~/openvpn-ca
Шаг 3. Настройка переменных центра сертификации
Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:
Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.
~/openvpn-ca/vars
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="NY" export KEY_CITY="New York City" export KEY_ORG="DigitalOcean" export KEY_EMAIL="admin@example.com" export KEY_OU="Community" . . .
Пока мы в этом файле, отредактируем значение KEY_NAME
чуть ниже, которое заполняет поле субъекта сертификатов. Для простоты зададим ему название debian01
:
~/openvpn-ca/vars
export KEY_NAME="debian01"
Сохраните и закройте файл.
Шаг 4. Создание центра сертификации
Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.
Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source
к файлу vars
. В моем случае также потребовалось добавить симлинк к файлу openssl-1.0.0.cnf
:
cd ~/openvpn-ca ln -s ~/openvpn-ca/openssl-1.0.0.cnf openssl.cnf source vars
Вы должны увидеть следующий вывод:
Вывод NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
Убедимся, что мы работаем в «чистой среде» выполнив следующую команду:
Теперь мы можем создать наш корневой центр сертификации командой:
Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора.
Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.
Шаг 5. Создание сертификата, ключа и файлов шифрования для сервера
Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера.
Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:
Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.
./build-key-server debian01
Вывод опять будет содержать значения по умолчанию, переданные этой команде (server
), а также значения из файла vars
.
Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:
Вывод . . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:
Для завершения этой команды может потребоваться несколько минут.
Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
openvpn --genkey --secret keys/ta.key
Шаг 6. Создание сертификата и пары ключей для клиента
Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера, но в этой статье для простоты мы сгенерируем подписанный ключ на сервере.
В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.
Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source
для файла vars
. Мы будем использовать параметр client1
для создания первого сертификата и ключа.
Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key
:
cd ~/openvpn-ca source vars ./build-key client1
В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.
Шаг 7. Настройка сервиса OpenVPN
Далее настроим сервис OpenVPN с использованием созданных ранее файлов.
Копирование файлов в директорию OpenVPN
Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.
Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys
, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:
cd ~/openvpn-ca/keys sudo mkdir /etc/openvpn/keys sudo cp ca.crt debian01.crt debian01.key dh2048.pem ta.key /etc/openvpn/keys/
Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Настройка конфигурации OpenVPN
Теперь, когда наши файлы находятся на своём месте, займёмся настройкой конфигурационного файла сервера:
sudo vi /etc/openvpn/server.conf
Базовая настройка
Сначала найдём секцию HMAC поиском директивы tls-auth
. Удалите «;» для того, чтобы раскомментировать строку с tls-auth
. Далее добавьте параметр key-direction
и установите его значение в «0»:
/etc/openvpn/server.conf
tls-auth keys/ta.key 0 # This file is secret
key-direction 0
Далее найдём секцию шифрования, нас интересуют закомментированные строки cipher
. Удалите «;» для раскомментирования строки AES-256-CBC
:
/etc/openvpn/server.conf
Под этой строкой добавьте строку auth
и выберите алгоритм HMAC. Хорошим выбором будет SHA256
:
/etc/openvpn/server.conf
Наконец, найдите настройки user
и group
и удалите «;» для раскомментирования этих строк:
/etc/openvpn/server.conf
user nobody group nogroup
(Опционально) Проталкивание изменений DNS для перенаправления всего трафика через VPN
Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.
Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway
и удалите «;» из начала строки для расскоментирования redirect-gateway
:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже находится секция dhcp-option
. Удалите «;» для обеих строк:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.
(Опционально) Настройка порта и протокола
По умолчанию OpenVPN использует порт 1194 и протокол UDP для соединения с клиентами. Если вам необходимо изменить порт из-за каких-либо ограничений для ваших клиентов, вы можете сделать это изменив настройку port
. Если вы не хостите веб-контент на вашем OpenVPN сервере, вы можете использовать порт 443, поскольку этот порт обычно разрешён для использования в большинстве файрволов.
/etc/openvpn/server.conf
(Опционально) Использование кастомного имени сертификата и ключа
Если во время использования команды ./build-key-server
чуть выше вы указали параметр, отличный от debian01
, измените настройки cert
и key
, чтобы они указывали на правильные файлы .crt
и .key
. Если вы использовали debian01
, эти настройки должны выглядеть таким образом:
/etc/openvpn/server.conf
ca keys/ca.crt cert keys/debian01.crt key keys/debian01.key
Сохраните и закройте файл.
Шаг 8. Настройка сетевой конфигурации сервера
Далее нам необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик.
Настройка перенаправления IP
Сначала разрешим серверу перенаправлять трафик. Это ключевая функциональность нашего VPN сервера.
Настроим это в файле /etc/sysctl.conf
:
Найдите строку настройки net.ipv4.ip_forward
. Удалите «#» из начала строки, чтобы раскомментировать её:
/etc/sysctl.conf
Сохраните и закройте файл.
Для применения настроек к текущей сессии наберите команду:
Настройка правил UFW для сокрытия соединений клиентов
Вам нужно установить файрвол UFW. Нам потребуется файрвол для манипулирования с входящим на сервер трафиком. Мы должны изменить файл настроек для сокрытия соединений (masquerading).
sudo apt-get update sudo apt-get install ufw
Перед тем, как изменить этот файл, мы должны найти публичный интерфейс сети (public network interface). Для этого наберите команду:
Публичный интерфейс должен следовать за словом «dev». Например, в нашем случае этот интерфейс называется ens33
:
Вывод default via 192.168.0.254 dev ens33 proto static metric 100
Зная название интерфейса откроем файл /etc/ufw/before.rules
и добавим туда соответствующие настройки:
sudo vi /etc/ufw/before.rules
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING
в таблице nat
и будет скрывать весь трафик от VPN:
Внимание: не забудьте заменить
ens33
в строке -A POSTROUTING на имя интерфейса, найденное нами ранее.
/etc/ufw/before.rules
# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to ens33 -A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . .
Сохраните и закройте файл.
Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw
:
Найдите в файле директиву DEFAULT_FORWARD_POLICY
. Мы изменим значение с DROP
на ACCEPT
:
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните и закройте файл.
Открытие порта OpenVPN и применение изменений
Далее настроим сам файрвол для разрешения трафика в OpenVPN.
Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf
, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения. В моем случае это UDP порт 443
Также добавьте ваш SSH порт
sudo ufw allow OpenSSH sudo ufw allow 443/udp
Теперь деактивируем и активируем UFW для применения внесённых изменений:
sudo ufw disable
sudo ufw enable
Теперь наш сервер сконфигурирован для обработки трафика OpenVPN.
Шаг 9. Включение сервиса OpenVPN
Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.
Нам необходимо запустить сервер OpenVPN указав имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf
, поэтому мы добавим @server
в конец имени файла при его вызове:
sudo systemctl start openvpn@server
Убедимся, что сервис успешно запущен командой:
sudo systemctl status openvpn@server
Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:
sudo systemctl enable openvpn@server
Шаг 10. Создание инфраструктуры настройки клиентов
Далее настроим систему для простого создания файлов конфигурации для клиентов.
Создание структуры директорий конфигурации клиентов
В домашней директории создайте структуру директорий для хранения файлов:
mkdir -p ~/client-configs/files
Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:
chmod 700 ~/client-configs/files
Создание базовой конфигурации
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Откройте этот файл в вашем текстовом редакторе:
vi ~/client-configs/base.conf
Сделаем несколько изменений в этом файле.
Сначала найдите директиву remote
. Эта директива сообщает клиенту адрес нашего сервера OpenVPN. Это должен быть публичный IP адрес вашего сервера OpenVPN. Если вы изменили порт, который слушает сервер OpenVPN, измените порт по умолчанию 1194
на ваше значение:
~/client-configs/base.conf
. . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 443 . . .
Убедитесь, что протокол совпадает с настройками сервера:
~/client-configs/base.conf
Далее раскомментируйте директивы user
и group
удаляя «;»:
~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Найдите директивы ca
, cert
и key
. Закомментируйте эти директивы, так как мы будем добавлять сертификаты и ключи в самом файле:
~/client-configs/base.conf
# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key
Добавьте настройки cipher
и auth
согласно заданным в файле /etc/openvpn/server.conf
:
~/client-configs/base.conf
cipher AES-256-CBC auth SHA256
Далее добавьте директиву key-direction
в любое место в файле. Она должна иметь значение «1» для корректной работы сервера:
~/client-configs/base.conf
Наконец, добавьте несколько закомментированных строк. Мы ходим добавить эти строки в каждый файл конфигурации, но они будут включены только для клиентов на Linux, которые используют файл /etc/openvpn/update-resolv-conf
. Этот скрипт использует утилиту resolvconf
для обновление информации DNS на клиентах Linux.
~/client-configs/base.conf
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf
, вы должны раскомментировать эти строки в сгенерированном клиентском файле конфигурации OpenVPN.
Сохраните и закройте файл.
Создание скрипта генерации файлов конфигурации
Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files
.
Создайте и откройте файл make_config.sh
внутри директории ~/client-configs
:
vi ~/client-configs/make_config.sh
Вставьте следующие текст в этот файл:
~/client-configs/make_config.sh
#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} <(echo -e '<ca>') ${KEY_DIR}/ca.crt <(echo -e '</ca>n<cert>') ${KEY_DIR}/${1}.crt <(echo -e '</cert>n<key>') ${KEY_DIR}/${1}.key <(echo -e '</key>n<tls-auth>') ${KEY_DIR}/ta.key <(echo -e '</tls-auth>') > ${OUTPUT_DIR}/${1}.ovpn
Сохраните и закройте файл.
Сделайте его исполняемым файлом командой:
chmod 700 ~/client-configs/make_config.sh
Шаг 11. Генерация конфигураций клиентов
Теперь мы можем легко сгенерировать файлы конфигурации клиентов.
Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt
и ключ клиента client1.key
командой ./build-key client1
на шаге 6. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs
и используя только что созданный нами скрипт:
cd ~/client-configs ./make_config.sh client1
Если всё прошло успешно, мы должны получить файл client1.ovpn
в директории ~/client-configs/files
:
ls ~/client-configs/files
Доставка конфигураций клиентам
Теперь мы должны переместить файл конфигурации на клиентское устройство.
Шаг 12. Установка файлов конфигураций клиентов
Linux
Установка
sudo apt-get update sudo apt-get install openvpn
Настройка
Сначала проверьте, содержит ли ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf
:
Далее отредактируйте полученный с сервера файл конфигурации клиента OpenVPN:
Если вам удалось найти файл update-resolv-conf
, раскомментируйте следующие строки файла:
client1.ovpn
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Сохраните и закройте файл.
Теперь вы можете соединиться с VPN используя команду openvpn
следующим образом:
sudo openvpn --config client1.ovpn
В результате вы подключитесь к серверу.
Шаг 13. Тестирование VPN соединения
После того, как всё установлено и настроено, убедимся, что всё работает правильно. Без установки соединения с VPN откройте браузер и зайдите на DNSLeakTest.
Шаг 14. Отзыв клиентских сертификатов
Время от времени, вам может понадобиться отозвать клиентский сертификат для предотвращения доступа к серверу VPN
Для этого зайдите в вашу директорию центра сертификации и введите команды:
Настройка OpenVPN на Ubuntu Server для подключения клиентом Mikrotik
Опубликовано: 27.06.2022
В данной инструкции мы рассмотрим настройку сервера OpenVPN на Ubuntu и конфигурирование Mikrotik для подключения по VPN.
Выполнение настройки сервера OpenVPN
Настройка Mikrotik для подключения к серверу VPN
Настройка доступа к сети Интернет
Настройка анонимности
Проброс портов
Другая информация по OpenVPN
Мы настроим наш сервер, чтобы он слушал на нестандартном порту OpenVPN — 443. Откроем порт в брандмауэре:
iptables -I INPUT -p tcp —dport 443 -j ACCEPT
* если мы будем использовать другой порт, меняем его на соответствующий. Также необходимо обратить внимание на протокол tcp. Необходимо использовать именно его, так как Mikrotik не поддерживаем UDP для подключения к OpenVPN.
Для сохранения правил используем утилиту iptables-persistent:
apt-get install iptables-persistent
netfilter-persistent save
Устанавливаем пакеты:
apt install openvpn easy-rsa
* где openvpn — сам сервер и клиента OpenVPN; easy-rsa — утилита для создания сертификатов.
Создаем каталог, в котором разместим готовые сертификаты для OpenVPN:
mkdir -p /etc/openvpn/keys
Создаем каталог, в который будем помещать все сгенерированные сертификаты:
mkdir /etc/openvpn/easy-rsa
Переходим в созданный нами каталог:
cd /etc/openvpn/easy-rsa
Скопируем в него шаблоны скриптов для формирования сертификатов:
cp -r /usr/share/easy-rsa/* .
Чтобы ускорить процесс создания ключей, создадим следующий файл:
vi vars
export KEY_COUNTRY=»RU»
export KEY_PROVINCE=»Sankt-Petersburg»
export KEY_CITY=»Sankt-Petersburg»
export KEY_ORG=»DMOSK COMPANY»
export KEY_EMAIL=»master@dmosk.ru»
export KEY_CN=»DMOSK»
export KEY_OU=»DMOSK»
export KEY_NAME=»name-openvpn-server.dmosk.ru»
export KEY_ALTNAMES=»name-openvpn-server»
* данные значения могут быть любыми, но лучше их задать осмысленно. Для удобства.
Рассмотрим процесс формирования сертификата с использованием RSA3 пошагово.
1. Инициализируем PKI:
./easyrsa init-pki
2. Создаем корневой сертификат:
./easyrsa build-ca
* после вводим дважды пароль.
На запрос «Common Name» можно просто нажать Enter:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
3. Создаем запрос на сертификат для сервера:
./easyrsa gen-req server nopass
* nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
На запрос «Common Name» можно просто нажать Enter:
Common Name (eg: your user, host, or server name) [server]:
4. Генерируем сам сертификат:
./easyrsa sign-req server server
После ввода команды подтверждаем правильность данных, введя yes:
Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
… и вводим пароль, который указывали при создании корневого сертификата:
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
5. Формируем ключ Диффи-Хеллмана:
./easyrsa gen-dh
Скопируем созданные ключи в рабочий каталог:
cp pki/ca.crt /etc/openvpn/keys/
cp pki/issued/server.crt /etc/openvpn/keys/
cp pki/private/server.key /etc/openvpn/keys/
cp pki/dh.pem /etc/openvpn/keys/
Создаем конфигурационный файл для сервера:
vi /etc/openvpn/server.conf
port 443
proto tcp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem
server 172.16.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 32
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
daemon
mode server
* где
- port — сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть любым из свободных. Порт 1194 является стандартным для OpenVPN).
- proto — используемый транспортный протокол.
- dev — виртуальный сетевой адаптер, который будет создан для работы OpenVPN.
- ca — путь до сертификата корневого центра сертификации.
- cert — путь до открытого сертификата сервера.
- key — путь до закрытого сертификата сервера.
- dh — путь до ключа Диффи — Хеллмана.
- server — задаем IP-адрес сервера в сети VPN.
- ifconfig-pool-persist — путь к файлу для хранения клиентских IP-адресов.
- keepalive X Y — каждые X секунд отправляется ping-запрос на удаленный узел. Если за Y секунд не получено ответа — перезапускать туннель.
- max-clients — максимум одновременных подключений.
- persist-key — не перезагружать ключи при повторной загрузки из-за разрыва соединения.
- persist-tun — не изменять устройства tun/tap при перезапуске сервера.
- status — путь до журнала статусов.
- log-append — путь до файла лога с дополнительным выводом информации.
- verb — уровень логирования событий. От 0 до 9.
- mute — ограничение количества подряд отправляемых в лог событий.
- daemon — работа в режиме демона.
- mode — в каком режиме работает openvpn (сервер или клиент).
Создадим каталог для логов:
mkdir /var/log/openvpn
Разрешаем автоматический старт сервиса vpn и перезапускаем его:
systemctl enable openvpn@server
systemctl restart openvpn@server
Настройка OpenVPN-клиента (Mikrotik)
Сертификат должен быть сформирован на сервер, после чего перенесен на микротик. Рассмотрим процесс подробнее.
На сервере
Создадим каталог, куда поместим сертификаты для обмена:
mkdir /tmp/keys
* сертификаты будут скопированы в каталог /tmp для удобства их переноса на компьютер.
Переходим в каталог easy-rsa:
cd /etc/openvpn/easy-rsa
Создаем сертификат для клиента:
./easyrsa build-client-full client1 nopass
* в данном примере будет создан сертификат для узла client1 (название может быть любым).
Вводим пароль, который указывали при создании корневого сертификата:
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Скопируем ключи во временную директорию:
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt /tmp/keys/
* название client1 зависит от имени сертификата, который мы ему дали при создании.
Разрешим доступ на чтение каталога с ключами всем пользователям:
chmod -R a+r /tmp/keys
Переносим данный каталог с ключами на компьютер, с которого мы будем настраивать Mikrotik. Это можно сделать с помощью различных утилит, например WinSCP.
Подключаемся к роутеру Mikrotik. Это можно сделать с помощью веб-браузера или специальной программы Winbox. Мы рассмотрим вариант с использованием последней.
Заходим в настройки роутера — переходим в раздел Files — кликаем по Upload и выбираем наши 3 сертификата:
Кликаем по OK. Нужные нам файлы окажутся на роутере.
Переходим в System — Certificates:
Кликаем по Import:
… и по очереди импортируем:
- ca.crt
- client1.crt
- client1.key
* импорт делаем именно в такой последовательности.
Теперь переходим в раздел PPP — создаем новое соединение OVPN Client:
На вкладке Dial Out настраиваем наше соединение:
* где:
- Connect To — адрес сервера OpenVPN, к которому должен подключиться Mikrotik.
- Port — порт, на котором слушает OpenVPN.
- User — учетная запись для авторизации. Мы не настраивали проверку пользователя, но без указания данного поля Mikrotik не даст сохранить настройку.
- Certificate — выбираем сертификат, который импортировали на Mikrotik.
- Auth — алгоритм криптографического хеширования, который должен использоваться для подключения.
- Chiper — криптографический алгоритм шифрования.
- Add Default Route — если поставить данную галочку, все запросы в другую подсети (Интернет) должны пойти через VPN соединение.
Нажимаем OK — наш роутер должен подключиться к серверу.
Настройка доступа к сети Интернет через сервер VPN
Для того, чтобы наш сервер VPN мог раздавать Интернет подключившимся к нему устройствам, выполняем несколько действий.
Создаем файл:
vi /etc/sysctl.d/gateway.conf
net.ipv4.ip_forward=1
Применяем настройку:
sysctl -p /etc/sysctl.d/gateway.conf
Добавляем фаервольные правила. Как правило, управление брандмауэром netfilter в Linux на базе Debian выполняется с помощью утилиты iptables.
Настройка выполняется из расчета, что сеть Интернет настроена через интерфейс ens3:
iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
iptables -I FORWARD -i tun0 -o ens3 -m state —state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i tun0 -o ens3 -j ACCEPT
Предполагается, что tun0 используется для VPN сети (данное имя присваивается серверу OpenVPN по умолчанию), а ens3 — внешней. Посмотреть имена интерфейсов можно командой:
ip a
Сохраняем настройки iptables:
apt-get install iptables-persistent
netfilter-persistent save
Настройка анонимности
В сети есть различные порталы для проверки анонимности. Например, сайты whoer или 2ip. Приведем некоторые настройки для получения 100%-го результата.
1. Отключение icmp. По времени ответа на ping можно определить отдаленность клиента от прокси. Чтобы проверку нельзя было выполнить, отключаем на сервере icmp.
Для этого создаем файл:
vi /etc/sysctl.d/icmp.conf
net.ipv4.icmp_echo_ignore_all=1
И применяем настройки:
sysctl -p /etc/sysctl.d/icmp.conf
2. Настройка MTU.
Для решения проблем с VPN fingerprint, на стороне сервера добавляем 2 опции:
vi /etc/openvpn/server.conf
…
tun-mtu 1500
mssfix 1623
Перезапускаем сервис:
systemctl restart openvpn@server
Проброс портов (Port Forwarding)
Необходим для перенаправление сетевых запросов на Mikrotik, стоящий за VPN.
Настройка выполняется двумя командами:
iptables -t nat -I PREROUTING -p tcp -i ens3 —dport 80 -j DNAT —to-destination 172.16.10.6:80
iptables -I FORWARD -p tcp -d 172.16.10.6 —dport 80 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
* где ens3 — внешний сетевой интерфейс. 172.16.10.6 — IP-адрес роутера Mikrotik, который он получит после подключения.
Разрешаем порт:
Не забываем сохранить правила:
netfilter-persistent save
Читайте также
Другие полезные инструкции на тему VPN:
1. Установка и настройка OpenVPN на Linux CentOS 7.
2. Настройка и использование OpenVPN на Ubuntu.
3. Как настроить сервер OpenVPN на Windows.
4. Настройка сервера OpenVPN на CentOS 8.
5. Настройка OpenVPN сервера на Mikrotik.
6. Настройка OpenVPN клиента.
7. Настройка доступа к локальной сети клиентам OpenVPN в Linux.
В наших прошлых материалах мы рассматривали применение OpenVPN исключительно для организации каналов связи между подразделениями организации. Но современный мир приносит новые вызовы, на которые следует реагировать. Один из них — общественные сети с низкой безопасностью, для работы в которых желательно иметь защищенный канал, препятствующий доступу третьих лиц к вашему трафику. Традиционно эта задача решается использованием VPN-сервисов и в данной статье мы расскажем, как организовать собственный сервис на базе OpenVPN.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Кроме общественных сетей в последние годы стала приобретать повышенную актуальность проблема ограничения доступа к некоторым ресурсам исходя из географического расположения клиента. Это могут быть как ограничения регионального характера, например, популярный поставщик видеоконтента Netflix, так и блокировки со стороны органов власти, как яркий пример которых «ковровые блокировки» РКН в его борьбе с Телеграм, когда под ограничения попало большое количество совершенно легальных ресурсов.
Исходя из вышесказанного можно сделать вывод, что наличие VPN-сервиса для доступа в интернет в современных условиях — это не роскошь, а насущная необходимость, особенно если ваша деятельность завязана на работу в сети. Да, существуют многочисленные VPN-провайдеры, но их услуги являются платными и снова встает вопрос доверия, особенно если вы используете канал для обмена конфиденциальной или финансовой информацией.
Что нужно для создания собственного VPN-сервиса? Прежде всего потребуется VPS (виртуальный выделенный сервер) расположенный в регионе, из которого возможен неограниченный доступ к требуемым ресурсам. В большинстве случаев можно выбирать Европу или Штаты, но во втором случае задержки будут выше. На наш взгляд, выбирать Штаты имеет смысл, если вам требуется доступ к американским ресурсам, тому же Netflix или покупкам у американских продавцов на Amazon и Ebay.
Для поиска недорогих VPS можно воспользоваться специальными сайтами, такими как Low End Box или бесплатными предложениями от облачных провайдеров. Так у Amazon и Microsoft можно бесплатно получить виртуальную машину на год, а Oracle предлагает две VPS бесплатно и навсегда.
В нашем примере мы будем использовать бесплатный VPS от Oracle с Ubuntu 18.04, но данная инструкция подойдет для любых deb-based систем и с некоторыми поправками для любого другого Linux-дистрибутива.
Настройка сервера OpenVPN
Прежде всего установим OpenVPN и Easy-RSA для управления ключами:
apt install openvpn easy-rsa
Скопируем файлы easy-rsa в конфигурационную директорию OpenVPN и создадим символическую ссылку на файл настроек OpenSSL:
cp -r /usr/share/easy-rsa /etc/openvpn
ln -s /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Затем откроем файл /etc/openvpn/easy-rsa/vars и изменим в нем следующие строки, указав собственные данные для сертификатов, например, так:
export KEY_COUNTRY="US"
export KEY_PROVINCE="Wild West"
export KEY_CITY="Uncle Tom's Cabins"
export KEY_ORG="Uncle Tom"
export KEY_EMAIL="tom@example.com"
export KEY_OU="Cabin"
Сохраним файл и перейдем к созданию собственного центра сертификации (CA). Для этого перейдем в директорию нашего CA и загрузим переменные:
cd /etc/openvpn/easy-rsa
source ./vars
Очистим любые имеющиеся данные и инициализируем центр сертификации:
./clean-all
./build-ca
В процессе создания ключей вам будут задаваться вопросы, ответы по умолчанию на которые берутся из файла vars и помещены в квадратных скобках, поэтому можно просто подтверждать их нажатием Enter.
После чего в директории /etc/openvpn/easy-rsa/keys появится сертификат CA, содержащий публичный ключ, ca.crt, который должен присутствовать на каждом VPN-клиенте, и закрытый ключ центра сертификации ca.key, этот файл является секретным и не должен покидать пределы сервера.
Затем создадим файл параметров Диффи-Хеллмана, который нужен для формирования уникального сеансового ключа и обеспечения режима совершенной прямой секретности:
./build-dh
Данная операция, в зависимости от производительности вашего VPS, может занять достаточно много времени.
И, наконец, создадим ключевую пару для сервера:
./build-key-server server
где server — имя вашего сервера, мы рекомендуем давать осмысленные названия, чтобы потом не пришлось гадать, что именно это за ключевая пара и для чего она нужна.
На этом формирование необходимых ключей и сертификатов закончено, перейдем к настройке OpenVPN, прежде всего создадим директорию для хранения ключей. Можно, конечно, использовать ключи прямо из директории easy-rsa, но лучше отделить CA от остальных служб.
mkdir /etc/openvpn/keys
Теперь скопируем туда необходимые серверу ключи и сертификаты:
cd /etc/openvpn/easy-rsa/keys
cp ca.crt dh2048.pem server.crt server.key /etc/openvpn/keys
Распакуем и скопируем в директорию /etc/openvpn шаблон серверной конфигурации:
gzip -d /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn
Откроем файл /etc/openvpn/server.conf и внесем в него необходимые изменения, в большинстве случаев вам придется раскомментировать нужны строки или убедиться в их наличии. Опции указаны в порядке их следования в файле:
port 1194
proto udp
dev tun
Данные опции указывают порт, протокол и тип туннеля, менять их не следует, однако в ряде случаев может потребоваться использовать протокол tcp, но в силу более высоких накладных расходов этой ситуации желательно избегать.
Затем зададим топологию сети:
topology subnet
Укажем пути к ключам и сертификатам, допускаются относительные пути, в этом случае корнем будет считаться директория /etc/openvpn:
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh2048.pem
Зададим диапазон OpenVPN-сети:
server 10.88.0.0 255.255.255.0
И укажем файл для хранения адресов клиентов, которые будут автоматически выдаваться сервером:
ifconfig-pool-persist /var/log/openvpn/ipp.txt
Автоматически сконфигурируем клиентов на доступ в интернет через OpenVPN-подключение:
push "redirect-gateway def1 bypass-dhcp"
И передадим им собственные DNS-сервера:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Укажем параметры проверки активности:
keepalive 10 120
Сервер будет проверять клиента каждые 10 секунд и при отсутствии ответа через 120 секунд клиент будет считаться неактивным.
Обязательно закомментируйте строку:
#tls-auth ta.key 0
Для сценария доступа в интернет дополнительная TLS-аутентификация будет излишней.
В последних версиях OpenVPN включен механизм автоматического согласования протоколов шифрования между клиентом и сервером, по умолчанию будет выбран шифр AES-256-GCM, но так как вычислительные возможности VPS обычно ограничены и большого смысла шифровать канал доступа в интернет сложными шифрами нет, то отключим соглассование и укажем достаточно простой AES-шифр:
ncp-disable
cipher AES-128-CBC
Также в новых версиях доступен новый механизм компрессии, для его включения укажем:
compress lz4-v2
push "compress lz4-v2"
Данная опция будет автоматически отправлена на клиент, что облегчает его конфигурирование.
Если у вас есть старые версии клиентов (ниже 2.4), то можно использовать простое lzo-сжатие, для этого закомментируйте вышеприведенные строки и добавьте:
comp-lzo
Эту опцию также потребуется добавить в конфигурационные файлы клиентов.
В целях безопасности понизим права запущенного сервера:
user nobody
group nogroup
После чего проконтролируем наличие опций, отвечающих за правильные права к некоторым ресурсам после их понижения:
persist-key
persist-tun
Укажем путь к файлам логов:
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
И укажем его подробность:
verb 3
Во время отладки можно поднять уровень логов до 5-6.
Настройка брандмауэра и маршрутизации
Основной задачей нашего сервера является обеспечение выхода в интернет и будет разумно обеспечить минимальный набор правил безопасности, во многом они будут повторять те правила, которые мы использовали для наших роутеров на базе Linux.
Создадим файл правил:
touch /etc/nat
и внесем в него следующие строки, обратите внимание на имя сетевого интерфейса вашего VPS, в нашем случае это ens3:
#!/bin/sh
# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i ens3 -m state --state ESTABLISHED,RELATED -j ACCEPT# Разрешаем подключения по SSH
iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT# Разрешаем подключения к OpenVPN
iptables -A INPUT -i ens3 -p udp --dport 1194 -j ACCEPT#Запрещаем входящие извне
iptables -A INPUT -i ens3 -j DROP# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i ens3 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens3 -o tun0 -j DROP# Включаем маскарадинг для локальной сети
iptables -t nat -A POSTROUTING -o ens3 -s 10.88.0.0/24 -j MASQUERADE
Не забудем сделать файл исполняемым:
chmod +x /etc/nat
Данный файл требуется запускать после создания туннельного интерфейса tun0, поэтому откроем конфигурационный файл сервера OpenVPN /etc/openvpn/server.conf и в его конце добавим опцию:
up /etc/nat
Перезагрузим сервер и убедимся, что OpenVPN сервер автоматически запустился и создал туннельный интерфейс, это можно сделать командой:
ip a
Также проверим применение правил брандмауэра:
iptables -L -vn
Следующий шаг касается только виртуальных машин в облаке Oracle Cloud, вам потребуется дополнительно разрешить входящий трафик на порт OpenVPN. Для этого перейдите в Сети » Виртуальные облачные сети » VirtualCloudNetwork-20191008-0144 » Сведения о списках безопасности, где вместо VirtualCloudNetwork-20191008-0144 будет имя вашей виртуальной сети. Затем добавьте новое правило для входящего трафика:
Укажите: Тип источника — CIDR, Исходный CIDR — 0.0.0.0/0, IP-протокол — UDP, Диапазон исходных портов — Все, Диапазон конечных портов — 1194.
Настройка клиентов OpenVPN
Настройка клиента начинается на сервере с получения ключей и сертификатов клиента, для этого перейдем в директорию центра сертификации и загрузим переменные:
cd /etc/openvpn/easy-rsa
source ./vars
Затем создадим ключевую пару клиента командой:
./build-key client
где client -имя клиента, мы также рекомендуем давать им осмысленные имена.
Теперь скопируем файлы, которые необходимо передать на компьютер клиента в домашнюю директорию и изменим их владельца (по умолчанию владелец — root), чтобы вы смогли их скопировать с помощью любого FTP или SFTP клиента. В нашем случае имя пользователя ubuntu:
cd /etc/openvpn/easy-rsa/keys
cp ca.crt client.crt client.key ~
cd ~
chown ubuntu:ubuntu ca.crt client.crt client.key
Помните, что закрытый ключ клиента client.key является секретным и следует избегать его передачи по открытым каналам связи.
Также не будет лишним сразу скопировать шаблон клиентской конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client.ovpn
После чего скопируйте все эти файлы на клиент и установите на нем OpenVPN, в Windows системах советуем изменить путь установки OpenVPN на более короткий и без пробелов, скажем, C:OpenVPN.
Затем откроем файл client.ovpn, который в Windows системах должен быть расположен в C:OpenVPNconfig, а в Linux в /etc/openvpn, и внесем в него следующие изменения:
client
dev tun
proto udp
Данные опции задают клиентский режим работы, тип туннеля и используемый протокол UDP.
Затем укажем адрес сервера:
remote 111.222.333.444 1194
Следующая опция предписывает клиенту постоянно разрешать имя OpenVPN-сервера, имеет смысл если мы указываем сервер по FQDN-имени, а не IP-адресу.
resolv-retry infinite
Для Linux систем обязательно укажите:
user nobody
group nogroup
В Windows данные опции следует обязательно закомментировать.
Проконтролируем наличие следующих опций:
persist-key
persist-tun
Укажем пути к ключам и сертификатам, для Linux систем подразумеваем их нахождение в /etc/openvpn/keys:
ca keys/ca.crt
cert keys/client.crt
key keys/client.key
Для Windows систем предположим их нахождение в C:OpenVPNkeys:
ca C:\OpenVPN\keys\ca.crt
cert C:\OpenVPN\keys\client.crt
key C:\OpenVPN\keys\client.key
Также обязательно закомментируем опцию:
#tls-auth ta.key 1
Включим защиту от атак типа «человек посередине»:
remote-cert-tls server
И укажем используемый шифр, он должен совпадать с указанным на сервере:
cipher AES-128-CBC
Остальные опции можно оставить без изменений. Сохраним файл и запустим OpenVPN-клиент.
Убедиться, что вы выходите в интернет через VPN-канал можно при помощи любого сервиса, показывающего ваш IP-адрес, например, 2ip.ru:
Обращаем внимание на национальную принадлежность адреса, в данном случае мы выходим в интернет из Штатов.
Самое время провести замер скорости доступа, мы будем использовать для этого популярный сервис SpeedTest. Первый замер без VPN:
Второй через OpenVPN-канал:
Сразу обращаем внимание на выросший пинг — это последствия размещения сервера в Штатах, а также скорость скачивания не выше 10 Мбит/с — ограничение бесплатного тарифа Oracle, хотя в большинстве случаев этого вполне достаточно для комфортного серфинга.
Напоследок затронем еще один момент. Мы настроили сервер таким образом, что он автоматически конфигурирует клиента на доступ в интернет через OpenVPN-подключение, но бывают случаи, когда это не нужно. Допустим вы хотите пустить через VPN только некоторые ресурсы, а остальной доступ должен осуществляться через локального провайдера. В таком случае добавьте в конфигурационный файл клиента опцию:
route-nopull
После чего клиент будет игнорировать передаваемые с сервера опции маршрутизации и DHCP-опции, такие как DNS-сервера и т.п.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.