Stunnel - SSL_connect: Peer suddenly disconnected

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Stunnel - SSL_connect: Peer suddenly disconnected

Непрочитанное сообщение Dmitriy_K » 2010-05-27 8:46:10

Столкнулся с непонятным траблом.
Делаю туннель для MySQL, между двумя серверами с разными версиями FreeBSD, OpenSSL и Stunnel:
stunnel 4.27 on amd64-portbld-freebsd7.2 with OpenSSL 0.9.8e 23 Feb 2007
stunnel 4.33 on i386-portbld-freebsd6.4 with OpenSSL 0.9.8l 5 Nov 2009
Плюс тот, который freebsd6.4, находится за роутером (freebsd7.2 видит его по IP роутера).
Использовал ранее отработанную схему разруливания IP и портов для коннекта между базами, но нарвался на ошибки коннекта клиента Stunnel с сервером. Первая ошибка была типа "SSL_connect: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number". После перехода с обеих сторон на SSL2 она пропала, но в логах клиента получаю:

Код: Выделить всё

2010.05.27 08:48:15 LOG5[59880:134680576]: Service stunnel connected remote server from  x.x.x.x:60255
2010.05.27 08:48:15 LOG7[59880:134680576]: Remote FD=7 initialized
2010.05.27 08:48:15 LOG7[59880:134680576]: Option TCP_NODELAY set on remote socket
2010.05.27 08:48:15 LOG7[59880:134680576]: SSL state (connect): before/connect initialization
2010.05.27 08:48:15 LOG7[59880:134680576]: SSL state (connect): SSLv2 write client hello A
2010.05.27 08:48:15 LOG3[59880:134680576]: SSL_connect: Peer suddenly disconnected
2010.05.27 08:48:15 LOG5[59880:134680576]: Connection reset: 0 bytes sent to SSL, 0 bytes sent to socket
2010.05.27 08:48:15 LOG7[59880:134680576]: Service stunnel finished (0 left)
где x.x.x.x:60255 соответствует freebsd6.4 за роутером.
В то время, как в норме как должно быть:

Код: Выделить всё

2010.01.27 11:00:53 LOG5[88365:34377572528]: stunnel connected remote server from  y.y.y.y:19443
2010.01.27 11:00:53 LOG7[88365:34377572528]: Remote FD=5 initialized
2010.01.27 11:00:53 LOG7[88365:34377572528]: TCP_NODELAY option set on remote socket
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): before/connect initialization
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 write client hello A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 read server hello A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 read server certificate A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 read server done A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 write client key exchange A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 write change cipher spec A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 write finished A
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 flush data
2010.01.27 11:00:53 LOG7[88365:34377572528]: SSL state (connect): SSLv3 read finished A
2010.01.27 11:00:53 LOG7[88365:34377572528]:    1 items in the session cache
2010.01.27 11:00:53 LOG7[88365:34377572528]:    1 client connects (SSL_connect())
То есть, клиенту не приходит отклик удалённого сервера Stunnel, который обеспечил бы "SSLv2 read server hello A".
Причём, не формируется никаких логов сервера Stunnel об ошибке, SSL-коннект отрубается молча. :st:
Может кто подскажет полезную идею?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: Stunnel - SSL_connect: Peer suddenly disconnected

Непрочитанное сообщение Dmitriy_K » 2010-05-28 8:27:35

Похоже, коннект рвёт удалённая MySQL (на amd64-freebsd7.2), поскольку получаю такое:

Код: Выделить всё

#mysql -u replication -h 127.0.0.1 -P 33306 -p
Enter password:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 54
Не проходит попытка ввода пароля.
Нашёл в инете описание своего (или очень похожего) трабла:
http://bugs.mysql.com/bug.php?id=28359
У меня тоже:

Код: Выделить всё

mysql> show variables like 'version%';
+-------------------------+-----------------------------------+
| Variable_name           | Value                             |
+-------------------------+-----------------------------------+
| version                 | 5.1.36-log                        |
| version_comment         | FreeBSD port: mysql-server-5.1.36 |
| version_compile_machine | amd64                             |
| version_compile_os      | portbld-freebsd7.2                |
+-------------------------+-----------------------------------+

mysql> show variables like 'version%';
+-------------------------+-----------------------------------+
| Variable_name           | Value                             |
+-------------------------+-----------------------------------+
| version                 | 5.1.34-log                        |
| version_comment         | FreeBSD port: mysql-server-5.1.34 |
| version_compile_machine | i386                              |
| version_compile_os      | portbld-freebsd6.4                |
+-------------------------+-----------------------------------+
Рекомендации по увеличению параметра connect_timeout ничего мне дали.

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: Stunnel - SSL_connect: Peer suddenly disconnected

Непрочитанное сообщение Dmitriy_K » 2010-06-04 12:09:04

Так и не смог ничего сделать с Stunnel. Наверное, наиболее вероятной причиной проблемы было нахождение слейва репликации за внешним маршрутизатором. Что-то не ладилось при этом в попытках согласования между двумя Stunnel (даже из протоколов проходил только SSL2, наверное, из-за его специфики хэндшейка).
Плюнул на всё и сделал просто SSH-туннель, как советовали для таких случаев здесь:
http://forums.mysql.com/read.php?52,152 ... msg-241105
http://themetricsystem.rjmetrics.com/20 ... orwarding/
Сначала на сервере мастера MySQL делается вспомогательный аккаунт и производится обмен ключами, потом тестируется туннель (настраивается, чтобы слейв искал мастера на локальном порту 127.0.0.1:33306):

Код: Выделить всё

ssh -f -L 33306:127.0.0.1:3306 -p 22 replication@y.y.y.y sleep 60
mysql -h 127.0.0.1 -P 33306 -u replication -p
Потом штатно запускается туннель (здесь показано с сервера слейва):

Код: Выделить всё

ssh -N -f -L 33306:127.0.0.1:3306 -p 22 replication@y.y.y.y
и запускается репликация на слейве.
Кстати, в конфиге базы слейва MySQL надо всегда прописывать:

Код: Выделить всё

skip-slave-start