我可能不是第一个这样做的人,但我需要使用 NO-IP 的动态 DNS 服务,这样我就可以在我离开时轻松配置设备和计算机来访问 LAN 上的资源。对于不太熟悉 NO-IP 的人来说,它是一项免费的动态 DNS 服务。大多数家庭和小型办公室的 Internet 连接都具有动态 IP,这意味着每次建立来自路由器的连接时,IP 地址都会发生最大的变化。通常,域名需要静态 IP 地址才能工作。动态 DNS 允许域名(即 subdomain.example.com)在 IP 地址更改时通过用新的 IP 地址更新 NO-IP 来使用动态 IP。然后,NO-IP 将该 IP 与域名相关联,以便可以针对该域而不是更改的 IP 设置服务。这使得配置变得更加容易。
许多路由器都有内置的 NO-IP 客户端,但我的路由器不支持 NO-IP,并且出于某种原因,我永远无法让 NO-IP 推荐用于 Linux 主机的客户端工作。我下载了源代码并按照说明进行编译,它似乎正在运行,但它从未更新我的 IP 地址。控制台或日志文件没有输出来诊断我能找到的问题,所以我决定自己编写,使用 bash 脚本和一些简单的实用程序来做到这一点并不难在我的 Linux 机器上。这是我的设置指南和文档。我正在运行 Ubuntu 服务器,所以我使用 apt 和 nano,但这应该适用于任何基于 POSIX 的设备,例如 Mac OS X、BSD、任何风格的 Linux——甚至是 Raspberry Pi。
该脚本可以作为带有命令行参数的单个实例运行、作为守护进程、使用 crontabs(用于按计划运行程序的实用程序)或作为 Linux 服务运行。
该脚本有一个依赖项,即 wget。大多数 Linux 和 BSD 发行版上通常都会默认安装它,但如果没有,请使用包管理器来安装它。
sudo apt-get install wget
-或者-
sudo yum install wget
no-ip.sh -u=username -p=password -h=host.sample.com -d=true -l=/path/to/logfile.log
参数:
-u, --username
登录 no-ip.com 的用户名。
-p, --password
登录 no-ip.com 的密码。
-h, --hostname
要更新的域名。
-d, --detectip
让脚本检测您的外部 IP 地址。这优先于 -i。
-i, --ip
手动设置要更新的 IP 地址。如果 -d 或 -i 均未指定,则 no-ip 将使用它检测到的 IP 地址。
-n, --interval
当将脚本作为守护进程/服务运行时(请参阅安装),这将每 n 分钟更新一次 no-ip。
-l, --logfile
设置日志文件的路径。该文件必须是可写的。
-c, --config
设置配置文件的路径。该文件必须可读。配置文件参数优先于命令行参数。
no-ip.sh
使用默认位置 /etc/no-ip/no-ip.conf 中的配置文件中的设置运行脚本
no-ip.sh -u=username -p=password -h=host.sample.com -d=true -l=/path/to/logfile.log
进行一次性更新,检测 UP 并记录结果
no-ip.sh -c=/home/username/no-ip.conf
使用配置文件中的设置运行脚本。
no-ip.sh /dev/null 2>&1 &
使用默认位置 /etc/no-ip/no-ip.conf 中的配置文件中的设置将脚本作为守护程序运行。
配置文件使用简单的语法来定义参数。任何命令行参数(除了--config)也可以在配置文件中指定。与命令行参数相同的规则适用于配置文件参数(即,如果两者都指定,“Detectip”将覆盖“ip”)。
例子:
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
interval=10
detectip=true
在安装脚本之前,将文件下载并解压到本地计算机。这些说明假定您位于 no-ip-master 文件夹中。
cd ~
wget https://github.com/theonemule/no-ip/archive/master.zip
unzip master.zip
cd no-ip-master
方法一:定时任务
Crontabs 允许您指定运行脚本的计划,并且它还会以配置 crontab 的用户身份运行脚本。确保用户具有脚本的执行权限、配置文件的读取权限以及日志文件的写入权限。 Crontabs 将按计划运行脚本,因此无需指定时间间隔。
以下是如何以 root 身份运行脚本。
1.) 在etc中创建一个文件夹。
sudo mkdir /etc/no-ip
2.) 创建一个配置文件。
sudo touch /etc/no-ip/no-ip.conf
3.) 使用您喜欢的编辑器设置参数。我用纳米。有关详细信息,请参阅上面的配置文件部分。
sudo nano /etc/no-ip/no-ip.conf
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
detectip=true
4.) 将 no-ip.sh 复制到 /usr/sbin
sudo cp no-ip.sh /usr/sbin/no-ip.sh
5.) 使脚本可执行
sudo chmod +x /usr/sbin/no-ip.sh
6.) 以 root 身份登录
sudo -i
7.) 编辑 root 的 crontab
crontab -e
8.) 将条目添加到底部。 */10 告诉 crontab 每次当前时间能被 10 整除时运行脚本,或者每 10 分钟运行一次并保存 crontab。
*/10 * * * * /usr/sbin/no-ip.sh
方法 2:Linux 服务(为基于 Debian 的发行版编写。这将因其他发行版而异)
确保 root 具有脚本的执行权限、配置文件的读取权限以及日志文件的写入权限。
1.) 在/etc 中创建一个文件夹。
sudo mkdir /etc/no-ip
2.) 创建一个配置文件。
sudo touch /etc/no-ip/no-ip.conf
3.) 使用您喜欢的编辑器设置参数。我用纳米。有关详细信息,请参阅上面的配置文件部分。
sudo nano /etc/no-ip/no-ip.conf
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
interval=10
detectip=true
4.) 将 no-ip.sh 复制到 /usr/sbin
sudo cp no-ip.sh /usr/sbin/no-ip.sh
5.) 使脚本可执行
sudo chmod +x /usr/sbin/no-ip.sh
6.) 将 no-ip-service 复制到 init.d
sudo cp no-ip-service /etc/init.d/no-ip-service
7.) 使 no-ip-service 可执行
sudo chmod +x /etc/init.d/no-ip-service
8.) 启动服务
sudo service no-ip-service start
9.) 添加启动时启动的服务。
update-rc.d no-ip-service defaults