Вам необходимо разделить файл конфигурации и экземпляр OpenVPN для каждого подключения. Пакет Debian (, возможно, аналогичный другим дистрибутивам Linux ), запускает экземпляр OpenVPN для каждого файла конфигурации в /etc/OpenVPN. Маршруты для каждого соединения не должны конфликтовать.
Нет, управлять этими настройками со стороны клиента невозможно. Они контролируют, как часто сервер отправляет сообщения проверки активности и сколько нужно ждать, прежде чем отключиться. Это общие настройки сервера -, которые применяются ко всем подключениям. Разрешение клиентам устанавливать их, даже для каждого соединения -, будет иметь последствия для безопасности, поскольку это может позволить злоумышленникам потреблять чрезмерные ресурсы сервера.
Если вы хотите установить эти настройки, вам нужно будет сделать это в файле /etc/sshd/sshd_config
сервера. Обратите внимание, что установка их таким образом, чтобы сброшенные соединения быстро завершались, не должна быть проблемой, поскольку, как правило, эти соединения в конечном итоге все равно будут сброшены.
Если вы можете использовать отдельное соединение только для переадресации порта (с ), т. е., возможно, с -N
, рассмотрите этот обходной путь:
while echo; do sleep 1; done | ssh user@server 'exec bash -c "while read -t 5; do :; done"'
(Включить переадресацию портов (с )самостоятельно ).
Когда новые строки из echo
перестанут поступать на удаленную сторону, read -t 5
в конечном итоге завершится ошибкой, и весь удаленный цикл завершится. Сервер SSH заметит, что его дочерний процесс завершился, он разорвет соединение и освободит порт (s ).
Примечания:
read -t
не является переносимым, команда явно вызывает bash
для его обработки. user@server
является bash
, тогда нет необходимости в exec bash
; подошва"while read -t 5; do :; done"
(вместо'exec bash -c …'
)будет работать. read -t 5
довольно просто. Вы можете разработать код, реализующий концепцииInterval
и CountMax
. Я протестировал этот подход на своем ноутбуке.с фактической переадресацией удаленного порта(-R
)и beep
вместо :
, чтобы слышать от сервера. Когда я отключил Wi -Fi, писк прекратился. Когда я быстро снова подключился к Wi -Fi, звуковой сигнал повторился и продолжился. Но когда я снова подключился на несколько секунд позже, локальная команда вышла, потому что узнала, что SSH-сервер разорвал соединение, как и было задумано. Важные дела:
*AliveInterval
и *AliveCountMax
, и они сохранились. Это означает, что мое специальное соединение закончилось без помощи этих опций. Если бы я ждал достаточно долго с выключенным Wi -Fi, то почти все соединения разрывались бы из-за опций, включая локальную половину специального соединения. Исключением будет удаленная половина; он все равно бы уже давно исчез, потому что bash
уже вышел. remote port forwarding failed for listen port
. Поэтому я думаю, что мой подход может быть правильным решением вашей проблемы.