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.
Объединение двух сетей через 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 нужно:
- Добавить маршрут к сети в которой будет выделен IP клиента
route 192.168.101.1 255.255.255.252
- Добавить в директорию с настройками клиентов /etc/openvpn/server/ccd файл Alis c
ifconfig-push 192.168.101.1 192.168.101.2
Запуск сервера
Для запуска
systemctl start openvpn@server
Для автоматического запуска после загрузки системы
systemctl enable openvpn@server