
Новая версия
Итак, я составлю список того, что у меня есть, чтобы было понятнее.
- ПК на базе Windows 10 с запущенным медиасервером Plex и Kitty
- VPS от OVH, работающий на Debian 9 stretch
что я хочу :
- хочу получить доступ к своему серверу из любой точки локальной сети
как :
- используя vps как туннель к моему серверу Plex
Проблема :
- динамический IP Double Nat со стороны интернет-провайдера 4G/LTE роутер с подпиской
- переадресация портов невозможна
проблема :
- при ежедневной смене IP на ПК (Windows 10) соединение с VPS через Kitty обрывалось
ручное решение проблемы:
- найдите PID процесса, который держит порт открытым, и завершите его
Что мне нужно :
- сделать это автоматически или найти другое решение проблемы
Картинки, которые помогут вам понять
Ручной способ решения проблемы
Вопросы и ответы
Pimp Juice IT: спасибо ^^ в любом случае, инструмент no-ip тоже показался мне вполне подходящим. Но поскольку у провайдера двойной NAT, и по сути мне пришлось бы запустить один софт No-ip на их втором "маршрутизаторе" за моим. Что невозможно, согласитесь ^^. На самом деле, моя проблема действительно проста, но раздражает, потому что кажется, что выход из нее прост. Но не могу найти правильный путь :/
ps: да, не волнуйтесь, старая версия - это большой черновик того, что я хотел, чтобы было ^^ в новой версии есть все, что вам нужно, чтобы помочь мне, я полагаю :/ ^^
Old version
У меня есть VPS от OVH, который я использую для туннелирования моего медиасервера на PLEX с моего ПК на VPS. Все хорошо и работает, кроме…
Мой IP-адрес динамический и двойной NAT-адрес. Мой внешний IP-адрес часто меняется и обновляется, по крайней мере, раз в день. Поэтому мое соединение с VPS через Kitty (ответвление PuTTY) прерывается. Я решил эту проблему с помощью автоматического переподключения после прерывания соединения. В любом случае, когда это сделано, туннелирование порта, которое я указал в KiTTY, не срабатывает, потому что предыдущее соединение не было должным образом закрыто.
Для серверной части это Debian 9 Stretch.
Я нашел решение, которое заключается в том, что я нахожу PID самого соединения и убиваю его.вручную. Вот моя проблема, я хотел бы автоматизировать ее с помощью скрипта. Здесь я взываю к вашей помощи, надеясь, что кто-нибудь может протянуть руку.
P.S. Мои навыки в написании сценариев настолько низки, насколько это может показаться, поэтому постарайтесь излагать мысли максимально ясно, спасибо.
Ответы на некоторые комментарии
Скотт– когда мой IP-адрес меняется, соединение обрывается. Сразу же после этого оно снова подключается благодаря KiTTY. Я просто ввожу в командной строке
netstat -lnp
, и он показывает мне все активные соединения. Я нахожу то, которое связано с указанным портом (в данном случае32400
) и PID, который связан, а затем уничтожаю егоPID
сkill
. В прошлый раз PID был,12007
например.Камиль Мациоровски– Я попробовал это (имея в видуэтот ответ на другой вопрос):
навсегда, отредактировав
/etc/sysctl.conf
файл, добавьте:net.ipv4.tcp_keepalive_time=300
и
Если только вы можете перенастроить
sshd
на сервере, это, по-моему, самый элегантный способ. Пустьsshd_config
содержат строки типа:ClientAliveCountMax 3 ClientAliveInterval 15
но ни один из них не работает у меня, когда я имитирую сбой соединения, оно восстанавливает соединение, а порт все равно остается занятым.
Также решение под
Вернуться к клиенту
похоже, что это сработает для меня только в том случае, если я смогу приспособить это к своей ситуации.
"но ни один из них не работает для меня, когда я имитирую сбой моего соединения, оно переподключается, а порт все еще занят" – Вы перезапускали sshd? Вы пытались переподключиться сразу? С этими настройками вам нужно подождать до одной минуты, пока порт не освободится. – Камил Мациоровски
да, я перезапустил SSHD с помощью следующей команды:
/etc/init.d/ssh перезапустить
и чтобы быть в безопасности, потому что я не знаю, что перезапустить sshd
перезапуск службы sshd
повторное подключение происходит автоматически и мгновенно. Теперь я ищу способ отсрочить этот процесс. Если вы знаете как, просто скажите мне спасибо, чтобы вы знали:
net.ipv4.tcp_keepalive_time=300
Я установил 10 секунд вместо 300, это все еще нормально?
Также я не совсем понял ваш второй комментарий о загрузке двух сеансов одновременно. Исправьте это с помощью второго. Моя цель — просто перезапустить сам процесс сеанса, который автоматизирован. Сейчас нужно освободить порт, чтобы я мог снова открыть его с новой связью.
Пояснение: в моем комментарии выше есть общий способ предотвратить блокировку себя от сервера. Если вы достаточно серьезно сломали sshd_config, вы не сможете снова подключиться по ssh. Вот почему вы всегда должны проверять его с новым подключением, пока старое все еще позволяет вам откатывать изменения, несмотря ни на что. Обратите внимание, что в целом возможно иметь синтаксически правильный sshd_config и все равно не иметь возможности подключиться; поэтому перезапуск sshd без ошибок не обязательно означает, что он сработает. – Камил Мациоровски
Итак, в конце концов, какие у меня есть решения для автоматизации этого процесса и освобождения порта через более короткий промежуток времени, и как отсрочить повторное подключение в kitty с помощью скрипта или чего-то еще? Еще раз спасибо за уделенное время, я ценю это.
"переподключение происходит автоматически и мгновенно. Теперь я ищу способ отсрочить этот процесс" – вы имеете в виду, что KiTTY пытается переподключиться без какой-либо задержки, верно? В Linux на стороне клиента ваша проблема может быть легко решена с помощью autossh или цикла ssh -o ExitOnForwardFailure=yes … (см. этот ответ). Я думаю, что ssh под Cygwin должен поддерживать эту опцию. Если вы настаиваете на скрипте на стороне сервера, я думаю, это можно сделать; но скрипт не должен убивать туннель, если это не старый туннель. У меня сейчас нет времени, чтобы предоставить такое громоздкое решение; может быть, через 12 часов. – Камил Мациоровски
Хорошо, спасибо, увидимся через 12 часов, а пока я попробую все остальные решения. Я дам вам знать, как все пройдет, спасибо еще раз, чувак.