Настройка OpenVPN. Одновременная работа по udp, tcp протоколам

Стандартная настройка OpenVPN — работа по протоколу udp. Однако бывают случаи, когда нужно перейти на tcp. Например, решением следующей ошибки

TLS Error: TLS key negotiation failed to occur within 60 seconds

стал переход на использование протокола tcp для одного-двух клиентов

А что делать с остальными клиентами? Подключаться к каждому по teamviewer’у для редактирования конфига не вариант. Тогда нужно настроить OpenVPN на работу по двум протоколам. Но стандартная его настройка не позволяет включить два протокола в одном конфиге. Значит нужно сделать два конфига, каждый для своего протокола получив таким образом два рабочих независимых инстанса OpenVPN. Рассмотрим решение на примере Gentoo

Стандартно

Стандартный конфиг (openvpn.conf) сервера прост и выглядит приблизитено так:

local 333.33.3.1
port 1194
proto udp
dev tun15
management localhost 7505

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/dkc.crt
key /etc/openvpn/keys/dkc.key
dh /etc/openvpn/keys/dh.pem
crl-verify /etc/openvpn/keys/crl.pem

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

push "dhcp-option DNS 192.168.12.9"
push "dhcp-option DNS 192.168.12.10"

tls-server
tls-auth keys/ta.key 0
tls-timeout 60
auth SHA512
cipher AES-256-CBC
keepalive 10 60
comp-lzo
max-clients 30
user nobody 
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
log /var/log/openvpn/openvpn.log
verb 3

Разделяем конфиги

Содержимое конфига выше оставляем как есть, только переименуем его. Чуть ниже будет понятно почему так нужно

mv openvpn.conf udp.conf

Теперь на его базе создаем конфиг для tcp-протокола

cp udp.conf tcp.conf

И приводим его к следующему виду

local 333.33.3.1
port 1194
proto tcp
dev tun16
management localhost 7506

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/dkc.crt
key /etc/openvpn/keys/dkc.key
dh /etc/openvpn/keys/dh.pem
crl-verify /etc/openvpn/keys/crl.pem

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

push "dhcp-option DNS 192.168.12.9"
push "dhcp-option DNS 192.168.12.10"

tls-server
tls-auth keys/ta.key 0
tls-timeout 60
auth SHA512
cipher AES-256-CBC
keepalive 10 60
comp-lzo
max-clients 30
user nobody 
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
log /var/log/openvpn/openvpn.log
verb 3

Я выделил строки, которые нужно было изменить

Запуск

Запуск двух инстансов OpenVPN можно осуществить вручную, но нам нужно, чтоб они запускались сами после перегрузки сервера. В Gentoo это решается очень просто

cd /etc/init.d
ln -s openvpn openvpn.udp
ln -s openvpn openvpn.tcp
Расширение линка должно быть такое же как и имя конфига

Забираем из автозапуска стандартный openvpn скрипт

rc-update del openvpn

И добавляем свои линки

rc-update add openvpn.udp
rc-update add openvpn.tcp

После запуска

rc-service openvpn.udp start
rc-service openvpn.tcp start

должны подняться интерфейсы tun15, tun16

настройка openvpn

Если так произошло, примите мои поздравления и подключайте клиентов

Александр Черных

системный администратор

Статьи по теме

0