WebWost WebWostbeta

Поднимаем свой VPN с OpenVPN

Поднимаем VPN, используя OpenVPN и OpenVPN AS.

Al-Sher

Всем привет! Когда-то я писал статью о том, как сделать свой VPN, используя PPTP и сегодня я решил продолжить тему поднятия своего VPN-Сервера. Устанавливать я буду OpenVPN. Производить установку планирую на VPS от Fornex, приобретенный на черную пятницу, с установленной CentOS 7. Начнем.

OpenVPN

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

Установка OpenVPN

Для начала нам необходимо подключить Epel-репозиторий, в котором можно будет найти OpenVPN:

yum install epel-release

Ну а теперь можно и сам OpenVPN установить:

yum install openvpn

Создание сертификатов

Как я уже говорил, для аутентификации пользователей мы будем использовать сертификаты. Для работы с сертификатами существует специальный набор скриптов - easy-rsa. Скачаем их:

wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

и распакуем:

unzip master.zip

Заходим в папку со скриптами:

cd easy-rsa-master/easyrsa3

Скопируем файл vars.example, сохранив его как vars:

cp vars.example vars

И выполним инициализацию:

./easyrsa init-pki

Теперь можно приступить к генерации сертификатов. Для начала создадим удостоверяющий центр сертификатов:

./easyrsa build-ca

Вас попросят указать пароль к сертификату, а так же его название. Не стоит забывать пароль, ведь необходимо вводить каждый раз при создании сертификата OpenVPN. В итоге мы получим два файла:

Разумеется, секретный ключ мы надежно прячем на сервере и никому его не даем, а вот публичный ключ необходимо передавать клиентам вместе с пользовательскими сертификатами. Создадим запрос сертификата без пароля, используя nopass. Это избавит нас от необходимости вводить пароль сертификата при каждом запуске сервера:

./easyrsa gen-req server nopass

И подпишем его:

./easyrsa sign-req server server

Нас попросят подтвердить, что это нужный сертификат, а так же ввести пароль от удостовряющего центра сертификатов. Создадим еще и ключ Диффи-Хелмана:

./easyrsa gen-dh

Скопируем все наши сертификаты поближе к OpenVPN:

cp pki/ca.crt /etc/openvpn/ca.crt
cp pki/dh.pem /etc/openvpn/dh.pem
cp pki/issued/server.crt /etc/openvpn/server.crt
cp pki/private/server.key /etc/openvpn/server.key

Ну и создадим сертификаты для пользователя:

./easyrsa gen-req client nopass
./easyrsa sign-req client client

Настройка OpenVPN сервера

Файл настроек OpenVPN находится по пути /etc/openvpn/server.conf, но его нет... Давайте создадим, добавив него следующее содержимое:

port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig 10.10.0.1 255.255.255.0
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 "route 0.0.0.0 0.0.0.0"
push "dhcp-option DNS 8.8.8.8"

Откроем порт:

firewall-cmd --add-service openvpn --permanent 
firewall-cmd --add-port=1194/tcp --zone=public --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload

Проверим, включился ли masquerade:

firewall-cmd --query-masquerade

Если выводит yes, то всё хорошо. Подправим файл /etc/sysctl.conf, добавив в него следующую строку:

net.ipv4.ip_forward = 1

Это позволит трафику ходить между интерфейсами, то есть откроет нам доступ в сеть из локальной сети. Применим изменения:

sysctl -p

И запускаем OpenVPN:

systemctl start openvpn@server

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

Пару шагов назад мы создавали сертификаты для пользователя. Вот теперь они нам и пригодятся, так как, благодаря им, пользователь будет авторизовываться. Начнем:

client
dev tun
remote IP 1194
proto tcp
persist-key
persist-tun
resolv-retry infinite
nobind
comp-lzo
verb 3
cipher AES-256-CBC
keysize 256
remote-cert-tls server
key-direction 1
<ca>
File /etc/openvpn/ca.crt
</ca>
<cert>
File pki/issued/client.crt
</cert>
<key>
File pki/private/client.key
</key>

Не забудьте поставить в этом конфиге IP вашего сервера(IP), а так же вставить содержимое указанных файлов. Таким образом мы создаем 1 файл, в котором сразу указаны и настройки клиента, и сертификаты. Если вы хотите разделить на файлы(то есть сертификаты раздавать файлами отдельно от конфига), то можно создать такую конфигурацию клиента:

client
dev tun
remote IP 1194
proto tcp
persist-key
persist-tun
resolv-retry infinite
nobind
comp-lzo
verb 3
cipher AES-256-CBC
keysize 256
remote-cert-tls server
key-direction 1
ca /Path/To/ca.crt
cert /Path/To/client.crt
key /Path/To/client.key

Альтернативна - OpenVPN AS

Если вам всё это показалось сложным, то можно воспользоваться альтернативным вариантом - OpenVPN AS. Данная версия OpenVPN имеет удобный web-интерфейс, а так же поставляется с двумя бесплатными лицензиями(пользователями). Для установки OpenVPN AS необходимо выполнить следующие команды:

wget http://swupdate.openvpn.org/as/openvpn-as-2.1.12-CentOS7.x86_64.rpm
rpm -i openvpn-as-2.1.12-CentOS7.x86_64.rpm
passwd openvpn

На этом установка завершена, осталось лишь открыть 943 порт(web-интерфейс), а так же необходимые для OpenVPN порты:

firewall-cmd --add-port=943/tcp --zone=public --permanent
firewall-cmd --add-port=443/tcp --zone=public --permanent
firewall-cmd --add-port=1194/udp --zone=public --permanent
firewall-cmd --reload

Заходим на указанный в выводе адрес и авторизовываемся под пользователем openvpn с указанным паролем. После авторизации вам предложат скачать конфиг. Авторизация, по-умолчанию, использует логин и пароль. То есть, кроме конфига, вам необходимо помнить ваш логин и пароль от вашего аккаунта OpenVPN.

Заключение

Надеюсь данная статья кому-нибудь пригодится и поможет поднять свой VPN сервер без всякого труда. Спасибо за внимание.

1 комментариий

Загрузить еще комментариев

Новый комментарий