我有一个连接到路由器的家庭服务器,该路由器设置为使用 DDNS 以及指向无 IP DNS 服务器的集成提供商。断电后,我的域名将无法再访问。检查 IP 地址
dig +short pacolola.net
...我知道地址了188.151.207.219
。根据路由器的公共 IPv4 地址和 No-IP 的用户页面,它应该是188.151.218.129
。使用后面的地址可以显示页面内容,并且服务器的内部IP地址也可以工作。
我尝试使用sudo service networking restart
各种 DNS 缓存重置命令重新启动网络,但没有成功。
如何将主机名解析为 DNS 服务器正在使用的 IP 地址?这是由于 no-ip <=> 路由器或 SLL 或服务器上的其他内容造成的 DNS 问题吗?在这种情况下哪些诊断工具有效?
答案1
您需要确保您的 DDNS 更新程序正在运行。适用于 Linux/Unix 的 No-IP DDNS 更新程序是/usr/local/bin/noip2
.请参阅此处的安装说明。
安装说明网页参考软件包中的README文件,了解如何使更新程序自动启动:
如何启动客户端
noip2 可执行文件可以通过键入 /usr/local/bin/noip2 来运行
如果您希望它在计算机启动时自动运行,请将以下脚本放入您的启动目录中。 (/etc/init.d/rcX.d 或 /sbin/init.d/rcX.d 或 ???)
#######################################################
#! /bin/sh
# . /etc/rc.d/init.d/functions # uncomment/modify for your killproc
case "$1" in
start)
echo "Starting noip2."
/usr/local/bin/noip2
;;
stop)
echo -n "Shutting down noip2."
killproc -TERM /usr/local/bin/noip2
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#######################################################
其中rcX.d中的'X'是通过运行以下命令获得的值
grep initdefault /etc/inittab | grep initdefault /etc/inittab | grep initdefault /etc/inittab awk -F: '{打印 $2}'
Killproc 可以从以下位置下载ftp://ftp.suse.com/pub/projects/init 或者,您可以取消注释 #! /bin/sh
如果您有最新的 RedHat 版本,您可能需要使用其他用户提供的启动脚本。它位于名为 redhat.noip.sh 的软件包中,它可能需要针对您的系统进行一些修改。
Debian 有一个名为 debian.noip2.sh 的启动脚本。它也由另一位用户提供,据传在某些情况下会失败。
另一位用户提供了 MAC OS X 自动启动的步骤。它称为 mac.osx.startup。 Mac 用户可能希望阅读该文件。
然而,事实上,这些 Unix/Linux 指令仅适用于具有经典 SysVinit 启动脚本方案的系统。现代 Linux 系统可以具有各种基于依赖关系的系统来启动服务,这些系统具有这些说明未涵盖的额外要求。
例如,即使 RHEL 6 也要求脚本具有一些特定格式的注释行来标识脚本所依赖的其他服务。在带有 的系统上systemd
,将脚本放入/etc/init.d/rcX.d
可能不起作用,因为systemd
SysVinit 兼容性系统期望脚本位于 中/etc/init.d
,并且还具有那些依赖项标识注释,与 RHEL 6 及更高版本相同。
甚至redhat.noip.sh
包中的示例脚本也已过时:其中的特殊注释对于现代基于依赖项的启动方案来说是不完整的:
#!/bin/sh
#
# chkconfig: 345 99 80
# description: Starts and stops the no-ip.com Dynamic dns client daemon
#
# pidfile: /var/run/noipd.pid
#
它可能适用于 RHEL 5.x 及更早版本,但不适用于 RHEL 7.x 及更新版本。(对于 RHEL 6.x,旧形式可能已经被接受,但新的格式当时已经被推荐了。)他们需要在上面的注释块之后立即添加一个额外的注释块,如下所示:
### BEGIN INIT INFO
# Provides: noip2
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start:
# Default-Stop:
# Short-Description: Starts and stops noip2
# Description: Starts and stops the no-ip.com Dynamic dns client daemon
### END INIT INFO
但对于systemd
基于 Linux 的发行版,完全省略脚本并使用本机 systemd 文件会更简单.service
,例如/etc/systemd/system/noip2.service
:
[Unit]
Description=no-ip.com Dynamic dns client daemon
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
[Install]
WantedBy=multi-user.target
(对于systemd
纯粹主义者来说:似乎没有一个选项可以阻止分叉到后台,因此在撰写本文时,noip2
使用服务似乎是不可能的。)Type=simple
因此,如果您只是按照 No-IP.com 的安装说明进行操作,而没有主动使用,那么更新程序很可能只从您手动启动它的那一刻开始运行,直到您下次重新启动服务器为止。但如果外部 IP 地址没有改变,您可能一无所知……直到现在,当您获得与之前不同的 IP 地址时。