最新版本始終可從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 :-)