好久没搞技术了,最近心血来潮想做一个免费的DDNS域名,虽然飞牛的转发域名好用,但宽带会做限制(我是一个穷书生),如果用DDNS就是直连NAS了。原来最出名的花生壳现在发现要收费了,免费的又限制应用,找了一圈发现,国内的基本都没有不限端口、应用又免费的DDNS(可能是我没找到)。那只能跑外面去找,结果给我发现NO-IP这个网站,免费的DDNS,不限应用、不限端口,支持ACCESS KEY,但是问题又来了,飞牛的自带的DDNS和DDNS-GO都不支持NO-IP这个网站,只有华硕路由器支持。看了一下NO-IP的文档,它是支持客户端获取IP的,那就简单了,在飞牛上安装这个客户端就可以啦,再加入启动进程。具体方法如下:
一、注册
去NOIP.COM注册一个用户,然后申请域名,具体步骤省略。
二、安装客户端
根据NOIP的技术文档,它是有一个客户端可以安装的,安装完后能侦听公网IP,并上传NOIP,并且支持Windows、MAC、Linux三种操作系统。下面只讲Linux系统安装方法:
-
下载安装 linux DUC 到终端,使用以下命令,逐条执行
wget --content-disposition https://www.noip.com/download/linux/latest
tar xf noip-duc_3.3.0.tar.gz
cd /home/$USER/noip-duc_3.3.0/binaries && sudo apt install ./noip-duc_3.3.0_amd64.deb
-
使用 noip-duc -g all.ddnskey.com --username <DDNS Key Username> --password <DDNS Key Password>命令格式启动侦听程序
下面,我把noip-duc --help的命令解释一下
noip-duc --help
noip-duc 3.3.0
No-IP Dynamic Update Client
USAGE:
noip-duc [OPTIONS] --username <USERNAME> --password <PASSWORD>
OPTIONS:
`--daemon-group <守护进程组>`
在后台运行时,切换到此用户组
[环境变量:NOIP_DAEMON_GROUP=]
`--daemon-pid-file <守护进程PID文件>`
在后台运行时,将进程 ID 写入此文件
[环境变量:NOIP_DAEMON_PID_FILE=]
`--daemon-user <守护进程用户>`
在后台运行时,切换为此用户
[环境变量:NOIP_DAEMON_USER=]
`--daemonize`
在后台运行(守护进程模式)
`-e, --exec-on-change <变更时执行命令>`
当 IP 地址变更时要运行的命令。运行时会设置环境变量
CURRENT_IP 和 LAST_IP。同时,命令中的 {{CURRENT_IP}} 和 {{LAST_IP}}
占位符会被替换为相应的值。这允许您将变量作为参数传递给命令,
或从环境中读取。命令总是在 shell 中执行(Windows 上为 sh 或 cmd)。
示例:
`noip_duc -e 'mail -s "IP 从 {{LAST_IP}} 变更为 {{CURRENT_IP}}" user@example.com'`
[环境变量:NOIP_EXEC_ON_CHANGE=]
`-g, --hostnames <主机名>`
要更新的组和主机名的逗号分隔列表
[环境变量:NOIP_HOSTNAMES=]
`-h, --help`
打印帮助信息
`--http-timeout <HTTP超时>`
发起 HTTP 请求时的超时时间
[环境变量:NOIP_HTTP_TIMEOUT=]
[默认值:10s]
`--import [<导入文件>]`
从 noip2 导入配置,并显示为环境变量
[默认:/etc/no-ip2.conf]
`--ip-method <IP探测方法>`
用于发现公网 IP 的方法,以逗号分隔的列表。按顺序尝试,
直到找到公网 IP。失败的方法不会重试,除非所有方法都失败。
可能的值包括:
- 'aws-metadata':使用 AWS 元数据 URL 获取与实例关联的弹性 IP。
- 'dns':使用 No-IP 的 DNS 公网 IP 查询系统。
- 'dns:<域名服务器>:<端口>:<查询名>:<记录类型>':自定义 DNS 查询。
- 'http':No-IP 在 80 端口的 HTTP 方法。
- 'http-port-8245':No-IP 在 8245 端口的 HTTP 方法。
- 'static:<IP 地址>':始终使用此 IP 地址。与 `--once` 一起使用很有帮助。
- HTTP URL:返回纯 IP 地址的 HTTP URL。
[环境变量:NOIP_IP_METHOD=]
[默认值:dns,http,http-port-8245]
`-l, --log-level <日志级别>`
设置日志级别。可能的值:trace, debug, info, warn, error, critical。覆盖 `--verbose`
[环境变量:NOIP_LOG_LEVEL=]
`--once`
查找公网 IP 并发送一次更新,然后退出。这是验证凭据是否正确的好方法。
`-p, --password <密码>`
您的 www.noip.com 密码。为了更好的安全性,请使用“更新组”凭据。
https://www.noip.com/members/dns/dyn-groups.php
[环境变量:NOIP_PASSWORD=]
`-u, --username <用户名>`
您的 www.noip.com 用户名。为了更好的安全性,请使用“更新组”凭据。
https://www.noip.com/members/dns/dyn-groups.php
[环境变量:NOIP_USERNAME=]
`-v, --verbose`
增加日志详细程度。可多次使用以增加级别
`-V, --version`
打印版本信息
三、添加启动进程
运行了noip-duc后我发现,这条命令重启后就失效了,每次都要手动执行,太麻烦了,于是,我做一个noip-duc.service的服务进程,具体方法如下:
# 创建专门运行 noip-duc 的系统用户
sudo useradd -r -s /usr/sbin/nologin -M -c "No-IP DUC Service User" noip-duc
# 创建noip-duc.service文件
sudo nano /etc/systemd/system/noip-duc.service
# noip-duc.service文件内容
[Unit]
Description=No-IP Dynamic Update Client
After=network.target
Wants=network.target
StartLimitIntervalSec=100
StartLimitBurst=5
[Service]
Type=simple
User=noip-duc
Group=noip-duc
WorkingDirectory=/var/lib/noip-duc
# 使用简单模式而不是 forking
# username、password最好在no-ip后台申请一个DDNS KEY,用虚拟用户比较安全
ExecStart=/usr/bin/noip-duc \
--username=用户名 \
--password=密码 \
--hostnames=你的域名(.ddns.net) \
--log-level=info
# 可选:设置环境变量
Environment="NOIP_CHECK_INTERVAL=5m"
Environment="NOIP_HTTP_TIMEOUT=10s"
# 重启策略
Restart=on-failure
RestartSec=5
# 资源限制
MemoryMax=100M
CPUQuota=5%
# 安全设置
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ReadWritePaths=/var/lib/noip-duc
ProtectHome=yes
PrivateDevices=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
[Install]
WantedBy=multi-user.target
# 创建工作目录
sudo mkdir -p /var/lib/noip-duc
sudo chown noip-duc:noip-duc /var/lib/noip-duc
sudo chmod 700 /var/lib/noip-duc
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 停止当前服务
sudo systemctl stop noip-duc.service
# 启动新配置的服务
sudo systemctl start noip-duc.service
# 查看详细状态
sudo systemctl status noip-duc.service -l
# 查看实时日志
sudo journalctl -u noip-duc.service -f --since "1 minute ago"
执行完以上命令,你的noip-duc就已经加入到启动进程,每次重启都会自动加载。
以上是个人分享,如有错误,欢迎指正。