14.04 - DUC не обновляет правильно IP с VPN при запуске
Я использую сервер Ubuntu 14.04.3 LTS, который при запуске запускает несколько вещей, две из которых - OpenVPN для моей службы VPN и клиент динамического обновления DNS для обновления моего noip-хоста до моего текущего IP-адреса.
Я попытался с официальным noip DUC и с ddclient (см. Здесь, почему я изменил), и оба они неправильно обновляют IP-адрес, который я имею до того, как VPN-соединение (IP-провайдер).
Соединение OpenVPN работает, когда я вхожу через SSH, так что это означает, что DUC сообщает IP-адрес до того, как OpenVPN работает или что-то в этом роде. Прежде чем спросить здесь, я попытался изменить сценарий init.d ddclient с требованием openvpn:
# Required-Start: $local_fs $remote_fs $network $syslog $openvpn
Для файлов rcX.d в openvpn есть что-то вроде S16openvpn, а в ddclient есть S99ddclient, поэтому обычно ddclient запускается после openvpn, верно? Мне не очень комфортно с этими вещами.
Это ничего не изменило. Я надеюсь, что кто-то может мне помочь, это означает, что каждый раз, когда я перезагружаю свой сервер, я должен перезапускать службу клиента DUC, чтобы мой хост noip работал правильно.
План B, если ничего не удается найти, - попросить перезапустить службу ddclient после того, как все запустится, чтобы мне не пришлось это делать, и я не забуду. Но, конечно, было бы лучше сделать обновление ddclient для правильного IP в первую очередь.
PS: Если вы спрашиваете, почему я хочу, чтобы IP-адрес был VPN-IP, то это потому, что некоторые службы, такие как сервер Teamspeak 3, должны быть доступны, поэтому мой ddns.net должен указывать на VPN-IP, потому что, указывая на публичный IP-адрес моего провайдера, они больше недоступны (наверное, связано с тем, как работает VPN).
1 ответ
Итак, я узнал, что OpenVPN предоставляет способ запустить сценарий после создания туннеля. Для этого в моем файле /etc/openvpn/toto.conf я добавил строку
# run /etc/openvpn/titi.sh when the connection is set up
up /etc/openvpn/titi.sh
Обратите внимание, что параметр script-security в файле conf должен быть правильно установлен (по крайней мере, script-security 2, см. Man из openvpn).
Вот содержание моего скрипта titi.sh:
#!/bin/bash
(sleep 60 && ddclient -daemon=0 -debug -verbose -noquiet -force >> launch_dd.log) &
У первого скрипта не было режима сна 60, но, как ни странно, когда он вызывался и запускался ddclient, мой IP-адрес по-прежнему был моим IP-адресом провайдера, а не VPN-IP, даже если он был запущен с параметром OpenVPN up. Возможно, поэтому это не сработало.
Поэтому я просто сказал сценарию подождать 60 секунд перед запуском. Теперь мой IP установлен на VPN IP, когда я перезагружаю сервер.