Настройка 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

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

5 2 голоса
Оцените статью
Подписаться
Уведомить о
27 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей Дагиль

Добрый день!
Я правильно понимаю, что destination в ifconfig это маршрут по умолчанию?

Daniel Smith

Добрый день. Вопрос платный. Сертификаты клиентов OpenVpn, настроенные по TCP, конфликтуют друг с другом, если несколько устройств подключены с одним и тем же сертификатом.
Но сертификаты, настроенные через UDP, не конфликтуют, если вы используете один и тот же сертификат на нескольких устройствах.
Скажите, можно ли настроить сертификаты UDP так, чтобы они конфликтовали друг с другом, если вы используете один и тот же сертификат на нескольких устройствах. Я заплачу за помощь

uk.datacloud.com@gmail.com

Daniel Smith

здравсвуйте! да вы правы. но параметр duplicate-cn в /etc/openvpn/server.conf в моем сервере нет. и все равно с одним сертификатом можно пользоваться на многих устройствах. может есть вариант отключить параметр duplicat_cn через ssh терминал? пользуюсь виртуалкой Ubuntu-18.04-amd64

помогите пожалуйста разобраться. Спасибо.

Daniel Smith

я попробывал в server.conf прописать duplicate-cn и закомментировать этот параметр но это работает как то странно. ключи не оключают друг друга а продолжает работать но интернет доступен тому кто подключается последним. обычно сертификаты должны выбивать друг друга

Frost

Кто поможет поднять на centos 7 одновременно на tcp и udp openvpn ?

Frost

уже реализовал.

berdi

zdrawstwuyte. po wasey instruksii u menya podklyicayutsya tcp i udp. no na tcp pocemuto ne idut pakety. podklyuceniya yest no interneta net. a yesli v tcp.conf nicego ne menyat i ostavit kak na udp.conf togda naoborot na tcp idut pakety a na udp net. no podklyuceniya k vpn yest. kak by eto ispravit? izwinyayus za latynskie bukwy, noutbuk nowyy yesyo russkiye nakleyki ne nakleyil

berdi

zdravstwuyte.
udp

udp conf.JPG
berdi

tcp

tcp konf.JPG
berdi
ip addr
есз.JPG
berdi

ya sdelal kak v poste 192.168 tam podklyuceniya yest no pakety ne idut na obeih protokolah.
1194 u nas zablokirovan. г nas mogut blokirowat drugiye porty krome 443

berdi

192,168,15-16 propisany

Снимок.PNG
berdi

10.8.0.0-10.9.0.0
resil problemu

Снимок.PNG
Artem

10.8.0.0 udp
10.9.0.0 tcp
Menem turkmenistandan 😁 hemmamiz kosenyas shondan

Не скажу

Çozulýami şo bilen?

berdi

blagodaryu

berdi

spasibo aleksandr za etot post. realno pomog

Den

Berdi Salam , drug mojesh svoy kontakt dat nujna tvoya pomosh pojalusta