Установка и настройка OpenVPN в Linux

VPN – Virtual Private Network, т. е. защищённая частная сеть, которая объединяет в себе несколько разных сетей, соединённых через Интернет. OpenVPN – это свободная реализация этой технологии. Сети VPN удобны тем, что позволяют получить доступ к частным сетям из любой точки в сети Интернет верифицированным клиентам. Многие организации таким образом строят свои локальные или интрасети, когда их офисы (сервера и компьютеры) расположены далеко (даже на разных континентах) друг от друга. Это единственный вариант в такой ситуации поскольку аренда выделенного физического канала связи (кабели по дну моря например) — слишком дорогое удовольствие. Таким образом сотрудники могут подключаться к сети своей организации из дома или из любой другой точки, имея только доступ в интернет и специальный ключ. Именно с помощью ключей шифрования организуется туннели связи, объединяющие разные сети в одну защищённую VPN-структуру.

Что для этого нужно?

Настройка OpenVPN требует наличия следующих компонентов:

  • несколько компьютеров-клиентов для организации, собственно, инфраструктуры сети VPN;
  • OpenVPN на всех компьютерах-клиентах;
  • Easy-RSA – для организации центров сертификации и работы с ключами, также на всех компьютерах;
  • корректно настроенный центр сертификации.

Следует отметить, что центр сертификации (ЦС) рекомендуется использовать на отдельной машине. ЦС служит для обслуживания запросов на сертификаты.

Установка ПО

Это, пожалуй самый простой этап. Здесь достаточно воспользоваться менеджером пакетов или системой управления пакетами (СУП) для установки требуемых пакетов ПО. Для любого из популярных дистрибутивов Linux они доступны из стандартный репозиториев. Например, для Ubuntu 18.04:

$ sudo apt install openvpn easy-rsa

В зависимости от используемого дистрибутива наименования пакетов могут различаться. Оба пакета нужно устанавливать и на сервере, и у клиентов.

Организация центра сертификации

Это очень важный этап, поскольку от наличия собственного ЦС зависит безопасность организуемой сети VPN. Также это удобно, поскольку собственный ЦС позволяет легко управлять ключами и сертификатами, а также распространять их для клиентов. Также отпадает необходимость хранения всех сертификатов клиентов, поскольку их подписи находятся у ЦС.

ЦС будет находиться в каталоге /etc/openvpn/easy-rsa. Вообще, ЦС можно разместить где угодно. Также необходимо скопировать в хранилище конфигурационные скрипты Easy-RSA:

sudo mkdir /etc/openvpn/easy-rsa
sudo cp -R /usr/share/easy-rsa /etc/openvpn/easy-rsa

Теперь необходимо развернуть сам ЦС в каталоге /etc/openvpn/easy-rsa. Для этого следует выполнить в нём некоторые скрипты (которые ранее были сюда скопированы) для создания инфраструктуры для работы ЦС:

$ sudo -i
# cd /etc/openvpn/easy-rsa
# source ./vars
# ./clean-all
# ./build-ca

Для удобства командная консоль была переведена в «суперпользовательский» режим командой sudo -i. Вторая команда устанавливает все необходимые переменные окружения. Третья команда проверяет, существует ли каталог keys/ и если его нет, то создаёт его. Если он существует, то производится очистка его содержимого. Далее устанавливаются необходимые режимы доступа. Четвёртая команда помещает в keys/ серверные ключи и сертификаты по-умолчанию.

Генерация и настройка ключей клиентов

На данном этапе нужно произвести похожие настройки для Easy-RSA на клиентских машинах, с той лишь разницей, что генерировать ключи нужно на основе главного сертификата серверной машины, на которой работает OpenVPN-сервер. Главный сертификат нужно скопировать на клиентские машины. Но для начала следует создать инфраструктуру клиентского окружения для работы с ключами:

$ sudo cp -R /usr/share/easy-rsa /etc/openvpn/easy-rsa

Далее, нужно скопировать главный сертификат сервера (файл *.crt) на все клиентские компьютеры. Для этого удобно использовать утилиту scp:

$ sudo scp username@host:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys

Далее можно создавать (генерировать) клиентские ключи, используя скопированный с сервера сертификат. Для этого на клиентском компьютере в каталоге /etc/openvpn/easy-rsa нужно выполнить следующие команды:

$ sudo -i
# cd /etc/openvpn/easy-rsa
# source ./vars
# build-req John

Важно понимать, что для того, чтобы генерация клиентских ключей была возможной, необходимо, чтобы серверный сертификат находился в каталоге keys/ у клиентов. Сгенерированные в результате клиентские ключи позволяют подключаться к серверу OpenVPN. Однако, для того, чтобы сервер их принимал и предоставлял доступ к VPN-сети, необходимо, чтобы эти ключи (файлы *.csr) были подписаны на самом сервере. Можно также, используя SCP, отправить их на сервер:

$ scp /etc/openvpn/easy-rsa/keys/John.csr username@host:~/

Теперь, на сервере, предварительно перейдя в каталог /etc/openvpn/easy-rsa, можно выполнить подпись переданного ключа John.csr:

