Настраиваем 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"
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 используется на уровне компании, владелец сервера может отслеживать весь трафик сотрудников и блокировать отдельные ресурсы.