Настройка OpenVPN на CentOS 7

Автор настоятельно рекомендует прежде всего, обратить внимание на актуальную версию статьи, где OpenVPN настраивается на сервере с Fedora.

Однако, если для читателя критично использовать постепенно устаревающий материал…

Это просто ещё одна инструкция по настройке OpenVPN сервера. Допустим что у нас уже есть VDS простой конфигурации (512mb памяти и т. п.). На нём установлена CentOS 6 или CentOS 7 и на него же мы будем ставить наш VPN сервер.

openvpn centos

Настраиваем OpenVPN сервер.

1. Приступаем.

Ставим необходимые пакеты и проводим первичные приготовления.

Для CentOS 6:
# yum install epel-release
# yum install openvpn easy-rsa

# mkdir -p /etc/openvpn/easy-rsa/keys
# cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Для CentOS 7:
# yum install wget epel-release
# yum install openvpn
# cd /usr/local/src/
# wget https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
# tar xvfz 2.3.3.tar.gz
# mkdir -p /etc/openvpn/easy-rsa/keys
# cp -arvp /usr/local/src/easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

2. Готовим окружение.

Открываем файл /etc/openvpn/easy-rsa/vars и при необходимости изменяем в нём следующие строки:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="Superorg"
export KEY_EMAIL="info@superdomain.com"
export KEY_OU="SuperorgVPN"

Генерируем сертификат и ключ для сервера (здесь для него используется имя server):

# cd /etc/openvpn/easy-rsa
# source ./vars 
# ./clean-all
# ./build-ca
# ./build-key-server server
# ./build-dh
# cd /etc/openvpn/easy-rsa/keys/
# cp dh2048.pem ca.crt server.crt server.key /etc/openvpn/

В ходе создания сертификата, система предложит установить на него пароль. Делать это или нет, каждый для себя решает сам. Возможно, если VPN настраивается на собственном сервере и только для собственного использования, пароль на сертификаты можно и не устанавливать.

3. Пишем конфиг OpenVPN сервера.

И в 6, и в 7 версии CentOS открываем файл /etc/openvpn/server.conf и прописываем следующее…

# cat /etc/openvpn/server.conf
local 1.2.3.4
port 3333
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
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"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
mssfix
fragment 1300
sndbuf 524288
rcvbuf 524288
push "sndbuf 524288"
push "rcvbuf 524288"
log openvpn.log
verb 5

1.2.3.4 — IP сервера, 3333 — порт, на котором будет работать OpenVPN, лог можно отправить в /dev/null при необходимости. Здесь так же сразу же используется увеличенный буфер. Подробнее об этом нужно прочитать в отдельной заметке.

Конфиг сохраняем, сервис openvpn перезапускаем и добавляем его в автозапуск.

Для CentOS 6:
# chkconfig openvpn on
# service openvpn restart
Для CentOS 7:
# systemctl -f enable openvpn@server.service
# systemctl restart openvpn@server.service

4. Настраиваем маскарад и разрешаем форвардинг.

Для CentOS 6:

В iptables добавляем следующее правило:

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# service iptables save
Для CentOS 7:

В FirewallD выполняем следующие команды:

# firewall-cmd --permanent --add-masquerade
# INTFS=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $INTFS -j MASQUERADE
# firewall-cmd --reload

Включаем форвардинг (и для 6, и для 7 версии):

# cat /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
# sysctl -p

5. Создаём сертификаты для клиента.

Здесь для него используется имя client.

# cd /etc/openvpn/easy-rsa
# ./build-key client
# mkdir /root/clientserts
# mv /etc/openvpn/easy-rsa/keys/client.* /root/clientserts/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /root/clientserts/
# cd /root/
# zip -r -9 clientserts.zip clientserts/

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

client.crt
client.key
ca.crt

Остаётся только настроить наш софт на ПК для работы с OpenVPN. Настройка клиентов описана в заметке OpenVPN Fedora Server, при необходимости, можно воспользоваться примером из неё.

@SysadminNotes

14 thoughts on “Настройка OpenVPN на CentOS 7

  1. В Windows для настройки OpenVPN
    …..
    cert «C:\\Program Files\\OpenVPN\\config\\client.crt»
    key «C:\\Program Files\\OpenVPN\\config\\server.key»
    …..
    в последнем не server.key, а client.key

    + порты лучше указать заранее, что можно выбрать только 1194 в случае с udp

  2. Статья была переработана и актуализирована и для CentOS 6, и для CentOS 7. В конфиг сервера были добавлены увеличенные буферы.

    > + порты лучше указать заранее, что можно выбрать только 1194 в случае с udp

    Сорри за действительно долгий ответ. Не совсем понял о чём речь в этом месте — я без проблем указываю не стандартный порт для UDP (7194, например), и всё работает корректно.

    1. Тут скорее посыл был к открытым стандартным портам на сервере, не так выразился, но в любом случае на собственном опыте рекомендую выбирать режим tcp и 443 порт, уж слишком много админов и публичных вай-фаев блокируют все остальное 🙂

  3. У меня в 7-ом центосе не оказалось firewalld:
    FirewallD is not running
    На попытку сохранить правила давало:
    The service command supports only basic LSB actions….

    Пришлось загуглить вариант:
    Then install iptables-service by following command:
    # yum install iptables-services
    Then enable iptables as services:
    # systemctl enable iptables
    Now you can save your iptable rules by following command:
    # service iptables save

  4. В файле /etc/sysctl.conf у меня записаны строки:
    # sysctl settings are defined through files in
    # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.

    Значит мне в какой-то другой файл надо конфиг записать?

  5. ./build-key client
    ругается:
    Please edit the vars script to reflect your configuration….

    Не понимаю, прошлый раз по Вашей инструкции ставил, всё было нормально, сейчас же прям с каждой строкой война.

  6. Вроде всё настроил, коннекта нет. Пробую 3 строки для иптейблс из статьи https://habr.com/ru/post/153855/ — я раньше по ней настраивал, но что-то там тоже не получалось для центоса 7-го

  7. Антиспам порезал все комментарии Ивана. %) Если бы вручную не проверял, так бы их и не увидел. Остаётся надеяться, что ему таки удалось установить всё что нужно.

    1. Удалось только поставить с нуля на шестой центос. На седьмом не взлетело, чёрт его знает почему. Да и то скорость печальная.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *