Установка и настройка OpenVPN на Debian 10 и Ubuntu 18.
В данном руководстве рассматривается установка и настройка OpenVPN сервера под управлением Debian 10 и Ubuntu 18.
OpenVPN-cервер имеет внешний IP-адрес 1.1.1.1 , подключаемые устройства будет получать адреса из сети 10.8.0.0/24
При данной схеме клиенты подключаются на адрес 1.1.1.1 , во внешний мир они также будут выходить с адреса 1.1.1.1. Если на сервере присутствует несколько внешних IP-адресов, то схему можно видоизменить: клиенты подключаются на 1.1.1.1, во внешний мир выходят с 1.1.1.2 ( не путать с double vpn ).
Итак, в наличии имеется свежеустановленный сервер на Debian 10.
Выполняем обновление:
# apt-get update
# apt-get upgrade
Производим установку пакетов, в том числе вспомогательных:
# apt-get install mc aptitude net-tools htop openvpn easy-rsa
Пакет easy-rsa требуется нам для создания собственного центра сертификации. Для безопасности его можно разместить на другом сервере, для простоты демонстрации создание ключей и сертификатов будем производить на этом же сервере. Для удобства работы создаём символическую ссылку на каталог с easy-rsa в /etc/openvpn:
# ln -s /usr/share/easy-rsa/ /etc/openvpn/
Для настройки переменных центра сертификации создаём файл vars:
# touch /etc/openvpn/easy-rsa/vars
и вносим в него следующие строки:
export KEY_COUNTRY="RU" export KEY_PROVINCE="EKB" export KEY_CITY="EKB" export KEY_ORG="SYSAD" export KEY_EMAIL="info@sysad.su" export KEY_CN="IT" export KEY_OU="IT" export KEY_NAME="openvpn.sysad.su"
И выполняем:
# ./vars
Сейчас всё готово к созданию центра сертификации. Выполняем инициализацию:
# cd /etc/openvpn/easy-rsa/
# ./easyrsa init-pki
В результате должны увидеть на экране результат работы:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki
Создаём корневой сертификат:
# ./easyrsa build-ca
При запросе скрипта
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
дважды задаём пароль.
На запрос
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
можно нажать клавишу Enter.
Создаем ключ Диффи-Хеллмана:
# ./easyrsa gen-dh
Для создания сертификата сервера на первом этапе создаём файл запроса:
# ./easyrsa gen-req server01 nopass
И затем создаём сертификат сервера:
# ./easyrsa sign-req server server01
На вопрос Type the word ‘yes’ to continue, or any other input to abort вводим: yes
И затем пароль, который использовался для создания корневого сертификата.
Для создания ta ключа используем команду:
# openvpn --genkey --secret pki/ta.key
Приступаем к настройке OpenVPN сервера.
Копируем файлы ca.crt, dh.pem, server01.crt, server01.key, ta.key в /etc/openvpn
Создаём файл конфигурации server.conf со следующим содержимым:
local 1.1.1.1 port 1194 proto udp dev tun ca ca.crt cert server01.crt key server01.key dh dh.pem tls-auth ta.key 0 server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" client-to-client keepalive 10 120 cipher AES-256-CBC auth SHA256 user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 3 # for udp only explicit-exit-notify 1
Включаем автозапуск OpenVPN сервера:
# systemctl enable openvpn@server
Стартуем сервис:
# systemctl start openvpn@server
Проверяем лог-файлы и наличие интерфейса tun0:
# ip a
Если в вводе команды ip a присутствуют нижеследующие строки, значит сервис успешно стартовал:
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 <pre>
Для того, чтобы сервер мог транслировать пакеты с клиента во внешний мир выполняем следующие действия.
В файл /etc/sysctl.conf добавляем строку
net.ipv4.ip_forward=1
Для вступления изменений в силу выполняем:
# sysctl -p
Также потребуется установить файрвол UFW.
# apt install ufw
Открываем файл /etc/ufw/before.rules
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла нижеследующие строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING
в таблице nat
и будет скрывать весь трафик от VPN:
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors . . .
Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw:
Найдите в файле директиву DEFAULT_FORWARD_POLICY
. Мы изменим значение с DROP
на ACCEPT
:
DEFAULT_FORWARD_POLICY="ACCEPT"
Открываем в файрволе необходимые порты:
# ufw allow 22 # ufw allow 1194/udp
Теперь деактивируем и активируем UFW для применения внесённых изменений:
# ufw disable
# ufw enable
Для настройки клиента потребуется создание клиентских сертификатов, ключей и файла конфигурации. Автоматизируем этот процесс.
В каталоге /etc/openvpn/client создадим файл make_config.sh
со следующим содержимым:
#!/bin/bash # First argument: Client identifier cd /etc/openvpn/easy-rsa /etc/openvpn/easy-rsa/easyrsa gen-req ${1} nopass /etc/openvpn/easy-rsa/easyrsa sign-req client ${1} cp /etc/openvpn/easy-rsa/pki/private/${1}.key /etc/openvpn/client/${1}.key cp /etc/openvpn/easy-rsa/pki/issued/${1}.crt /etc/openvpn/client/${1}.crt cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/client/ca.crt cp /etc/openvpn/easy-rsa/pki/ta.key /etc/openvpn/client/ta.key cd /etc/openvpn/client KEY_DIR=/etc/openvpn/client OUTPUT_DIR=/etc/openvpn/client BASE_CONFIG=/etc/openvpn/client/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
Создадим файл шаблона для клиентского конфига base.conf
:
client dev tun proto udp remote 1.1.1.1 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 verb 3 key-direction 1
Для генерации клиентских ключей, сертификата и файла конфигурации достаточно выполнить команду:
# bash /etc/openvpn/client/make_config.sh client01
где client01 желаемое имя файла конфигурации. На выходе получим client01.ovpn со встроенными ключами. Данный файл нужно перенести на клиентский компьютер и поместить в соответствующий каталог.
На этом настройка завершена.
13 комментариев