Как я могу убедиться, что DDCLIENT использует SSL, и если это не так, как мне его форсировать?
Я следовал этому руководству по настройке VPN на моем пи. Часть шагов состоит в том, чтобы установить и настроить динамическую службу DNS. Я создал несколько учетных записей на разных платформах. Нет Ip и dynamicdns - это два имени. Ниже приведен вывод моего файла ddclient.conf, он прекрасно подключается на обоих сайтах динамического DNS.
daemon=60 # check every 60 seconds
syslog=yes # log update msgs to syslog
mail=root # mail all msgs to root
mail-failure=root # mail failed update msgs to root
pid=/var/run/ddclient.pid # record PID in file.
ssl=yes # use ssl-support. Works with
# ssl-library
use=web, web=myip.dnsdynamic.com # get ip from server.
server=www.dnsdynamic.org # default server
login=YOURUSERNAME # default login
password=YOURPASSWORD # default password
server=www.dnsdynamic.org, \
protocol=dyndns2 \
MYDOMAIN.dnsdynamic.COM
Моя проблема заключается в том, что в этой статье они показывают, как проверить, подключен ли ваш пи по SSL. Когда я бегу
sudo ddclient -verbose -debug -noquiet -query
это показывает соединение по HTTP против HTTPS или SSL для каждого сайта. Я проверил, что ssl был установлен, запустив
sudo apt-get install ssh libio-socket-ssl-perl
Любые идеи о том, если он подключается через SSL или как я могу заставить его? Я пробежал эту статью тоже. Я видел, что ddclient заявил, что будет использовать SSL, если он доступен, мне интересно, является ли это ограничением для использования бесплатного сайта dynamicdns или я что-то пропускаю. Из-за статей это выглядело так, как будто сайты, которые я использую, вроде ip и dnsdynamic не поддерживают SSL.
1 ответ
Я нашел ответ и чувствую себя очень глупо, не понимая его раньше.
daemon=60 # check every 60 seconds
syslog=yes # log update msgs to syslog
mail=root # mail all msgs to root
mail-failure=root # mail failed update msgs to root
pid=/var/run/ddclient.pid # record PID in file.
ssl=yes # use ssl-support. Works with
# ssl-library
use=web, web=https://myip.dnsdynamic.org # get ip from server.
server=www.dnsdynamic.org # default server
login=USERNAME # default login
password=PASSWORD # default password
server=www.dnsdynamic.org, \
protocol=dyndns2 \
YOUR DOMAIN GOES HERE
Выше будет принудительно SSL и будет подключаться через SSL. Есть два изменения, которые я сделал.
Линия use=web, web=myip.dnsdynamic.com
должно быть use=web, web=https://myip.dnsdynamic.org
, Изменение от .com
в .org
останавливает сбои соединения. Добавление https://
до строки подключения позволяет подключаться через SSL.
Выход из use=web, web=myip.dnsdynamic.org
показывает:
use=web, web=loopia address is IPADDRESSISHERE
CONNECT: myip.dnsdynamic.org
CONNECTED: using HTTP
SENDING: GET / HTTP/1.0
SENDING: Host: myip.dnsdynamic.org
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
Выход из use=web, web=https://myip.dnsdynamic.org
показывает:
use=web, web=loopia address is IPADDRESSISHERE
CONNECT: myip.dnsdynamic.org
The verification of cert '/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA/CN=www.dnsdynamic.org'
failed against the host 'myip.dnsdynamic.org' with the default verification scheme.
THIS MIGHT BE A MAN-IN-THE-MIDDLE ATTACK !!!!
To stop this warning you might need to set SSL_verifycn_name to
the name of the host you expect in the certificate.
CONNECTED: using SSL
SENDING: GET / HTTP/1.0
SENDING: Host: myip.dnsdynamic.org
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
Я до сих пор не уверен, зачем принуждать ssl=yes
не заставляет его использовать HTTPS автоматически, но теперь он подключается через SSL, и команда, видимая @George, помогает мне убедиться, что это: sudo ddclient -verbose -debug -noquiet -query
Это только часть "получить IP". Фактическое обновление динамического DNS-сервера не отображается в ваших выходных данных. Это все еще может быть сделано через HTTP.
root@ad26e03e9704:/bin# ddclient -daemon=0 -noquiet -debug -file /config/ddclient.conf
DEBUG: get_ip: using cmd, /config/get_ip.sh reports 10.0.0.1
DEBUG:
DEBUG: nic_dyndns2_update -------------------
DEBUG: proxy =
DEBUG: url = http://dyndns.strato.com/nic/update?system=dyndns&hostname=bla.mydomain.com&myip=10.0.0.1
DEBUG: server = dyndns.strato.com
SUCCESS: updating bla.mydomain.com: good: IP address set to 10.0.0.1
Если я поставлю https перед сервером, я получу:
DEBUG: url = http://https://dyndns.strato.com/nic/update?system=dyndns&hostname=bla.mydomain.com&myip=10.0.0.1
Так как меня тоже смутило то, что URL в строке вывода
DEBUG: url = http://(...)
начинается с HTTP вместо HTTPS, хотя у меня есть ssl=yes
в моем конфиге я решил заглянуть в исходный код, чтобы увидеть, что происходит. Оказывается, в функции geturl
где инициируется подключение к серверу, http://
часть в любом случае удаляется из URL, так что это не указывает на фактический тип соединения. Если вы хотите убедиться, что ddclient использует SSL, просто вызовите ddclient из терминала как
sudo ddclient -verbose -force
и искать линии
CONNECTED: using HTTP
или
CONNECTED: using SSL
В последнем случае ddclient действительно использует SSL, и вы готовы к работе. Обратите внимание, что ssl=yes
настройка не применяется к начальному поиску IP-адреса, который ddclient использует для проверки того, изменился ли ваш публичный IP-адрес (тот, который настроен use=...
), так что для этого начального соединения вы все еще видите CONNECTED: using HTTP
как упомянуто @Shaulinator, если вы явно не установите адрес HTTPS. Однако это не должно быть проблемой безопасности, поскольку IP-адрес, возвращаемый этим запросом, вероятно, используется только для того, чтобы избежать ненужных усилий на стороне сервера; он не отправляется на сервер в реальном запросе на обновление, поскольку сервер тривиально знает ваш IP-адрес, когда ddclient инициирует соединение SSL. Я только проверил это явно для протокола freedns, но я был бы удивлен, если бы он был другим для других протоколов.