LINUX.ORG.RU
ФорумAdmin

Еще раз про OpenVPN и MTU

 , ,


0

2

Есть сервер OpenVPN на убунте и клиенты на платформах Linux, Android и Win разных версий.

На nix и android проблем никаких, на большинстве win-машин тоже. Но есть несколько win-машин с такой проблемой: при подключении к vpn по началу все норм, но рандомно через какое-то время сайты (не все) перестают открываться. При этом на пинги продолжают отвечать. Бегло погуглив, пришел таки к выводу, что дело в MTU на конкретных машинах, но как я с ним не экспериментировал, рабочего результата так и не достиг.

MTU провайдера у этих машин 1492 (ADSL).

Конфиг сервера:

local aaa.bbb.xxx.yyy
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
tls-auth ta.key 0
crl-verify crl.pem
port 9852
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

Конфиг проблемного клиента:

remote aaa.bbb.xxx.yyy 9852
comp-lzo yes
client
dev tun
ping 10
proto udp
tls-client
remote-cert-tls server
pkcs12 "c:\\Program Files\\OpenVPN\\config\\vpn.work1.p12"
tls-auth "c:\\Program Files\\OpenVPN\\config\\ta.key" 1
verb 3
pull

Лог подключения с клиента (ip было лень уже замазывать):

C:\Windows\system32>"C:\Program Files\OpenVPN\bin\openvpn.exe" --config "c:\Prog
ram Files\OpenVPN\config\myvpnconfig.ovpn"
Wed Jul 29 09:23:16 2015 OpenVPN 2.3.7 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO]
[PKCS11] [IPv6] built on Jul  9 2015
Wed Jul 29 09:23:16 2015 library versions: OpenSSL 1.0.1p 9 Jul 2015, LZO 2.08
Enter Private Key Password:
Wed Jul 29 09:23:20 2015 WARNING: this configuration may cache passwords in memo
ry -- use the auth-nocache option to prevent this
Wed Jul 29 09:23:20 2015 Control Channel Authentication: using 'c:\Program Files
\OpenVPN\config\ta.key' as a OpenVPN static key file
Wed Jul 29 09:23:20 2015 Outgoing Control Channel Authentication: Using 160 bit
message hash 'SHA1' for HMAC authentication
Wed Jul 29 09:23:20 2015 Incoming Control Channel Authentication: Using 160 bit
message hash 'SHA1' for HMAC authentication
Wed Jul 29 09:23:20 2015 Socket Buffers: R=[8192->8192] S=[8192->8192]
Wed Jul 29 09:23:20 2015 UDPv4 link local (bound): [undef]
Wed Jul 29 09:23:20 2015 UDPv4 link remote: [AF_INET]109.234.38.113:9852
Wed Jul 29 09:23:20 2015 TLS: Initial packet from [AF_INET]109.234.38.113:9852,
sid=981eb7c4 1766a3de
Wed Jul 29 09:23:21 2015 VERIFY OK: depth=1, C=RU, ST=59, L=Orda, O=vpnorda.tk,
OU=OrdaVpnServer, CN=vpnorda.tk, name=EasyRSA, emailAddress=root@vpnorda.tk
Wed Jul 29 09:23:21 2015 Validating certificate key usage
Wed Jul 29 09:23:21 2015 ++ Certificate has key usage  00a0, expects 00a0
Wed Jul 29 09:23:21 2015 VERIFY KU OK
Wed Jul 29 09:23:21 2015 Validating certificate extended key usage
Wed Jul 29 09:23:21 2015 ++ Certificate has EKU (str) TLS Web Server Authenticat
ion, expects TLS Web Server Authentication
Wed Jul 29 09:23:21 2015 VERIFY EKU OK
Wed Jul 29 09:23:21 2015 VERIFY OK: depth=0, C=RU, ST=59, L=Orda, O=vpnorda.tk,
OU=OrdaVpnServer, CN=vpnorda.tk, name=EasyRSA, emailAddress=root@vpnorda.tk
Wed Jul 29 09:23:23 2015 Data Channel Encrypt: Cipher 'BF-CBC' initialized with
128 bit key
Wed Jul 29 09:23:23 2015 Data Channel Encrypt: Using 160 bit message hash 'SHA1'
 for HMAC authentication
Wed Jul 29 09:23:23 2015 Data Channel Decrypt: Cipher 'BF-CBC' initialized with
128 bit key
Wed Jul 29 09:23:23 2015 Data Channel Decrypt: Using 160 bit message hash 'SHA1'
 for HMAC authentication
