В данной статье расскажем о трёх способах установки OpenVPN-сервера — от простого к более сложному, а также о том, как настроить OpenVPN-клиент для подключения к этому серверу.
Требования к серверу
Эта инструкция может быть использована как на Linux VPS/VDS на виртуализации KVM, так и на выделенных серверах.
Важно. На виртуализациях OpenVZ и FreeBSD-Jail устройство TUN/TAP работать не будет.
Шаг первый. Установка OpenVPN
1 способ. В docker контейнере
Для этого требуется установить пакеты:
Debian\Ubuntu:
apt install curl docker.io
Centos 7:
yum install docker curl
Затем необходимо выполнить команду установки docker контейнера:
docker run --name dockovpn --cap-add=NET_ADMIN \ -p 1194:1194/udp -p 80:8080/tcp \ -e HOST_ADDR=$(curl -s https://api.ipify.org) \ alekslitvinenk/openvpn
После чего будет сгенерирован config для подключения к серверу OpenVPN, который единоразово можно скачать по ссылке http://Ваш IP/.
Следующим шагом подключаетесь к серверу способом, описанном в пункте 2.
2 способ. Установка OpenVPN скриптом
Установка OpenVPN скриптом происходит в полуавтоматическом режиме.
Скачаем скрипт:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
Дадим ему права на выполнение:
chmod +x openvpn-install.sh
После чего запускаем скрипт:
./openvpn-install.sh
После запуска скрипта необходимо ответить на несколько вопросов, а именно указать ваш IP-адрес и шлюз по умолчанию.
Так как скрипт автоматически определяет конфигурацию, она может быть определена не совсем верно, а значит и конфигурационный файл для подключения будет сгенерирован некорректно. Чтобы этого избежать, введем только IP-адрес, и уберем информацию о шлюзе.
После установки скрипт предложит выбрать имя клиента и уточнит, требуется ли пароль для ключа. Необходимо ввести имя пользователя и придумать пароль, которым вы будете пользоваться при подключении к OpenVPN-серверу. Если не хотите использовать пароль при подключении, поставьте цифру 1.
Client name: openvpn Do you want to protect the configuration file with a password? (e.g. encrypt the private key with a password) 1) Add a passwordless client 2) Use a password for the client Select an option [1-2]: 1
В результате будет сгенерирован файл по пути /root/client.ovpn
, где client
— имя, которое вы задали в поле Имя Пользователя
.
Файл достаточно скачать с сервера и выполнить подключение к VPN-серверу способом, описанным в пункте 2.
Повторный запуск скрипта позволяет:
- добавить пользователя openvpn,
- удалить пользователя openvpn,
- удалить OpenVPN.
3 способ. Установка OpenVPN вручную
Выполним установку openvpn сервера:
apt install -y openvpn
Для OpenVPN версии выше 2.3 набор скриптов easy-rsa не входит в инсталляцию по умолчанию, а скачивается отдельно.
Распаковываем структуру ключей:
mkdir /src; cd /src && wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip cd easy-rsa-master/easyrsa3 ./easyrsa init-pki
Создаём центр сертификации. В процессе вы получите запрос на ввод пароля от 4 до 32 символов, сохраните его, он нам потребуется в будущем:
./easyrsa build-ca
Получаем:
./pki/ca.crt ./pki/private/ca.key
Теперь генерируем запрос на создание сертификата, чтобы в дальнейшем подключаться к серверу без пароля:
./easyrsa gen-req server nopass
Подписываем запрос, будет запрошен пароль. Используем пароль, который сохранили при создании центра сертификации:
./easyrsa sign-req server server
Получаем:
./pki/issued/server.crt
Генерируем ключи для клиента:
./easyrsa gen-req client nopass ./easyrsa sign-req client client
Будет запрошен пароль, который мы сохранили при создании центра сертификации:
Получаем два файла:
./pki/private/client.key ./pki/issued/client.crt
Генерируем файл с параметрами Диффи-Хеллмана (dh.pem):
./easyrsa gen-dh
Это может занять продолжительное время. Получаем:
./pki/dh.pem
Перенесём полученные файлы в /etc/openvpn/ для удобства:
mv ./pki/dh.pem /etc/openvpn/dh1024.pem mv ./pki/private/client.key /etc/openvpn/ mv ./pki/private/server.key /etc/openvpn/ mv ./pki/ca.crt /etc/openvpn/ mv ./pki/issued/client.crt /etc/openvpn/ mv ./pki/issued/server.crt /etc/openvpn/
Файлы client.crt
, client.key
, ca.crt
нужно скопировать на компьютер пользователя, который будет подключаться к OpenVPN-серверу:
cd /etc/openvpn mkdir ovpn-client cp -rp client.crt client.key ca.crt ./ovpn-client/ zip ovpn-client.zip ./ovpn-client/*
Теперь настроим конфигурационный файл сервера. Он должен находиться в /etc/openvpn
и называться server.conf
. Пример конфигурационного файла server.conf
с рабочего OpenVPN сервера:
port 1194 proto tcp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log log openvpn.log log-append openvpn.log verb 3 push "redirect-gateway def1" push "dhcp-option DNS 8.8.8.8"
В конфигурационном файле в опциях ca
, cert
, key
, dh
можно использовать абсолютные пути до файлов или пути относительно директории /etc/openvpn
.
Пример использования абсолютных путей:
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt cert /etc/openvpn/easy-rsa/2.0/keys/server.crt key /etc/openvpn/easy-rsa/2.0/keys/server.key dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
Сохраняем файл. Выполняем команду настройки маршрутизации для OpenVPN сервера:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Запускаем OpenVPN:
systemctl start openvpn
Шаг второй. Настройка клиента OpenVPN
Для подключения к серверу, который мы настроили, необходимо настроить клиент OpenVPN. В случае, если сервер был установлен скриптом или с использованием docker-контейнера, то файл конфигурации openvpn.conf генерируется автоматически, и его нужно только импортировать в ваш OpenVPN клиент. Если вы настраивали сервер вручную, то и конфигурационный файл для клиента будет необходимо править вручную. Далее о том, как это сделать.
Для Windows
Клиент для Windows можно скачать здесь: https://openvpn.net/
Для подключения после настроек скриптом или с использованием docker-контейнера
После установки импортируем полученную нами конфигурацию, например client.ovpn
.
На значке OpenVPN в трее нажимаем ПКМ и выбираем Импорт конфигурации
:
Далее выберем нужный нам файл конфигурации:
В результате увидим, что конфигурация загружена успешно:
Следующим шагом осуществим подключение к нашему VPN-серверу, нажав кнопку Подключиться
:
Если подключение прошло корректно, то увидим следующее сообщение:
Для подключения после ручных настроек
После установки заходим в папку установки программы, например: C:\Program and Files\OpenVPN\sample-config
. Открываем текстовым редактором (блокнотом) файл client.ovpn
и пишем в строке:
remote my-server-1 1194
Необходимо указать IP своего сервера вместо my-server-1
. Больше ничего не трогаем, сохраняем и закрываем файл.
Затем нужно скачать с сервера 3 файла сертификатов в эту же папку, где только что редактировали файл. Итак, скачать нужно следующие файлы:
/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/client.crt /etc/openvpn/easy-rsa/keys/client.key
Все готово для подключения и проверки.
Нажимаем правой кнопкой на файл client.ovpn
и выбираем Start OpenVPN on this config file
. Если соединение прошло корректно, то увидите соответствующее сообщение:
Для Linux
Устанавливаем клиент:
Centos 7:
yum install -y openvpn
Debian/Ubuntu:
apt install -y openvpn
В случае, если OpenVPN сервер был установлен скриптом или с использованием docker-контейнера, настройка клиента OpenVPN происходит следующим образом.
Полученный после настройки файл с расширением .conf например client.conf
помещаем по пути /etc/openvpn/client.conf
и выполняем команду для подключения:
openvpn --config /etc/openvpn/openvpn.conf
В случае, если настройка OpenVPN сервера производилась вручную требуется сделать следующие действия:
Кладем три файла, сгенерированных на сервере в директорию /etc/openvpn/
:
client1.key client1.crt ca.crt
Создаем/редактируем файл конфигурации:
/etc/openvpn/openvpn.conf
Получаем файл со следующим содержимым:
remote <IP.вашего.сервера> 1194 push "redirect-gateway def1" tls-client remote-cert-tls server nobind proto tcp-client dev tun0 pull resolv-retry infinite comp-lzo ca ca.crt cert client1.crt key client1.key persist-tun persist-key verb 3 route-method exe route-delay 2
И подключаемся вручную с помощью такой команды:
openvpn --config /etc/openvpn/openvpn.conf