У меня есть сервер Mac OS X (называемый внутренний сервер за брандмауэром, который обеспечить регресс перенаправление портов через ssh -gnN -R *:remoteport:localhost:localport root@remote.server
где remote.server - это домен / IP-адрес общедоступного сервера, который я назову удаленный сервер. Затем я могу подключиться к внутреннему серверу, подключившись кremote.server:remoteport
.
Периодически туннель выходит из строя, и для этого у меня есть сценарий на внутреннем сервере, который пытается повторно подключиться к удаленному серверу, пока это не удастся. Это сработало несколько раз.
Но недавно у меня возникла ошибка, при которой внутренний сервер теряет соединение с удаленным сервером, и никакие мои действия на внутреннем сервере не могут восстановить соединение. Необходимо перезагрузить удаленный сервер, после чего туннель будет немедленно восстановлен сценарием.
Удаленный сервер представляет собой VPS с базовой установкой CentOS 6. За последние несколько месяцев конфигурация не изменилась. Удаленный сервер работал через туннель без ошибок в течение более 4 месяцев, а затем дважды отказал за последние 12 часов, что потребовало двух перезагрузок с интервалом всего в несколько часов.
Что может вызвать такое поведение и с чего начать поиск проблем?
Более чем вероятно, что клиентское соединение было потеряно, но удаленный сервер еще не закрыл соединение. Это приводит к конфликту портов, поскольку старый сеанс по-прежнему будет прослушивать порт, к которому вы пытаетесь подключиться.
Войдите на удаленный сервер, определите устаревший процесс sshd и отправьте ему сигнал HUP (kill -HUP
), чтобы завершить сеанс и связанный с ним слушатель.
Тем не менее, вам действительно не следует полагаться на этот тип «постоянного» туннеля в производственной среде. (особенно если вы используете его, чтобы обойти политику брандмауэра, которая действует по определенной причине)