OpenVPN на CentOS 6


yum install openvpn
yum install easy-rsa


Перед тем как приступать к настройкам следует проверить существуют ли в системе интерфейсы tun/tap. Вводим:
cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state
Обратите внимание на статус: «File descriptor in bad state» — значит здесь всё есть хорошо.

На следующем шаге следует создать дополнительные файлы и каталоги, поменять права и контекст на них:
touch /etc/openvpn/server.conf
touch /etc/openvpn/ip.sv
mkdir /var/log/openvpn
chown openvpn.openvpn /etc/openvpn/*
chcon -u system_u /etc/openvpn/*
restorecon -v -R /etc/openvpn/*

cp -ai /usr/share/easy-rsa/2.0 ~/easy-rsa
cd ~/easy-rsa

Прознать какая версия openssl стоит в системе:
rpm -qa openssl
openssl-1.0.0-27.el6_4.2.i686

Теперь выполняем всё по порядку:
. ./vars
Обратите внимание — две точки через пробел
Удаляем всё и подготовим к генерации каталог /usr/share/openvpn/easy-rsa/2.0/keys:
./clean-all

Создаём файл ca.key — он нужен и серверу и клиенту. Генератор будет задавать различные вопросы, можно жать Enter на всех вопросах:
./build-ca


Генерируем сертификат и ключ для сервера:
./build-key-server server

Теперь генерируем файл параметров по алгоритму Diffie-Hellman:
./build-dh 

Генерируем сертификат и ключ для клиента velowup (такое вот имя у клиентского сертификата):
./build-key velowup


И последним создаем общий ключ для клиентов и сервера. Это TLS-ключ:
openvpn --genkey --secret ta.key

Теперь следует создать каталоги в конфигурационной директории для ключей:
mkdir /etc/openvpn/.key
mkdir /etc/openvpn/.tls

Переместить сгенерированные файлы в соответствующие каталоги:
cp key/* /etc/openvpn/.key/
cp ta.key /etc/openvpn/.tls/

Поправить контекст:
chcon -u system_u /etc/openvpn/.key/* 
restorecon -v /etc/openvpn/.key/* 
chcon -u system_u /etc/openvpn/.tls/* 
restorecon -v /etc/openvpn/.tls/* 
chcon -u system_u /etc/openvpn/.key/ 
restorecon -v /etc/openvpn/.key/ 
chcon -u system_u /etc/openvpn/.tls/ 
restorecon -v /etc/openvpn/.tls/

Разрешаем tcp на порту 1723 в SELinux:
semanage port -a -t openvpn_port_t -p tcp 1723


При загрузке системы автоматически поднимаются все VPN соединения, для которых в папке /etc/openvpn есть соответствующие файлы с расширением .conf
Конфигурационный файл сервера /etc/openvpn/server.conf привести к следующему виду:
# Какой интерфейс слушать?
#(У кого-то это может быть ip адрес интерфейса, который смотрит в интернет. Скорее всего это скорее всего eth0)
local 91.214.71.127

# Какой порт слушать?
port 1723

# На каком протоколе будем работать?
proto tcp-server

# В каком режиме работать? Мостом (tap) или маршрутизация (tun)
dev tun0
;dev tap0

# MTU
tun-mtu 1392

# Разрешить аутентификацию по паролю
#auth-user-pass
# Пути к корневому сертефикату, сертификату и закрытому ключу.
ca /etc/openvpn/.key/ca.crt
cert /etc/openvpn/.key/server.crt
key /etc/openvpn/.key/server.key

# Параметры Диффи-Хелмана
dh /etc/openvpn/.key/dh2048.pem

# Отключить проверку пользовательских сертификатов
# client-cert-not-required
# username-as-common-name

# Настройка режима сервера и ИП адресов для выдачи клиентам. Сервер возьмет
# себе 10.10.20.1
# На каждом клиенте указывается адрес сервера 10.10.20.1. Закомментируйте эту
# строку, если вы используете ethernet мост.
server 10.10.20.0 255.255.255.0
;ifconfig 172.16.1.1 255.255.255.0
;ifconfig-pool 172.16.1.2 172.16.1.96

# Установите серверный режим для ethernet моста.
# Вы должны сначала в своей ОС настроить мост
# между TAP и NIC интерфейсом.
# Затем вы должны вручную установить
# IP/маску на мост, к примеру 10.8.0.4/255.255.255.0.
# В заключении мы должны установить диапазон IP
# адресов в этой подсети для выделения клиентам
# (начало=10.8.0.50 конец=10.8.0.100).
# Оставьте эту строку закоментированной, если вы
# не используете ethernet мост.
;server-bridge

# Режим сервера
daemon
mode server

# Разрешаем использовать TLS
tls-server

# Разрешить клиентам доступ VPN клиентам между друг другом?
#client-to-client

# Сопоставления клиент <-> виртуальный IP-адрес
# хранятся в этом файле. Если OpenVPN упадет или
# будет перезапущен, повторно подключающимся клиентам могут быть назначены
# из пула такие же виртуальные IP-адреса, которые были назначены им в прошлый
# раз.
ifconfig-pool-persist /etc/openvpn/ip.sv

;client-config-dir /etc/openvpn/.clt

# Передача клиенту параметров маршрутизации, где X.X.X.X — IP адрес вашего eth0, что смотрит в интернет
push «route 192.168.0.0 255.255.255.0»

# Передаем клиенту настройку шлюза
;push «route-gateway 192.168.0.2»

# Некоторые Windows-специфичные сетевые настройки
# могут быть переданы клиентам, такие как адреса DNS-
# или WINS-серверов. ПРЕДОСТЕРЕЖЕНИЕ:
# openvpn.net/faq.html#dhcpcaveats
push «dhcp-option DNS 192.168.0.2»
;push «dhcp-option DNS 192.168.0.1»

# Чтобы весь трафик при подключении к VPN шел через VPN-сервер (это заставляет
# клиента изменить шлюз по умолчанию на vpn-сервер),
# нужно добавить следующую строчку в основной конфиг openvpn.conf.
;push «redirect-gateway»

# Проверка соединения
keepalive 10 120

# Для большей безопасности и защиты от ДОС и флуда выдаём клиентам ta.key. На сервере 0, на клиентах 1.
tls-auth /etc/openvpn/.tls/ta.key 0

# Допустимые алгоритмы шифра. Надо прописывать так же и на клиенте.
cipher AES-256-CBC
#cipher AES256-SHA

# размер ключа в битах
#keysize 2048

# алгоритм хэширования
auth SHA512

# Включить сжатие. Если да, то надо прописывать и на клиенте.
comp-lzo

# Максимальное количество одновременно подключенных клиентов
max-clients 20

# От какого пользователя и группы работать серверу?
user openvpn
group openvpn

# persist-опции скажут OpenVPN при перезагрузке воздержаться от доступа
# к определенным ресурсам,
# т.к. они могут быть недоступны из-за понижения привелегий.
persist-key
persist-tun

# Файл состояния текущих соединений. Перезаписывается раз в минуту.
status /var/log/openvpn/openvpn-status.log

# Куда писать логи?
log-append /var/log/openvpn/openvpn.log

# Уровень детализации лога
verb 5

# Не записывать больше повторяющихся сообщений сразу
mute 20



Теперь можно переходить к настройкам файервола.
В iptables перед строчками, запрещающими все INPUT и FORWARD
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

пишем:

-A INPUT -i tun0 -j ACCEPT 
-A FORWARD -i tun0 -j ACCEPT

Также добавляем строки «натизации»:
*nat 
:PREROUTING ACCEPT [4:614]
:POSTROUTING ACCEPT [18:936]
:OUTPUT ACCEPT [18:936]
-A POSTROUTING -s 10.10.20.0/24 -o eth0 -j MASQUERADE

«Рестартим» iptables:
service iptables restart

Запускаем openvpn
service openvpn start

Проверяем что сервис открыл порт да и вообще работает:
netstat -nlp | grep 1723 tcp 0 0 192.168.0.2:1723 0.0.0.0:* LISTEN

Если всё нормально, ставим OpenVPN в автозапуск:
chkconfig openvpn on


Настройка клиента OpenVPN
Поскольку дома на рабочей машине стоит CentOS, то установку и настройку клиентской части буду вести относительно этой операционки, хотя отличие для других дистрибутивов и операционных систем минимальны.
Создать каталоги, в которых будут располагаться клиентские ключевые файлы:
mkdir /etc/openvpn/.key/ mkdir /etc/openvpn/.tls/

Наисекретнейшим образом стоит перенести на будущую клиентскую машину файлы, ранее сгенерированные на сервере:
ca.crt dh2048.pem velowup.crt velowup.key

в каталог /etc/openvpn/.key/.
А файл ta.key пусть полежит в каталоге etc/openvpn/.tls.
Файл конфигурации клиента OpenVPN следующего вида:

# Укажем, что мы являемся клиентом
client
tls-client
# В каком режиме работать? Мостом (tap) или маршрутизация (tun)
dev tun

# На каком протоколе работать
proto tcp-client

# Адрес и порт сервера (Хоть IP хоть доменное имя)
remote wostok.su 1723

# Бесконечно пробовать разрешить имя хоста OpenVPN-сервера.
resolv-retry infinite

# Не «биндиться» к интерфейсу
nobind

# Стараться сохранять некоторое объекты между перезапусками
persist-key
persist-tun

# Параметры SSL/TLS.
# Смотрите файл конфигурации сервера для более
# подробного описания. Лучше всего использовать
# отдельные пары .crt/.key-файлов
# для каждого клиента. Один ca-файл
# может быть использован для всех клиентов.
ca /etc/openvpn/.key/ca.crt
dh /etc/openvpn/.key/dh2048.pem
cert /etc/openvpn/.key/velowup.crt
key /etc/openvpn/.key/velowup.key

# Если на сервере используется ключ tls-auth,
# то каждый клиент также должен иметь этот ключ.
tls-auth /etc/openvpn/.tls/ta.key 1

# Выбор криптографического шифра (cipher).
# Если опция cipher используется на сервере,
# то вы также должны указать её здесь.
cipher AES-256-CBC
auth SHA512

# Включить сжатие
comp-lzo

# Уровень журналирования
verb 4

# Не записывать повторяющиеся сообщения более чем
mute 20

# От какого пользователя и группы работать клиенту?
user openvpn
group openvpn

# Куда писать журнальные данные о работе клиента?
log-append /var/log/openvpn/openvpn_client.log
status /var/log/openvpn/status_client.log

;route 172.16.1.0 255.255.255.0
Вот, собственно, и все настройки. Дальше запуск клиента и выполнение требуемых операций из далека:
/usr/sbin/openvpn /etc/openvpn/client.conf
yum install -y pritunl-*.rpm
systemctl start mongod pritunl
systemctl enable mongod pritunl
# open "https://localhost:9700/"

Поиск по этому блогу