Введение
VPN — виртуальная частная сеть, которая позволяет обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например, Интернет).
В нашем случае мы рассмотрим создание надежной и защищенной сети VPN на основе ненадежной сети Интернет при помощи продукта OpenVPN в рамках операционной системы Ubuntu 16.04.
OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL (https://ru.wikipedia.org/wiki/OpenVPN).
Установка необходимых пакетов
Команды будем выполнять от суперпользователя.
Приступим к установке ПО:
apt-get update apt-get install easy-rsa openvpn
easy-rsa — программа которая служит для создания и ведения инфраструктуры открытых ключей (PKI) в командной строке (CLI). В нашем случае мы будем использовать ее для выполнения действий с ключами и сертификатами, необходимыми для работы OpenVPN.
Демон OpenVPN будет работать у нас от имени непривилегированного пользователя openvpn. Добавим его:
adduser --system --no-create-home --disabled-login --group openvpn
Создание инфраструктуры открытых ключей (PKI)
Далее займемся созданием ключей и сертификатов при помощи easy-rsa. Скопируем необходимые файлы в /etc/openvpn/ и перейдем в эту директорию:
cp -r /usr/share/easy-rsa/ /etc/openvpn/ cd /etc/openvpn/easy-rsa/
Далее для удобства создания сертификатов в /etc/openvpn/easy-rsa/vars изменим следующие строки:
Производить работу с текстовыми файлами вы можете, используя удобные Вам текстовые редакторы (например, vi или nano).
- export KEY_COUNTRY="US" # Страна
- export KEY_PROVINCE="CA" # Регион/Область
- export KEY_CITY="SanFrancisco" # Город
- export KEY_ORG="Fort-Funston" # Организация
- export KEY_EMAIL="me@myhost.mydomain" # Электронный адрес
- export KEY_OU="MyOrganizationalUnit" # Отдел в компании
Изменение данных переменных на работу VPN не повлияет, однако визуально может сделать подключение более информативным.
Затем необходимо инициализировать переменные, используемые при создании публичного ключа командой:
. ./vars
и удалить существующие ключи:
./clean-all
Приступаем к созданию удостоверяющего центра (CA):
./build-ca
В ходе установки Вам потребуется проверить корректность данных, используемых для запроса на создание сертификата (certificate request). Если Вы предварительно изменили значения переменных в /etc/openvpn/easy-rsa/vars, то Вам достаточно будет просто нажимать Enter. Также, по желанию, Вы сможете указать пароль, который будет защищать приватный ключ удостоверяющего центра. Хорошо запомните его или запишите в надежном месте!
Аналогичным образом создаем остальные ключи и сертификаты.
Сертификат сервера OpenVPN, где «server» - имя сервера:
./build-key-server server
Ключ Диффи-Хеллмана служит для использования одноименного криптографического протокола, который позволяет двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи (создание ключа может занимать от нескольких секунд до нескольких минут, не прерывайте процесс):
./build-dh
Ключ клиента, где «user_1» - имя клиента:
./build-key user_1
Ключ HMAC для дополнительной защиты от DoS-атак и флуда:
openvpn --genkey --secret keys/ta.key
Сертификаты с ключами будут помещаться в директорию /etc/openvpn/easy-rsa/keys:
cd keys
Теперь необходимо создать каталог для конфигураций клиентов:
mkdir /etc/openvpn/ccd
и перенести файлы:
# Клиентские
cp user_1.crt user_1.key ca.crt ta.key /etc/openvpn/ccd/
# Серверные
cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/
Создание конфигурационного файла и запуск OpenVPN
Создаем директорию для логов OpenVPN:
mkdir /var/log/openvpn/
И переходим к созданию конфигурационного файла:
vi /etc/openvpn/server.conf
Подробная информация по директивам в конфигурационном файле доступна в файле /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz.
# Пользователь и группа user openvpn group openvpn # Порт, на котором висит openvpn port 2216 # Протокол, который использует openvpn proto udp # Интерфейс, которой будет подниматься dev tun # Привязка ключей ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh2048.pem tls-auth /etc/openvpn/ta.key 0 # 0 - использование на стороне сервера, 1 - на стороне клиента # Файл отозванных сертификатов. Раскомментировать, когда такие сертификаты появятся. # Создание сертификата доступно при помощи /etc/openvpn/easy-rsa/revoke-full ;crl-verify /etc/openvpn/crl.pem # Тип шифрования cipher AES-256-CBC # Сжатие трафика comp-lzo # IP адреса, которые будут выдаваться клиентам (IP и маска) server 10.10.0.0 255.255.255.0 # Будет производится пинг каждые 10 секунд, если пинга нет 120 сек, то будет выполнена попытка повторного подключения к клиенту keepalive 10 120 # При падении туннеля не выключать интерфейсы, не перечитывать ключи persist-key persist-tun # Директория с клиентскими сертификатами client-config-dir ccd # Лог статуса сервера status /var/log/openvpn/status.log # Лог подключения log /var/log/openvpn/serv.log # Уровень логирования от 0 до 9, чем выше тем больше информации verb 3 # Защита от повторов (максимум 20 одинаковых сообщений подряд) mute 20 # Cнятие ограничения на размер буфера сокета sndbuf 0 rcvbuf 0 # Трафик идет через OpenVPN push "redirect-gateway def1" # Использование DNS сервера push "dhcp-options DNS 8.8.8.8"
На этом настройка конфигурации OpenVPN закончена.
Включаем поддержку ipv4_forwarding. Для этого в /etc/sysctl.conf раскомментируем
#net.ipv4.ip_forward=1
после чего заново прочитаем файл:
sysctl -p
Помимо этого разрешаем маршрутизацию трафика через OpenVPN:
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
«eth0» - Ваш сетевой интерфейс для выхода в Интернет. Посмотреть его можно при помощи ifconfig.
Настраиваем iptables, чтобы после перезапуске ОС, настройки сохранились:
iptables-save > /etc/iptables.save echo -e "\npre-up iptables-restore < /etc/iptables.save" >> /etc/network/interfaces
Перезапуск и проверка корректной работы OpenVPN
Перезапускаем демон:
service openvpn restart
И проверяем поднялся ли интерфейс tun:
ifconfig
Также Вам могут помочь логи, которые мы настроили, и syslog:
cat /var/log/openvpn/serv.log tail -50 /var/log/syslog
При необходимости Вы можете запустить OpenVPN вручную и проверить, возникают ли ошибки при запуске:
openvpn --config /etc/openvpn/server.conf
Следующая строка в логе /var/log/openvpn/serv.log будет означать корректный запуск VPN:
Fri Dec 8 07:19:47 2017 Initialization Sequence Completed
Заключение
Теперь Вы знаете, как установить и настроить OpenVPN на Ubuntu 16.04. Более подробную информацию смотрите в документации OpenVPN.
Комментарии
bash: ./vars: No such file or directory