$ sudo -i
#  cd /etc/openvpn/easy-rsa
# ./sign-req ~/John

В результате будет создан уже подписанный сервером сертификат, который необходимо отдать клиенту:

$ sudo scp username@host:/home/John.crt /etc/openvpn/easy-rsa/keys

На этом организация инфраструктуры для работы с ключами (и сертификатами) завершена. Теперь этого достаточно, чтобы сервер OpenVPN и клиенты установили защищённую связь. Однако необходимо ещё произвести некоторые настройки самой системы OpenVPN.
Также, если планируется для более надёжной защиты использовать TLS-шифрование, то на стороне сервера всё в том же в каталоге /etc/openvpn/easy-rsa выполнить команду:

$ ./build-dh

Настройка сервера OpenVPN

После установки OpenVPN обычно по-умолчанию никаких конфигурационных файлов для работы не предоставляется. Это сделано потому, что для начала нужно определить, как использовать OpenVPN на конкретной машине: в качестве сервера или клиента. Только после этого должна определяться конфигурация, которая, как можно понимать, будет различаться для сервера и для клиента.

Для более удобного задания конфигурации существуют файлы-шаблоны, доступные в /usr/share/doc/openvpn/examples/sample-config-files/. На их основе можно относительно быстро сконфигурировать целый сервер OpenVPN или его клиент:

$ zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Эта команда (точнее конвейер команд) извлечёт и архива server.conf.gz текстовые данные и создаст из них конфигурационный файл server.conf с базовыми настройками работы OpenVPN-сервера. Теперь нужно задать, собственно, актуальные опции. Протокол и номер порта:

port 1194
proto udp

Серверные ключи и сертификаты из каталога /etc/openvpn/easy-rsa/keys также необходимо определить в конфигурации:

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/ca.crt
key /etc/openvpn/easy-rsa/keys/ca.key
dh /etc/openvpn/easy-rsa/keys/dh.pem

Также нужно указать диапазон VPN-сети:

server 10.8.0.0 255.255.255.0

Эта запись определяет адрес самого OpenVPN-сервера (10.8.0.0), а также маску его сети. В итоге рабочая конфигурация должна выглядеть следующим образом:

port 1194
proto udp
comp-lzo
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/ca.crt
dh /etc/openvpn/easy-rsa/keys/dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

Теперь можно сохранить файл server.conf. Настройка сервера OpenVPN завершена. Далее нужно выполнить его запуск с помощью команды openvpn, указав соответствующий конфигурационный файл:

$ openvpn /etc/openvpn/server.conf

Настройка клиентов OpenVPN

Теперь необходимо настроить клиентские машины. Также нужно воспользоваться файлами шаблонами, но они доступны без распаковки:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf

Для клиента может быть задано несколько конфигурационных файлов для подключения к разным серверам OpenVPN. Ключевыми параметрами для клиентской конфигурации являются remote, ca, cert, а также key:

remote 194.67.215.125 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/John.crt
key /etc/openvpn/easy-rsa/keys/John.key

Здесь remote задаёт IP-адрес сервера OpenVPN в Интернет, а также порт подключения, который должен совпадать с тем, что указан в серверной конфигурации. Параметр ca – это серверный сертификат, а cert – созданный на его основе ключ John.csr, а теперь подписанный сертификат John.crt. Параметр key – это закрытый ключ клиента. Следует отметить, что именно при помощи параметров cert и key обеспечивается подключение клиентов к сети VPN.
Готовая рабочая клиентская конфигурация будет следующей:

client
dev tun
proto udp
remote 194.67.215.125 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/John.crt
key /etc/openvpn/easy-rsa/keys/John.key
tls-auth ta.key 1
comp-lzo
verb 3

Теперь можно запускать OpenVPN на клиентском компьютере:

$ openvpn /etc/openvpn/client.conf

После этого, если всё настроено правильно, клиенты подключатся к VPN. Но на этом ещё не всё. Необходимо настроить перенаправление для туннеля VPN, чтобы пользователи могли направлять и получать через него трафик. Для начала необходимо разрешить серверу пропускать пакеты:

$ sysctl -w net.ipv4.ip_forward=1

Затем разрешить всем подключаться к серверу OpenVPN:

$ iptables -A INPUT -p udp --dport 1194 -j ACCEPT

Ну а также разрешить клиентам доступ в интернет через туннель:

iptables -I FORWARD -i tun0-o eth0 -j ACCEPT
iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Предыдущие три правила iptables стоит применять, когда в сети действует запрещающая политика. Также нужно следить за тем, чтобы брандмауэр не блокировал подключения по протоколу UDP к OpenVPN-серверу.

Заключение

В заключение необходимо отметить, что настройка сети VPN – довольно трудоёмкое и ответственное занятие. Особое внимание здесь нужно уделять организации ЦС, распространению ключей и сертификатов, а также форвардингу пакетов. Поэтому для таких задач очень важно иметь хорошую квалификацию по администрированию сетей. Также стоит учитывать, что была рассмотрена настройка OpenVPN для систем Ubuntu, однако принципиальной разницы для других дистрибутивов нет.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: