Новая версия
Итак, я сделаю список вещей, которые у меня есть, чтобы быть более понятным.
- ПК на Windows 10 работает под управлением медиасервера Plex и Kitty
- VPS от OVH работает на Debian 9
что я хочу :
- хочу получить доступ к моему серверу из любой точки локальной сети
как :
- используя VPS в качестве туннеля к моему серверу Plex
Проблема:
- динамический ip Double Nat со стороны isp стороны 4G / LTE роутер с подпиской
- перенаправление портов невозможно
выпуск:
- при смене ip "ежедневно" на ПК (windows 10) соединение с vps через китти зависало
ручное решение вопроса:
- найти 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 самого соединения и уничтожаю его вручную. Есть моя проблема, я хотел бы автоматизировать это с помощью сценария. Здесь я призываю вас помочь, надеясь, что кто-нибудь может помочь.
PS: мои навыки в написании сценариев настолько низки, насколько это может показаться настолько ясным, насколько это возможно, спасибо.
Ответы на некоторые комментарии
Скотт - когда мой IP-адрес изменится, соединение прервется. Прямо тогда это восстановит связь благодаря KiTTY. Я бы в командной строке просто
netstat -lnp
, он показал бы мне все живое соединение. Я нашел бы тот, который связан с указанным портом (в данном случае32400
) и связанным с ним PID, а затем уничтожил самPID
с помощьюkill
. В прошлый раз PID был12007
например.Kamil Maciorowski - я попробовал это (ссылаясь на этот ответ на другой вопрос):
навсегда отредактировав
/etc/sysctl.conf
, добавьте:net.ipv4.tcp_keepalive_time=300
а также
Если только вы можете перенастроить
sshd
на сервере, это, на мой взгляд, самый элегантный способ. Пустьsshd_config
содержит такие строки:ClientAliveCountMax 3 ClientAliveInterval 15
но ни один из них не работает для меня, когда я имитирую сбой моего соединения, он переподключится, и порт все равно будет занят.
Также решение под
Вернуться к клиенту
Казалось бы, работать на меня, только если я смогу сделать его в соответствии с моей ситуацией.
«но ни один из них не работает для меня, когда я имитирую сбой моего соединения, он переподключится, и порт все равно будет занят» - Вы перезапустили sshd? Вы пытались восстановить соединение сразу? С этими настройками вам нужно подождать до одной минуты, пока порт не освободится. - Камиль Мачоровский
да, я перезапустил SSHD с помощью следующей команды:
/etc/init.d/ssh restart
и быть в безопасности, потому что я не знаю, что перезапустить 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 часов, в любом случае, до тех пор, пока я не попробую все другие решения, я дам вам знать, как это происходит, спасибо еще раз, человек.