OpenVPN сервер на CentOS 7

Установка OpenVPN сервера

Для работы OpenVPN как в качестве сервера, так и в качестве клиента достаточно установить один пакет. Режим работы, сервер и/или клиет(ы) определяеся исключительно конфигурационными файлами.

Устанавливаем openvpn:

yum -y install openvpn

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

Для начала перейдем в директорию /etc/openvpn и скопируем туда пример конфигурационного файла

cd /etc/openvpn
cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf ./

Копируем необходимые для работы сервера ключи/сертификаты в рабочую директорию.

cd /etc/openvpn/CA/keys
cp ca.crt VPN_SRV_KEY.crt VPN_SRV_KEY.key dh2048.pem ta.key /etc/openvpn/server

Вопрос о генерации ключей/сертификатов был рассмотрен в предыдущем разделе.

Зададим следующие параметры для сервера OpenVPN изменив соответствующим образом файл конфигурации.

Пример файла конфигурации сервера с комментариями

# Используем UDP протокол, так как он более легкий
proto udp

# Используем tun
dev tun0

# Задаем место положение сертификатов и ключей
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/VPN_SRV_KEY.crt
key /etc/openvpn/server/VPN_SRV_KEY.key
dh /etc/openvpn/server/dh2048.pem

# Место положение файла где хранятся отозванные сертификаты.
# Раскоментировать когда таковые появятся
;crl-verify /etc/openvpn/server/crl.pem

# TLS
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC

# IP VPN Network
server 192.168.100.0 255.255.255.0

# Будем выделять постоянные IP адреса для клиентов,
# для этого задаем файл где они будут хранится
ifconfig-pool-persist /etc/openvpn/server/ipp.txt

# Позволяем клиентам видеть друг-друга, если это необходимо
client-to-client

# Задаем опции сжатия трафика (универсальный вариант)
;comp-lzo
# Задаем опции сжатия трафика (OpenVPN version > 2.4)
compress lz4-v2
push "compress lz4-v2"

# Убираем привилегии root пользователя с сервиса после запуска
user nobody
group nobody

Дополнительные настройки

Прячем обмен данными по протоколу OpenVPN

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

Изменяем строку в server.conf

port 443

Иногда этого может оказаться недостаточно, так как в некоторых сетях фильтруются не только порты, но и протоколы. В этом случаи можно попробовать сменить протокол с UDP на TCP.

Вносим изменения в server.conf, что бы замаскировать работу OpenVPN под https трафик

# Используем TCP протокол
proto tcp

# Используем порт протокола https
port 443

Пускаем трафик через OpenVPN сервер

В файле конфигурации server.conf добавляем строки

# Сообщаем OpenVPN клиентам что мы можем быть шлюзом
push "redirect-gateway def1 bypass-dhcp"

# Проталкиваем IP DNS серверов доступных OpenVPN серверу
# Для примера используются сервера google, можно прописать и сервера провайдера
# где хостится OpenVPN сервер, ну или любой другой доступный для OpenVPN сервера DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Для перенаправления трафика через OpenVPN сервер понадобится также произвести дополнительно на стороне сервера:

  • активировать IP Forwarding;
  • настроить firewall, роль которого часто играет iptables.
Как активировать IP Forwarding?
Как настроить iptables?

Объединение двух сетей через OpenVPN соединение

В файле настроек server.conf добавляем директивы для задания маршрутов

# Создаем маршруты к сетям клиентов
route 192.168.10.0 255.255.255.0
route 192.168.20.0 255.255.255.0

# Проталкиваем маршруты на клиенты
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.20.0 255.255.255.0"

Тут 192.168.10.0 и 192.168.20.0 IP адреса объединяемых сетей.

Если OpenVPN сервер и клиент разворачиваются не на шлюзах объединяемых сетей, то понадобится дополнительно прописать маршруты на маршрутизаторах.

Привязка отдельного IP адреса к определенному клиенту

В конфигурационном файле server.conf нужно задать директорию где будут хранится персональные настройки клиентов

client-config-dir /etc/openvpn/server/ccd

Допустим возникла необходимость привязать отдельный VPN IP к клиенту c certificate common name “Alis”. Для привязки IP 192.168.101.1 нужно:

  1. Добавить маршрут к сети в которой будет выделен IP клиента route 192.168.101.1 255.255.255.252
  2. Добавить в директорию с настройками клиентов /etc/openvpn/server/ccd файл Alis c ifconfig-push 192.168.101.1 192.168.101.2

Запуск сервера

Для запуска

systemctl start openvpn@server

Для автоматического запуска после загрузки системы

systemctl enable openvpn@server