Соединение OpenVPN, когда хотя бы одно соединение между клиентом и сервером не имеет статического IP-адреса, представляет собой следующую проблему: если любой из них меняет адрес во время соединения, оно будет сброшено.
Однако существует стандартный способ (см. Эту официальную вики-страницу OpenVPN) автоматически запрашивать у клиента и / или сервера принудительное повторное соединение при каждом разрыве соединения. Он состоит из следующих строк в файлах конфигурации клиента и сервера:
ping 15
ping-restart 300 # 5 minutes
resolv-retry 300 # 5 minutes
persist-tun
persist-key
Однако обратите внимание, что эти строки сохраняют ссылку OpenVPN независимо от причины временного сброса (не говоря уже об изменении общедоступного IP-адреса), поэтому я обычно сохраняю их в файлах конфигурации клиента и сервера, чтобы обеспечить автоматическое переподключение.
Согласно Руководству:
- n
Удаленный эхо-запрос по каналу управления TCP/UDP, если в течение как минимум n секунд не было отправлено ни одного пакета (укажите --ing на обоих узлах, чтобы пинг-пакеты отправлялись в обоих направлениях, поскольку пинг-пакеты OpenVPN не отражаются как пинг-пакеты IP), При использовании в одном из безопасных режимов OpenVPN (где указаны --secret, --tls-server или --tls-client), пакет ping будет криптографически безопасным.
--ing-restart n
Аналогично --ping-exit, но инициирует перезапуск SIGUSR1 через n секунд без получения пинга или другого пакета от удаленного.
Эта опция полезна в случаях, когда удаленный узел имеет динамический IP-адрес, а DNS-имя с низким TTL используется для отслеживания IP-адреса с помощью службы, такой как http://dyndns.org/ + динамический клиент DNS, такой как ddclient. ,
Если узел не может быть достигнут, перезапуск будет инициирован, что приведет к повторному разрешению имени узла, используемого с --remote (если также указана опция --resolv-retry).
В режиме сервера --ping-restart, --inactive или любой другой тип внутреннего генерируемого сигнала всегда будет применяться к отдельным объектам экземпляра клиента, а не ко всему самому серверу. Также обратите внимание, что в режиме сервера любой внутренний сигнал, который обычно вызывает перезапуск, будет вызывать удаление объекта экземпляра клиента.
В режиме клиента параметр --ping-restart по умолчанию равен 120 секундам. Это значение по умолчанию будет сохраняться до тех пор, пока клиент не получит значение замены с сервера, основываясь на параметре --keepalive в конфигурации сервера. Чтобы отключить 120 секунд по умолчанию, установите --ping-restart 0 на клиенте.
См. Раздел сигналов ниже для получения дополнительной информации о SIGUSR1.
Обратите внимание, что поведение SIGUSR1 можно изменить с помощью параметров --persist-tun, --persist-key, --persist-local-ip и --persist-remote-ip.
Также обратите внимание, что --ping-exit и --ping-restart являются взаимоисключающими и не могут использоваться вместе.
--resolv-retry n Если не удается разрешить имя хоста для --remote, повторите попытку в течение n секунд, прежде чем потерпеть неудачу.
Установите n в "бесконечное", чтобы повторить бесконечно.
По умолчанию --resolv-retry infinite включен. Вы можете отключить, установив n = 0.
--persist-чан
Не закрывайте и не открывайте устройство TUN/TAP и не запускайте сценарии вверх / вниз по SIGUSR1 или перезапускам --ping-restart.
SIGUSR1 - это сигнал перезапуска, похожий на сигнал SIGHUP, но он обеспечивает более детальное управление параметрами сброса.
--persist ключ
Не перечитывайте ключевые файлы через SIGUSR1 или --ping-restart.
Эта опция может быть объединена с параметром --user nobody, чтобы разрешить перезапуски, инициируемые сигналом SIGUSR1. Обычно, если вы отбрасываете привилегии root в OpenVPN, демон не может быть перезапущен, поскольку теперь он не сможет перечитывать файлы защищенных ключей.
Эта опция решает проблему путем сохранения ключей во время перезагрузки SIGUSR1, поэтому их не нужно перечитывать.