Wed Jul 29 09:23:23 2015 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES2
56-SHA, 2048 bit RSA
Wed Jul 29 09:23:23 2015 [vpnorda.tk] Peer Connection Initiated with [AF_INET]10
9.234.38.113:9852
Wed Jul 29 09:23:26 2015 SENT CONTROL [vpnorda.tk]: 'PUSH_REQUEST' (status=1)
Wed Jul 29 09:23:26 2015 PUSH: Received control message: 'PUSH_REPLY,redirect-ga
teway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,route 10.
8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.18 1
0.8.0.17'
Wed Jul 29 09:23:26 2015 OPTIONS IMPORT: timers and/or timeouts modified
Wed Jul 29 09:23:26 2015 OPTIONS IMPORT: --ifconfig/up options modified
Wed Jul 29 09:23:26 2015 OPTIONS IMPORT: route options modified
Wed Jul 29 09:23:26 2015 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options
 modified
Wed Jul 29 09:23:26 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jul 29 09:23:26 2015 open_tun, tt->ipv6=0
Wed Jul 29 09:23:26 2015 TAP-WIN32 device [Подключение по локаÐ
»ÑŒÐ½Ð¾Ð¹ сети 2] opened: \\.\Global\{125CBAA8-B6E0-400C-A292-C8FEDA657477}.
tap
Wed Jul 29 09:23:26 2015 TAP-Windows Driver Version 9.21
Wed Jul 29 09:23:26 2015 Notified TAP-Windows driver to set a DHCP IP/netmask of
 10.8.0.18/255.255.255.252 on interface {125CBAA8-B6E0-400C-A292-C8FEDA657477} [
DHCP-serv: 10.8.0.17, lease-time: 31536000]
Wed Jul 29 09:23:26 2015 Successful ARP Flush on interface [16] {125CBAA8-B6E0-4
00C-A292-C8FEDA657477}
Wed Jul 29 09:23:31 2015 TEST ROUTES: 2/2 succeeded len=1 ret=1 a=0 u/d=up
Wed Jul 29 09:23:31 2015 C:\Windows\system32\route.exe ADD 109.234.38.113 MASK 2
55.255.255.255 192.168.0.13
Wed Jul 29 09:23:31 2015 ROUTE: CreateIpForwardEntry succeeded with dwForwardMet
ric1=20 and dwForwardType=4
Wed Jul 29 09:23:31 2015 Route addition via IPAPI succeeded [adaptive]
Wed Jul 29 09:23:31 2015 C:\Windows\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.
0 10.8.0.17
Wed Jul 29 09:23:31 2015 ROUTE: CreateIpForwardEntry succeeded with dwForwardMet
ric1=20 and dwForwardType=4
Wed Jul 29 09:23:31 2015 Route addition via IPAPI succeeded [adaptive]
Wed Jul 29 09:23:31 2015 C:\Windows\system32\route.exe ADD 128.0.0.0 MASK 128.0.
0.0 10.8.0.17
Wed Jul 29 09:23:31 2015 ROUTE: CreateIpForwardEntry succeeded with dwForwardMet
ric1=20 and dwForwardType=4
Wed Jul 29 09:23:31 2015 Route addition via IPAPI succeeded [adaptive]
Wed Jul 29 09:23:31 2015 C:\Windows\system32\route.exe ADD 10.8.0.0 MASK 255.255
.255.0 10.8.0.17
Wed Jul 29 09:23:31 2015 ROUTE: CreateIpForwardEntry succeeded with dwForwardMet
ric1=20 and dwForwardType=4
Wed Jul 29 09:23:31 2015 Route addition via IPAPI succeeded [adaptive]
Wed Jul 29 09:23:31 2015 Initialization Sequence Completed

Какие есть соображения?

На основании каких данных был сделан вывод, что проблема с MTU может проявлятся через некоторое время работы? Если я правильно понял, в вашем случае некий сайт сначала нормально открывается, а потом перестаёт. Я бы посмотрел tcpdump'ом, что винда действительно пытается открыть этот сайт, что SYN пакет «туда» уходит и ответ обратно до сервера доходит и идёт в тунель.

mky ★★★★★ ()
Ответ на: комментарий от mky

На основании каких данных был сделан вывод

Гуглеж по проблеме выдает результаты с MTU.

По сайтам: открывается гугл, возможно что-то еще. остальные страницы не грузятся. При этом нефрагментированные большие ICMP пакеты до всех сайтов ходят в обоих направлениях. (ping -F -l 1500 domain.com).

Я бы посмотрел tcpdump'ом

Смотреть на стороне сервера?

stiflerwen ()
Ответ на: комментарий от mky

В общем вот, устанавливаем VPN-сессию, на сервере запускаю

