最新版本始终可从Github获得
https://github.com/troglobit/inadyn/releases
提示: html Unix手册在https://man.troglobit.com,EG,inadyn.conf(5)
Inadyn或In-a-dyn是一个小而简单的动态DNS,DDNS,具有HTTPS支持的客户端。通常在许多GNU/Linux发行版中可用,用于OFF架子路由器和Internet网关,以使您的Internet名称与您的公共¹IP地址同步。它也可以用于与Internet具有冗余(备份)连接的安装中。
大多数人都不知道他们与同一互联网服务提供商(ISP)的其他用户共享一个互联网地址。 DHCP,PPPOE或PPPOA之类的协议用于为您提供一个地址和一种连接到Internet的方法,但通常不是其他人与您连接的方式。如果您想在此类连接上运行Internet服务器,即使重新协商租赁时,每次重新连接或在DHCP的情况下都会失去IP地址。
通过使用inadyn这样的DDNS客户端,您可以在DDNS提供商(例如Freedns)中注册Internet名称。当您的IP地址更改时,DDNS客户端会定期更新您的DNS记录和/或按需。 Inadyn可以使用相同的IP地址维护多个主机记录,使用脚本的组合,面向Internet接口的地址或使用DDNS提供商的IP地址更改检测器的默认地址。
__
¹公共IP地址是默认地址,也可以使用私人地址。
其中一些服务是免费的,用于非商业用途,有些服务需要少量费用,但也提供更多的域可供选择。
即使许多人共享原始DYNDNS插件,但以下一级提供商也具有专用的“插件”。以下是已知的DDNS提供商的列表,该插件支持它们:
有关完整列表,请参见inadyn -L ,有关机器友好的JSON输出,请使用inadyn -L -j 。
可以使用自定义或通用的DDNS插件来启用不支持的DDNS提供商。有关配置示例,请参见下文。
in-a-dyn默认为HTTPS,但并非所有提供商都可以支持这一点,因此,如果您遇到问题,请尝试provider更新( ssl = false )或checkip-ssl = false )(Checkip-SSL = false)。
默认情况下启用了HTTPS,因为它可以保护您的凭据不受偷窥的影响并降低劫持您的帐户的风险。
In-a-dyn支持更新多个DDNS服务器,即使在不同的DDNS提供商上也是几个帐户。以下/etc/inadyn.conf示例显示如何完成此操作。要验证您的配置,而无需启动守护程序,请使用:
inadyn --check-config
这查找默认的.conf文件,要检查任何文件,使用:
inadyn --check-config -f /path/to/file.conf
# In-A-Dyn v2.0 configuration file format
period = 300
user-agent = Mozilla/5.0
# The FreeDNS username must be in lower case
# The password (max 16 chars) is case sensitive
provider freedns {
username = lower-case-username
password = case-sensitive-pwd
hostname = some.example.com
}
# We override checkip server with the In-a-dyn built-in 'default',
# http://ifconfig.me/ip, for details on this, see below.
provider freemyip {
password = YOUR_TOKEN
hostname = YOUR_DOMAIN.freemyip.com
checkip-server = default
}
provider dyn {
ssl = false
username = charlie
password = snoopy
hostname = { peanuts, woodstock }
user-agent = Mozilla/4.0
}
provider duckdns.org {
username = YOUR_TOKEN
password = noPasswordForDuckdns
hostname = YOUR_DOMAIN.duckdns.org
}
# With multiple usernames at the same provider, index with :#
provider no-ip.com:1 {
username = ian
password = secret
hostname = flemming.no-ip.com
user-agent = inadyn/2.2
}
# With multiple usernames at the same provider, index with :#
provider no-ip.com:2 {
username = james
password = bond
hostname = spectre.no-ip.com
checkip-ssl = false
checkip-server = ifconfig.me
checkip-path = /ip
}
# With multiple usernames at the same provider, index with :#
provider no-ip.com:3 {
username = spaceman
password = bowie
hostname = spaceman.no-ip.com
checkip-command = "/sbin/ifconfig eth0 | grep 'inet6 addr'"
}
# Google Domains - notice use of '@' to update root entry
provider domains.google.com:1 {
hostname = @.mydomain.com
username = your_username
password = your_password
}
# Wildcard subdomains - notice the quotes (required!)
provider domains.google.com:2 {
hostname = "*.mydomain.com"
username = your_username
password = your_password
}
# Note: hostname == update-key from Advanced tab in the Web UI
provider tunnelbroker.net {
username = futurekid
password = dreoadsad/+dsad21321 # update-key-in-advanced-tab
hostname = 1234534245321 # tunnel-id
}
# dynv6.com update using a custom checkip-command, which works
# if you have access to an Internet-connected interface. Make
# sure to verify the command works on your system first
allow-ipv6 = true # required option for IPv6 atm.
provider dynv6.com {
username = your_token
password = not_used
hostname = { host1.dynv6.net, host2.dynv6.net }
checkip-command = "/sbin/ip -6 addr | grep inet6 | awk -F '[ t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80"
}
provider cloudxns.net {
username = your_api_key
password = your_secret_key
hostname = yourhost.example.com
}
provider dnspod.cn {
username = your_api_id
password = your_api_token
hostname = yourhost.example.com
}
# Create a unique custom API token with the following permissions:
# -> Zone.Zone - Read, Zone.DNS - Edit.
provider cloudflare.com {
username = zone.name
password = api_token_important_read_comment
hostname = hostname.zone.name
ttl = 1 # optional, value of 1 is 'automatic'.
proxied = false # optional.
}
provider goip.de {
username = user.name
password = user.password
hostname = hostname.zone.name
}
请注意,配置如何具有NO-IP提供商的三个不同用户 - 这是通过在提供商名称上附加a :ID来实现的。
我们还定义了一个自定义缓存目录,默认值是使用/var/cache 。在我们的情况下/mnt是一个特定系统的持久商店,用于根据每个提供商报告的IP地址缓存。 Inadyn使用此操作来确保您不会因过度更新而被锁定在帐户中,如果您的设备Internet Gateway运行InAdyn会陷入重新启动循环或类似的情况。
但是,要使缓存机制为100%万无一失的系统时钟必须正确设置 - 如果您对系统时钟没有正确设置的问题,例如,启动时,即将收到NTP消息,请使用命令行选项--startup-delay=SEC 。要告诉inadyn ,可以在SEC超时之前进行,请使用SIGUSR2 。
定义的最后一个系统是飓风电气提供的IPv6 https://tunnelbroker.net服务。这里的hostname设置为隧道ID,并且密码必须是“高级配置”选项卡中的更新键。
注意:上面的DYNV6的
checkip-command只是一种方法。这是来自他们自己的脚本的另一个变体:ip -6 addr list scope global $device | grep -v " fd" | sed -n 's/.*inet6 ([0-9a-f:]+).*/1/p' | head -n 1
有时,DDNS提供商的默认checkip-server响应速度可能会很慢,甚至超时。 In-a-dyn支持用自定义命令或自定义命令覆盖提供商的默认值。更改它的最简单方法是在提供商配置中设置checkip-server = default ,触发in-a-dyn使用默认的http://ifconfig.me/ip ,这也是任何自定义DDNS配置的默认值。有关更多信息,请参见MAN页面或以下部分。
一些提供商需要使用特定浏览器发送更新,可以使用user-agent = STRING设置来处理更新,如上所示。它既可以在全球范围内也可以在人均级别上使用。
注意:在多用户服务器设置中,请确保将.conf chmod chmod到600(仅由您/root read-write)来保护其他用户阅读您的DDNS服务器凭据。
除了InAdyn支持的默认DDNS提供商外,可以在配置文件中定义自定义DDNS提供商。在上面的示例中使用custom {}而不是provider {}部分。
In-a-dyn使用HTTP基本身份验证(基本64编码)将用户名和密码传达给服务器。如果您没有用户名和/或密码,则可以将这些字段排除在外。基本身份验证,仍将用于与服务器的通信,但使用空的用户名和密码。
可以这样设置自定义DDNS提供商:
custom example {
username = myuser
password = mypass
checkip-server = checkip.example.com
checkip-path = /
ddns-server = update.example.com
ddns-path = "/update?hostname="
hostname = myhostname.example.net
}
以下变量可以替换为配置:
%u - username
%p - password, if HTTP basic auth is not used
%h - hostname
%i - IP address
对于https://www.namecheap.com,它看起来如下。请注意,主机名语法与上面有何不同:
custom namecheap {
username = YOURDOMAIN.TLD
password = mypass
ddns-server = dynamicdns.park-your-domain.com
ddns-path = "/update?domain=%u&password=%p&host=%h&ip=%i"
hostname = { "@", "www", "test" }
ddns-response = "<ErrCount>0</ErrCount>"
}
这里更新了三个主机名,一个HTTP获取每个列出的主机名的更新请求。一些提供商(例如Freedns)支持设置CNAME记录(别名),以减少您需要更新的记录量。 Freedns甚至默认将多个记录链接到同一更新,如果您希望每个DNS记录都可以从唯一的IP地址更新 - 请确保在DDNS提供商中检查您的设置!
通用插件也可以与在更新请求中需要客户的新IP地址的提供商一起使用。如果我们假装Inadyn不支持http://dyn.com,这是一个可以做到这一点的示例。 ddns-path在提供商之间有所不同,您必须找出一些东西。支持页面有时在API部分或类似的情况下列出。
# This emulates dyndns.org
custom dyn {
username = DYNUSERNAME
password = DYNPASSWORD
ddns-server = members.dyndns.org
ddns-path = "/nic/update?hostname=%h.dyndns.org&myip=%i"
hostname = { YOURHOST, alias }
}
这里使用了带有格式指定符的完全自定义的ddns-path ,有关此的详细信息,请参见inadyn.conf(5) MAN页面。
另一个例子:
# Custom configuration for dnsmadeeasy
custom dyn {
username = DNSMADEEASYUSERNAME
password = DNSMADEEASYPASSWORDFORTHISHOST
ddns-server = cp.dnsmadeeasy.com
ddns-path = "/servlet/updateip?username=%u&password=%p&id=DNSMADEEASYHOSTID&ip=%i"
hostname = HOST
}
使用通用插件时,应首先检查DDNS提供商的响应。默认情况下,Inadyn在HTTP响应主体中寻找200 HTTP响应OK代码和字符串"good" , "OK" , "true" , "success"或"updated" 。如果DDNS提供商返回其他内容,则可以添加可能的ddns-response = { Arrr, kilroy } ,或仅一个ddns-response = Cool - 如果您的提供商确实给出任何响应,则使用ddns-response = "" 。
如果您的DDNS提供商没有为您提供checkip-server ,则可以使用其他服务,例如http://ifconfig.me/ip,如果您没有为自定义提供商配置指定一个:
checkip-server = ifconfig.me
checkip-path = /ip
checkip-ssl = false
甚至使用脚本或命令:
checkip-command = /sbin/ifconfig eth0 | grep 'inet addr'
这两个设置也可以在标准provider{}部分中使用。
注意:即使在ddns-path中编码所有内容,也需要hostname !给定的主机名将附加到用于更新的ddns-path上,除非您使用append-myip设置,否则您的IP地址将被添加。使用append-myip时,您可能需要在ddns-path中编码DNS主机名,就像上面的最后一个示例中所做的那样。
一个常见的问题是开始,这是可以理解的,因为IN-A-Dyn有很多令人困惑的选择。
保存您的/etc/inadyn.conf后,首先尝试使用完整的调试日志在前景中启动它:
inadyn -l debug --foreground --force
任何错误配置或不良服务器响应都应该更容易发现。请记住,如果您提交错误报告或在论坛/IRC中提出问题,请从任何密码和域信息中审查您的日志!
尝试清除缓存:
sudo systemctl stop inadyn.servicesudo rm -rf /var/cache/inadyn/*sudo systemctl restart inadyn.service长期以来,该项目保持了自己的.deb包装和基本的基础架构。但是,in-a-dyn中的特征级别不断提高,因此依赖性数量以及支持更多架构和不同分布的需求,截至v2.9.1 v2.9.1已停止使用预构建的.deb支持。
Debian项目现在拥有Inadyn的积极维护者,这是Ubuntu和其他人的上游。请向您各自的分发报告问题和请求:
注意:项目的包装文件已移至GIT存储库中的一个单独的Debian分支。它没有积极更新或支持发行版。要使用它,请查看分支并编辑
debian/changelog),为您的系统构建新的.deb文件。
自动构建的图像可在此处提供:
提供了一个Dockerfile来简化建筑和运行inadyn 。
docker build -t inadyn:latest .
docker run --rm -v "$PWD/inadyn.conf:/etc/inadyn.conf" inadyn:latest
如果您不想将其作为背景守护程序运行,则可以设置一个Cronjob:
inadyn.conf文件crontab -e中添加以下行 * * * * * docker run --rm -v " path/to/inadyn.conf:/etc/inadyn.conf " -v " path/to/cache:/var/cache/inadyn " troglobit/inadyn:latest -1 --cache-dir=/var/cache/inadyn > /dev/null 2>&1要在MacOS上运行最新的稳定版本,请键入:
brew install inadyn
要运行Master Branch的最新版本,请改为安装Git Tap:
brew install --HEAD troglobit/inadyn/inadyn
这些都将安装所有依赖关系。
您也可以使用MacPorts在MacOS上安装IN-A-DYN:
sudo port install inadyn
您可以在In-A-Dyn的端口页面上找到更多信息。
首先从GitHub下载最新的官方IN-A-DYN版本:
in-a-dyn需要一些库才能构建。构建系统使用pkg-config工具在其必需的版本中搜索它们:
它们可从大多数UNIX发行版作为预制软件包获得。构建InAdyn时,请确保安装配电软件包的-dev或-devel软件包。关于Debian/Ubuntu(衍生品):
$ sudo apt install gnutls-dev libconfuse-dev
要构建您还需要一个C编译器, pkg-config工具,然后制作:
$ sudo apt install build-essential pkg-config
使用HTTPS(SSL/TLS)支持构建时,请确保还在系统上安装ca-certificates软件包,否则InAdyn将无法验证DDNS提供商的HTTPS证书。
GNU配置和构建系统使用/usr/local作为默认安装前缀。在许多情况下,这很有用,但这意味着配置文件和缓存文件也将使用相同的前缀。大多数用户都期望这些文件在/etc/ and /var/run/ and and配置中有一些有用的选项,建议使用:
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make -j5
$ sudo make install-strip
您可能需要删除--prefix=/usr选项。
默认情况下,Inadyn试图使用Gnutls构建HTTPS支持。 Gnutls是推荐的SSL库,用于UNIX发行版,这些库不提供OpenSSL/libressl作为系统库。但是,当openssl或libressl以系统库提供时,例如在许多嵌入式系统中:
./configure --enable-openssl
完全禁用Inadyn HTTPS支持(不建议!):
./configure --disable-ssl
有关OpenSSL和GNU GPL许可问题的更多详细信息,请参见:
有些人想在静态上构建,以autoconf添加以下LDFLAGS=配置脚本后。您可能还需要添加LIBS=... ,这取决于您的特定系统:
./configure LDFLAGS="-static" ...
在某些系统上,默认配置安装路径( /usr/local )被禁用,而不是由ldconfig和pkg-config等工具搜索。因此,如果配置未能找到libconfuse库或.pc文件,则使用此内容创建文件/etc/ld.so.conf.d/local.conf 。
/usr/local/lib
更新链接器缓存:
sudo ldconfig -v |egrep libconfuse
并以这样的方式运行Inadyn配置脚本:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure
对于SystemD集成,您需要安装pkg-config ,这有助于Inadyn构建系统找出SystemD路径。安装时,只需致电systemctl即可启用并启动inadyn :
$ sudo systemctl enable inadyn.service
$ sudo systemctl start inadyn.service
检查它是否通过检查系统日志开始正确启动,或者:
$ sudo systemctl status inadyn.service
停止服务:
$ sudo systemctl stop inadyn.service
当内置在路由器中时,通常不使用某些功能,可以禁用以节省空间。配置选项--enable-reduced将构建这样的减少功能性二进制。当前,此禁用详细日志消息和错误字符串,并消除配置文件检查和一些向后兼容性。
如果您想贡献,或者只是尝试尝试最新但未发行的功能,那么您需要了解有关GNU构建系统的一些事情:
configure.ac和每个directory Makefile.am是关键文件configure和Makefile.in是由autogen.sh生成的Makefile是通过configure脚本生成的从git建造;克隆存储库并运行autogen.sh脚本。这要求GNU工具automake , autoconf和libtool安装在您的系统上。释放的Tarballs不需要这些工具。
$ sudo apt install git automake autoconf
然后,您可以克隆存储库并创建configure脚本,这不是Git Repo的一部分:
git clone https://github.com/troglobit/inadyn.git
cd inadyn/
./autogen.sh
./configure && make
至少从GIT构建需要之前提到的图书馆依赖性。 GIT来源是一个移动的目标,不建议用于生产系统,除非您知道自己在做什么!
这是Narcis Ilisei的原始Inadyn的延续。现在由Joachim Wiberg维护。请提交错误报告,或在GitHub发送“错误修复”和“提议扩展”请求。
个人谢谢!去罗伯特·霍格伯格(RobertHögberg),他赞助了一些D-Link Dir-645路由器,所以我可以回到Interwebs :-)