URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93253
[ Назад ]

Исходное сообщение
"Проблема с OpenVPN"

Отправлено Afternoon , 11-Апр-12 11:37 
Коллеги, помогите, уже мозг себе сломал.

Есть сервер FreeBSD 8.2, на нем поднят OpenVPN-сервер по tcp, к которому коннектились клиенты на W7 и WXP. Сервер подключен к инету через ADSL-модем.

Все замечательно работало до определенного момента, после которого канал VPN так же успешно поднимался, но программы через него не работали. Эмпирическим путем, а именно варьируя размер ICMP-пакетов командой ping определил, что нефрагментированные пакеты ходят отлично, а пакеты, требующие фрагментации, т.е. более 1472 байт не приходили обратно.

Вдумчивое чтение документации показало, что это наверняка проблема с MTU. Уменьшил MTU с двух сторон до 1400, потом до 1300. Картина та же - пакеты размером до MTU ходят отлично, все что больше - не приходит обратно (вполне возможно, что и не уходит). Пробовал играться с опцией mssfix - безрезультатно.

Обновил серверную часть - поставил последний из портов 2.2.2. Обновил клиентскую до 2.2.1. Не помогло.

Надеюсь и уповаю токмо на коллективный разум, который ткнет меня аки слепого барана в мою ошибку :)

Да, канал по UDP использовать не могу, т.к. часть клиентов сидят за прокси.

Ниже конфигурационный файл сервера и клиента.

Сервер:

port 1194
proto tcp-server
dev tun
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/---.crt
key /usr/local/etc/openvpn/keys/---.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
server 192.168.8.0 255.255.255.0
push "route 192.168.56.0 255.255.255.0"
duplicate-cn
keepalive 10 120
tls-server
tls-auth /usr/local/etc/openvpn/keys/ta.key 0
comp-lzo
persist-key
persist-tun
tun-mtu 1450
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3

Клиент:

client
dev tun
;port 1194
dev-node OpenVPN2
proto tcp-client
;nobind
remote --.---.--.---
http-proxy-retry # retry on connection failures
http-proxy proxy 8080
tls-client

ca            "C:\\Program Files\\OpenVPN\\config\\control\\ca.crt"
cert          "C:\\Program Files\\OpenVPN\\config\\control\\----.crt"
key           "C:\\Program Files\\OpenVPN\\config\\control\\----.key"
tls-auth      "C:\\Program Files\\OpenVPN\\config\\control\\ta.key" 1
ns-cert-type  server
comp-lzo
verb          3

tun-mtu 1450
tun-mtu-extra 32
mssfix

route-method  exe
route-delay 2
persist-key
persist-tun

В логах ничего крамольного нет.


Содержание

Сообщения в этом обсуждении
"Проблема с OpenVPN"
Отправлено konst , 12-Апр-12 01:12 
> Коллеги, помогите, уже мозг себе сломал.
> Все замечательно работало до определенного момента, после которого ...

А что это за "определенный момент"? Что именно изменилось?


"Проблема с OpenVPN"
Отправлено Afternoon , 12-Апр-12 10:52 
> А что это за "определенный момент"? Что именно изменилось?

Неясно, на сервере ничего не менялось в тот момент вообще. Подозреваю, что провайдер что-то подкрутил.


"Проблема с OpenVPN"
Отправлено DN , 12-Апр-12 01:44 
> Вдумчивое чтение документации показало, что это наверняка проблема с MTU. Уменьшил MTU
> с двух сторон до 1400, потом до 1300. Картина та же
> - пакеты размером до MTU ходят отлично, все что больше -
> не приходит обратно (вполне возможно, что и не уходит). Пробовал играться
> с опцией mssfix - безрезультатно.

Из manual:
It's best to use the --fragment and/or --mssfix options to deal with MTU sizing issues.

Both --fragment and --mssfix are designed to work around cases where Path MTU discovery is broken on the network path between OpenVPN peers.

The --mssfix option only makes sense when you are using the UDP protocol for OpenVPN peer-to-peer communication, i.e. --proto udp.

The --fragment option only makes sense when you are using the UDP protocol ( --proto udp ).

Переключитесь на UDP протокол.
Поставьте опции fragment и mssfix с обоих сторон.

mtu-test можно временно включить.


"Проблема с OpenVPN"
Отправлено Afternoon , 12-Апр-12 10:53 
>[оверквотинг удален]
> MTU sizing issues.
> Both --fragment and --mssfix are designed to work around cases where Path
> MTU discovery is broken on the network path between OpenVPN peers.
> The --mssfix option only makes sense when you are using the UDP
> protocol for OpenVPN peer-to-peer communication, i.e. --proto udp.
> The --fragment option only makes sense when you are using the UDP
> protocol ( --proto udp ).
> Переключитесь на UDP протокол.
> Поставьте опции fragment и mssfix с обоих сторон.
> mtu-test можно временно включить.

Спасибо, я это читал, но VPN по UDP мне не подходит из-за того, что ряд клиентов сидит за прокси-серверами.


"Проблема с OpenVPN"
Отправлено DN , 12-Апр-12 16:44 
>> Переключитесь на UDP протокол.
>> Поставьте опции fragment и mssfix с обоих сторон.

Sorry , mssfix на одной стороне.

> Спасибо, я это читал, но VPN по UDP мне не подходит из-за
> того, что ряд клиентов сидит за прокси-серверами.

Попробуйте установить маленькое MTU (=>576) для туннеля.
Сбрасывйте принудительно DF бит для пакетов,
которые направляются в туннель.


"Проблема с OpenVPN"
Отправлено Afternoon , 13-Апр-12 12:08 

> Попробуйте установить маленькое MTU (=>576) для туннеля.
> Сбрасывйте принудительно DF бит для пакетов,
> которые направляются в туннель.

Установил MTU в 576 - картина та же.

Принудительно сбрасываю бит DF. Пакеты объемом ниже MTU проходят и возвращаются отлично, пакеты более - естественно, не проходят.


"Проблема с OpenVPN"
Отправлено DN , 14-Апр-12 15:31 
> Установил MTU в 576 - картина та же.
> Принудительно сбрасываю бит DF. Пакеты объемом ниже MTU проходят и возвращаются отлично,
> пакеты более - естественно, не проходят.

Посмотрите tcpdump на маршрутизаторе под FreeBSD, что пакеты большого размера, которые
направляются в туннель, действительно дефрагментируются маршрутизатором.


"Проблема с OpenVPN"
Отправлено a2l , 17-Апр-12 05:02 
>> Попробуйте установить маленькое MTU (=>576) для туннеля.
>> Сбрасывйте принудительно DF бит для пакетов,
>> которые направляются в туннель.
> Установил MTU в 576 - картина та же.
> Принудительно сбрасываю бит DF. Пакеты объемом ниже MTU проходят и возвращаются отлично,
> пакеты более - естественно, не проходят.

Это значит, что в "определённый момент" или провайдер ( или ты сам себе) зарезал icmp-трафик.Попробуй отключить firewall, если не поможет - ругайся с провайдером.
Чудикам, которые icmp бездумно блокируют я бы яйца поотрывал.
http://www.netheaven.com/pmtu.html - теория по теме.