我一直在关注这在我的 pi 上设置 VPN 的指南。部分步骤是设置和配置动态 DNS 服务。我已经在多个平台上创建了多个帐户。No 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
我的问题是这文章中,他们演示了如何验证你的 pi 是否通过 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
答案2
这只是“获取 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
答案3
由于我对输出行中的 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
设置不适用于 ddclient 用来检查您的公共 IP 地址是否已更改(由 配置的 IP 地址use=...
)的初始 IP 查找,因此对于该初始连接,您仍然会看到CONNECTED: using HTTP
@Shaulinator 提到的内容,除非您明确设置 HTTPS 地址。但是,这不应该是一个安全问题,因为此请求返回的 IP 地址可能仅用于避免服务器端不必要的努力;它不会在实际的更新请求中发送到服务器,因为当 ddclient 启动 SSL 连接时,服务器很容易知道您的 IP 地址。我只针对 freedns 协议明确检查了这一点,但如果其他协议的情况有所不同,我会感到惊讶。