tcpdump -i tun0 host 178.248.233.6
В качестве примера взят IP ЛОРа, так как он входит в 99% тех сайтов которые не открываются.

Для начала пингуем ЛОР с клиента, ответы есть:

Обмен пакетами с linux.org.ru [178.248.233.6] с 32 байтами данных:
Ответ от 178.248.233.6: число байт=32 время=221мс TTL=58
Ответ от 178.248.233.6: число байт=32 время=288мс TTL=58
Ответ от 178.248.233.6: число байт=32 время=268мс TTL=58
Ответ от 178.248.233.6: число байт=32 время=261мс TTL=58

Статистика Ping для 178.248.233.6:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 221мсек, Максимальное = 288 мсек, Среднее = 259 мсек
Вот что в этот момент происходит на сервере:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
09:23:56.427587 IP 10.8.0.18 > 178.248.233.6: ICMP echo request, id 1, seq 118, length 40
09:23:56.472544 IP 178.248.233.6 > 10.8.0.18: ICMP echo reply, id 1, seq 118, length 40
09:23:57.502963 IP 10.8.0.18 > 178.248.233.6: ICMP echo request, id 1, seq 119, length 40
09:23:57.547956 IP 178.248.233.6 > 10.8.0.18: ICMP echo reply, id 1, seq 119, length 40
09:23:58.484610 IP 10.8.0.18 > 178.248.233.6: ICMP echo request, id 1, seq 120, length 40
09:23:58.529622 IP 178.248.233.6 > 10.8.0.18: ICMP echo reply, id 1, seq 120, length 40
09:23:59.462749 IP 10.8.0.18 > 178.248.233.6: ICMP echo request, id 1, seq 121, length 40
09:23:59.507700 IP 178.248.233.6 > 10.8.0.18: ICMP echo reply, id 1, seq 121, length 40
То есть все норм. Теперь пробую открыть в браузере страницу ЛОРа, вот выхлоп tcpdump'a:
09:32:21.286107 IP 10.8.0.18.52663 > 178.248.233.6.https: Flags [S], seq 1442431741, win 8192, options [mss 1368,nop,wscale 2,nop,nop,sackOK], length 0
09:32:21.331553 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [S.], seq 801400758, ack 1442431742, win 5792, options [mss 1368], length 0
09:32:21.483693 IP 10.8.0.18.52663 > 178.248.233.6.https: Flags [.], ack 1, win 64296, length 0
09:32:21.524128 IP 10.8.0.18.52663 > 178.248.233.6.https: Flags [P.], seq 1:182, ack 1, win 64296, length 181
09:32:21.569109 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [.], ack 182, win 28408, length 0
09:32:21.580997 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [.], seq 1:1369, ack 182, win 28408, length 1368
09:32:21.581017 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [.], seq 1369:2737, ack 182, win 28408, length 1368
09:32:21.581020 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [P.], seq 2737:3176, ack 182, win 28408, length 439
09:32:21.731604 IP 10.8.0.18.52663 > 178.248.233.6.https: Flags [.], ack 1, win 64296, length 0
09:32:24.585520 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [.], seq 1:1369, ack 182, win 28408, length 1368
09:32:26.528929 IP 178.248.233.6.https > 10.8.0.18.52663: Flags [F.], seq 3176, ack 182, win 28408, length 0
09:32:26.677386 IP 10.8.0.18.52663 > 178.248.233.6.https: Flags [.], ack 1, win 64296, length 0
Страница, соответственно, не открывается, браузер ничего не сообщает, продолжая грузить, грузить, грузить.

Прошу помощи в расшифровке сего выхлопа, что не так?

stiflerwen ()
Ответ на: комментарий от stiflerwen

Что не так, не понятно, но похоже, что до клинета просто не доходят большие пакеты. По идее от него не должен работь ping большими пакетами (″ping -l 1000″ или 1300, 1450).

Так у openvpn есть опция link-mtu, но для начала можно попробовать на сервере в iptables в mangle FORWARD добавить правило, ставящее именно для этого клиента низкий MSS, как-то так:

iptables -t mangle -I FORWARD -s 10.8.0.18 -j TCPMSS --set-mss 800

mky ★★★★★ ()
Ответ на: комментарий от mky

Может быть странно, но большие пакеты продолжают ходить (вплоть до -f -l 1472), тогда как сайты открываться перестают. Что-то я совсем потерялся с этими глюками.

stiflerwen ()
Ответ на: комментарий от stiflerwen

Укажи метрику в интерфейсе openvpn 1, а в остальных побольше

loskiq ()

Варианты:
tun-mtu
mssfix
mtu-test (после старта подождать нцать минут, но он сам об этом в логах предупреждает)

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.