Настраиваем OpenVPN сервер на Linux в 20 шагах

Настраиваем OpenVPN сервер на Linux в 20 шагах

Зачем нужен свой VPN.

Virtual Private Network (VPN) — технология, которая позволяет создать виртуальную частную сеть между несколькими устройствами. Данные, передаваемые через эту сеть, шифруются. С помощью VPN пользователь может:

  • скрыть свое местонахождение, например, для DDoS-атаки;
  • обойти блокировку сайтов по географической привязке;
  • скрыть свой трафик при работе в открытых Wi-Fi сетях.

VPN часто включен в функционал браузера или роутера, может устанавливаться с помощью плагинов или доступным по подписке на сторонних сервисах. Однако собственный VPN работает стабильнее и быстрее, а также не имеет ограничения по трафику, как у бесплатных аналогов.

Разбираемся, как настроить свой VPN под Linux.

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

Сервер для VPN необходимо разворачивать на удаленной машине или в облаке. Для сервера мы будем использовать дистрибутив Ubuntu 21.10 и OpenVPN – реализацию VPN с открытым исходным кодом. Для клиентской машины можно выбрать любую операционную систему.

1. Устанавливаем OpenVPN на сервер.

sudo apt install openvpn

2. Устанавливаем Easy-Rsa. Это приложение помогает управлять сертификатами (.crt файлы) и генерировать ключи для OpenVPN (.key файлы). Сертификаты используются для криптографической защиты и при подключении к серверу подтверждают, что клиент именно тот, за кого он себя выдает.

sudo apt install easy-rsa

3. Создаем папку и копируем туда настройки и сертификаты.

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

4. Создаем центр сертификации и его инфраструктуру.

cd /etc/openvpn/easy-rsa/
sudo ./easyrsa init-pki

5. Создаем корневой сертификат – вводим пароль и имя.

sudo ./easyrsa build-ca

6. Создаем ключи для протокола Диффи-Хеллмана. Эта команда может выполняться достаточно долго.

sudo ./easyrsa gen-dh

7. Также создаем сертификат для отзыва подписанных сертификатов. Если сертификат будет скомпрометирован, его можно отозвать, закрыв доступ конкретному клиенту. Вводим пароль.

sudo ./easyrsa gen-crl

8. Создаем сертификаты для сервера и копируем их в папку openvpn.

sudo ./easyrsa build-server-full server nopass
sudo cp ./pki/ca.crt /etc/openvpn/ca.crt
sudo cp ./pki/dh.pem /etc/openvpn/dh.pem
sudo cp ./pki/crl.pem /etc/openvpn/crl.pem
sudo cp ./pki/issued/server.crt /etc/openvpn/server.crt
sudo cp ./pki/private/server.key /etc/openvpn/server.key

9. В папке examples лежат шаблоны для конфигурации сервера. Копируем шаблон, а затем открываем его для редактирования.

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

10. Раскомментируем следующие строки и сделаем VPN шлюзом по умолчанию. Чтобы раскомментировать строку, необходимо удалить символ ";" в его начале.

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
набір курсів: ОПАНУЙТЕ СКІЛИ ДЛЯ НОВОЇ ПРОФЕСІЇ В IT
 

11. Меняем название dh2048.pem на dh.pem и закомментируем строку tls-auth ta.key 0. Эта строка отвечает за проверку ключа для HMAC. В нашем примере он не применяется.

12. Включаем IP-переадресацию. С ней мы можем пересылать транзитные пакеты.

sysctl -w net.ipv4.ip_forward=1

13. Добавляем правила iptables для передачи пакетов.

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

В левой части мы указывали действие, а в правой — правило, применяемое к ней. ACCEPT дает разрешение на прохождение пакетов, а MASQUERADE заменяет адрес транзитных пакетов.

14. Ключи для клиентов создаются на сервере, а затем передаются клиенту.

sudo chmod -r 700 pki/revoked
sudo cp -r pki/revoked/ renewed
sudo cp -a openssl-easyrsa.cnf /etc/openvpn/pki
sudo ./easyrsa build-client-full client nopass

15. Создаем папку clients для всех ключей и папку client для конкретного клиента.

sudo mkdir /etc/openvpn/clients
sudo mkdir /etc/openvpn/clients/client

16. Копируем в папку client ключи и конфигурацию клиента.

cd /etc/openvpn/clients/client
sudo cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/clients/client/
sudo cp /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/clients/client/
sudo cp /etc/openvpn/easy-rsa/pki/private/client.key /etc/openvpn/clients/client/
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./client.conf

17. Открываем конфигурацию для редактирования.

sudo nano ./client.conf

18. Меняем my-server-1 на IP сервер и скрываем комментарием tls-auth ta.key 1, а затем добавляем строку auth-nocache. Он отвечает за то, чтобы логин и пароль клиента не хранились в виртуальной памяти.

19. Запускаем сервер.

sudo openvpn /etc/openvpn/server.conf

Теперь необходимо передать клиенту готовые ключи и конфигурационный файл. Клиент должен забросить его в config директорию OpenVPN на своей ОС и просто подключиться. Готово.

Важно помнить, что VPN не может полностью скрыть пользовательские данные и обеспечивает лишь частичную анонимность. Также, если VPN используется на уровне компании, владелец сервера может отслеживать весь трафик сотрудников и блокировать отдельные ресурсы.

Ещё статьи
Віктор Шитюк, Lead Data Engineer з 12 річним досвідом у IT сфері, про робочу рутину інженера даних, must-have інструменти та перспективи професії
Платформы для волонтеров, поиск жилья, полезные карты и игры.