Я использую OpenVPN для подключения двух частных сетей, и теперь у меня возникла проблема, которую я не могу решить. Серверы подключаются простой конфигурацией UDP со статическим ключом. Я уже проверил iptables на ограничения или что-то в этом роде, и там ничего нет, также оба сервера находятся прямо на общедоступном IP-адресе - нет маршрутизаторов / NAT или чего-то еще. Сервер A слушает, а сервер B - клиент. Когда запускается VPN, клиенты подключаются друг к другу, и все работает отлично, но ТОЛЬКО в течение первой минуты. Потом перестает работать. Туннельное соединение (пинг от одной конечной точки к другой) от сервера A к серверу B все еще работает (может пинговать), но с другой стороны оно не работает. Через одну минуту сторожевой таймер обнаруживает, что соединение на сервере B разорвано, и перезапускает туннель. Затем он работает в течение одной минуты, и это повторяется вечно ...
Оба сервера - 64-битные Ubuntu:
Сервер A:
root@server:/etc/openvpn# uname -an Linux server 2.6.38-13-virtual #52~lucid1-Ubuntu SMP Thu Nov 10 19:46:44 UTC 2011 x86_64 GNU/Linux root@server:/etc/openvpn# openvpn --version OpenVPN 2.1.0 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Jul 20 2010 Originally developed by James Yonan Copyright (C) 2002-2009 OpenVPN Technologies, Inc.
Сервер B:
root@gw2:~# uname -an Linux gw2 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux root@gw2:~# openvpn --version OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Feb 27 2013 Originally developed by James Yonan Copyright (C) 2002-2010 OpenVPN Technologies, Inc. $ ./configure --build=x86_64-linux-gnu --prefix=/usr --includedir=${prefix}/include --mandir=${prefix}/share/man --infodir=${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=${prefix}/lib/openvpn --disable-maintainer-mode --disable-dependency-tracking CFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security CPPFLAGS=-D_FORTIFY_SOURCE=2 CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security FFLAGS=-g -O2 LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now --enable-password-save --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr --mandir=${prefix}/share/man --with-ifconfig-path=/sbin/ifconfig --with-route-path=/sbin/route Compile time defines: ENABLE_CLIENT_SERVER ENABLE_DEBUG ENABLE_EUREPHIA ENABLE_FRAGMENT ENABLE_HTTP_PROXY ENABLE_MANAGEMENT ENABLE_MULTIHOME ENABLE_PASSWORD_SAVE ENABLE_PORT_SHARE ENABLE_SOCKS USE_CRYPTO USE_LIBDL USE_LZO USE_PF_INET6 USE_PKCS11 USE_SSL
Конфигурация сервера A ovpn:
daemon vpn-conn writepid /var/run/openvpn-vpn.pid dev tun3 proto udp port 1859 comp-lzo keepalive 10 30 persist-tun persist-key ifconfig 10.9.0.1 10.9.0.2 route 10.10.10.0 255.255.255.0 secret my-key.key log-append vpn.log verb 5
Сервер B:
daemon vpn writepid /var/run/openvpn-vpn.pid remote 4.3.2.1 dev tun0 proto udp port 1859 comp-lzo keepalive 10 60 ping-timer-rem persist-tun persist-key ifconfig 10.9.0.2 10.9.0.1 route 192.168.0.0 255.255.252.0 secret my-key.key log-append vpn.log mtu-test verb 5
Я провел небольшое исследование, чтобы добавить / удалить «ping-timer-rem», «mtu-test» и «float» в конфигурации клиента и сервера, но проблема все еще остается.
Сервер A все еще регистрирует странные вещи в журнале (я думаю, что это МОЖЕТ быть источником проблемы, но я не знаю, как ее решить. Время на обоих серверах одинаковое):
Wed Sep 4 10:25:44 2013 us=125832 Authenticate/Decrypt packet error: bad packet ID (may be a replay): [ #100 / time = (1378283056) Wed Sep 4 10:24:16 2013 ] -- see the man page entry for --no-replay and --replay-window for more info or silence this warning with --mute-replay-warnings
Еще одна странность на сервере A заключается в том, что кажется, что сервер B подключается из двух сокетов! Я проверил сервер B, и там только ОДИН экземпляр openvpn и больше нет. Когда я его убиваю, соединение пробников с обоих сокетов заканчивается.
Детали журнала сервера A:
Wed Sep 4 09:56:12 2013 us=544282 Peer Connection Initiated with [AF_INET]1.2.3.4:1859 Wed Sep 4 09:57:06 2013 us=661505 Peer Connection Initiated with [AF_INET]1.2.3.4:1194
Сведения о сервере B:
Wed Sep 4 10:28:16 2013 us=98524 SIGUSR1[soft,ping-restart] received, process restarting Wed Sep 4 10:28:16 2013 us=98562 Restart pause, 2 second(s) Wed Sep 4 10:28:18 2013 us=98688 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts Wed Sep 4 10:28:18 2013 us=98871 Re-using pre-shared static key Wed Sep 4 10:28:18 2013 us=98905 LZO compression initialized Wed Sep 4 10:28:18 2013 us=98981 Socket Buffers: R=[229376->131072] S=[229376->131072] Wed Sep 4 10:28:18 2013 us=99043 Preserving previous TUN/TAP instance: tun0 Wed Sep 4 10:28:18 2013 us=99075 Data Channel MTU parms [ L:1545 D:1450 EF:45 EB:135 ET:0 EL:0 AF:3/1 ] Wed Sep 4 10:28:18 2013 us=99144 Local Options String: 'V4,dev-type tun,link-mtu 1545,tun-mtu 1500,proto UDPv4,ifconfig 10.9.0.1 10.9.0.2,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,secret' Wed Sep 4 10:28:18 2013 us=99167 Expected Remote Options String: 'V4,dev-type tun,link-mtu 1545,tun-mtu 1500,proto UDPv4,ifconfig 10.9.0.2 10.9.0.1,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,secret' Wed Sep 4 10:28:18 2013 us=99215 Local Options hash (VER=V4): '184f07f3' Wed Sep 4 10:28:18 2013 us=99255 Expected Remote Options hash (VER=V4): 'de9a476a' Wed Sep 4 10:28:18 2013 us=99291 UDPv4 link local (bound): [undef] Wed Sep 4 10:28:18 2013 us=99321 UDPv4 link remote: [AF_INET]4.3.2.1:1859 WrWrWRWed Sep 4 10:28:21 2013 us=987011 Peer Connection Initiated with [AF_INET]4.3.2.1:1859 wrWrWed Sep 4 10:28:22 2013 us=847036 Initialization Sequence Completed WrWRwrWRwrWWed Sep 4 10:28:24 2013 us=931728 NOTE: Beginning empirical MTU test -- results should be available in 3 to 4 minutes. WRwrWRRwrWRwrWrWWrWRwrWRWwrWRRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRwrWRWwrWRwrWRwWrWRRwrWRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRWwrWRwrWRwrWRwrWRWwrWRRwrWRwrWRwrWRWwrWRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRwrWrWWrWRRwrWR wrWWRwrWRwrWRwrWrWrWRWwrWRWrWrWWrWWrWWWWWWWWWWWWWWWrWrWWWrWrWWed Sep 4 10:30:19 2013 us=505037 Inactivity timeout (--ping-restart), restarting Wed Sep 4 10:30:19 2013 us=505153 TCP/UDP: Closing socket
На сервере B в журнале НЕТ строки «1194», но когда я пытаюсь передать пакеты tcpdump между серверами (1.2.3.4 = клиент, 4.3.2.1 = сервер):
root@gw2:/etc/openvpn# tcpdump -ni eth0 host 4.3.2.1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 10:34:43.534596 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP, length 100 10:34:43.535359 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP, length 100 10:34:44.468608 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP, length 100 10:34:44.481441 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP, length 100 10:34:45.476109 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP, length 100 10:34:45.476510 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP, length 60 10:34:45.477085 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP, length 100 HERE -->10:34:45.496917 IP 1.2.3.4.1194 > 4.3.2.1.1859: UDP, length 60 10:34:45.537356 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP, length 540 10:34:46.540260 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP, length 100 10:34:46.540955 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP, length 100 10:34:47.526090 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP, length 100 10:34:47.526793 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP, length 100
Кажется, что клиент иногда хочет переподключиться от udp 1194 (вместо правого 1859), а другое соединение, которое уже находится на 1859, осталось открытым. Таким образом, сервер A отправляет пакеты на соединение 1859 (и может пинговать), но клиент меняет маршрутизацию на 1194, который не инициализирован и не работает (и попытка подключения из сокета 1194 генерирует «ошибку дешифрования» на сервере A ). Как я уже сказал, на этом клиенте (Сервер B) нет другой конфигурации или экземпляра openvpn, кроме той, которую я сбросил выше.
Может ли кто-нибудь сказать мне, что может быть не так в моей конфигурации? Я сошел с ума.
Спасибо.
J +
PS: извините за плохой английский.
Моя установка не совсем такая, как описано, но симптомы те же. В моем случае проблема заключалась в попытке использовать один и тот же сертификат на двух разных компьютерах одновременно. Он переключал соединение между двумя компьютерами. Как только я создал отдельный сертификат, оба компьютера прочно остались в VPN.
Попробуйте удалить keepalive
вариант с одного из серверов. Эта опция расширяется до этого
if mode server:
ping 10
ping-restart 120
push "ping 10"
push "ping-restart 60"
else
ping 10
ping-restart 60
Для вашей конфигурации есть ветка else, поскольку у вас нет сервера в server
Режим. Таким образом, ваши серверы могут играть в пинг-понг, поскольку есть ping-restart
вариант определяется с обеих сторон.
У меня были похожие симптомы. Моя проблема была решена путем изменения моей локальной подсети на 10.0.0.x с 192.168.1.x. Офисный VPN, к которому я подключался, тоже имел последнюю подсеть, и это противоречило.