██████╗ ██████╗ ██████╗ ███╗ ██╗███████╗
██╔════╝ ██╔═══██╗██╔══██╗████╗ ██║██╔════╝
██║ ███╗██║ ██║██║ ██║██╔██╗ ██║███████╗
██║ ██║██║ ██║██║ ██║██║╚██╗██║╚════██║
╚██████╔╝╚██████╔╝██████╔╝██║ ╚████║███████║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
GoDNS 是一个支持多提供商并内置 Web 面板的开源自建动态 DNS (DDNS) 客户端。它是用 Go 重写的我早期的 DynDNS 开源项目。
如果你希望直接使用托管式 DDNS 服务,而不是自己部署 GoDNS,可以试试 godns.app。
它更适合那些不想自己搭服务器、不想手动维护 DNS 流程,甚至还没有自己域名的用户。
下面展示的是开源版 GoDNS 内置的 Web UI:
| 提供商 | IPv4 支持 | IPv6 支持 | 根域名 | 子域名 |
|---|---|---|---|---|
| Cloudflare | ✅ | ✅ | ✅ | ✅ |
| DigitalOcean | ✅ | ✅ | ✅ | ✅ |
| Google Domains | ✅ | ✅ | ❌ | ✅ |
| DNSPod | ✅ | ✅ | ✅ | ✅ |
| Dynv6 | ✅ | ✅ | ❌ | ✅ |
| HE.net (Hurricane Electric) | ✅ | ✅ | ✅ | ✅ |
| AliDNS | ✅ | ✅ | ✅ | ✅ |
| DuckDNS | ✅ | ✅ | ❌ | ✅ |
| Dreamhost | ✅ | ✅ | ❌ | ✅ |
| No-IP | ✅ | ✅ | ❌ | ✅ |
| Scaleway | ✅ | ✅ | ✅ | ✅ |
| Linode | ✅ | ✅ | ✅ | ✅ |
| Strato | ✅ | ✅ | ❌ | ✅ |
| LoopiaSE | ✅ | ✅ | ❌ | ✅ |
| Infomaniak | ✅ | ✅ | ❌ | ✅ |
| Hetzner | ✅ | ✅ | ✅ | ✅ |
| OVH | ✅ | ✅ | ❌ | ✅ |
| Porkbun | ✅ | ✅ | ✅ | ✅ |
| Dynu | ✅ | ✅ | ❌ | ✅ |
| IONOS | ✅ | ✅ | ❌ | ✅ |
| TransIP | ✅ | ✅ | ❌ | ✅ |
提示:您可以关注此 问题 查看根域名 DDNS 的当前状态。
请选择最适合你的方式:
- 如果你想直接使用托管服务而不自建:使用 godns.app。
- 如果你想最快速地开始自建:从 releases 下载二进制文件。
- 如果你想用容器运行:直接看 作为 Docker 容器。
- 如果你想从源码构建:看 安装。
-
Linux
-
MacOS
-
ARM Linux(如 Raspberry Pi 等)
-
Windows
-
MIPS32 平台
要为 MIPS(mips 或 mipsle)编译二进制文件,请运行:
GOOS=linux GOARCH=mips/mipsle GOMIPS=softfloat go build -a
该二进制文件也可以在路由器上运行。
要自建部署 GoDNS,假设:
- 您已注册(现在拥有)一个域名
- 域名已委托给受支持的 DNS 提供商(即它有指向受支持提供商的 nameserver
NS记录)
或者,您可以登录 DuckDNS(使用社交账户),免费获取 duckdns.org 域名下的子域名。
你可以选择以下安装方式之一:
- 从 releases 下载已编译的二进制文件。
- 使用 作为 Docker 容器 中描述的 Docker 镜像。
- 从源码构建:
cd cmd/godns # 进入 GoDNS 目录
go mod download # 获取依赖项
go build # 构建通过运行以下命令打印使用/帮助信息:
$ ./godns -h
Usage of ./godns:
-c string
指定配置文件(默认 "./config.json")
-h 显示帮助- 复制 config_sample.json 并命名为
config.json,或者复制 config_sample.yaml 并命名为config.yaml。 - 配置您的提供商、域名/子域名信息、凭据等。
- 配置通知媒介(例如 SMTP 接收电子邮件),以便在您的 IP 地址更改时收到通知
- 将文件放置在 GoDNS 的同一目录中,或者使用
-c=path/to/your/file.json选项
🆕 GoDNS 现已支持同时使用多个 DNS 提供商!
您现在可以在单个配置文件中配置来自不同 DNS 提供商的域名,从而实现:
- 跨多个 DNS 服务(Cloudflare、DNSPod、DigitalOcean 等)管理域名
- 为每个服务使用提供商特定的凭据
- 与现有单提供商配置保持完全向后兼容
📖 查看完整的多提供商配置指南 了解详细的设置说明和示例。
GoDNS 支持两种不同的配置文件格式:
- JSON
- YAML
默认情况下,GoDNS 使用 JSON 配置文件。但是,您可以通过 ./godns -c /path/to/config.yaml 指定使用 YAML 格式。
GoDNS 支持动态加载配置。如果您修改了配置文件,GoDNS 将自动重新加载配置并应用更改。
provider— 使用的一个 支持的提供商:Cloudflare、Google、DNSPod、AliDNS、HE、DuckDNS或Dreamhost。email— DNS 提供商的电子邮件或账户名。password— DNS 提供商的密码。login_token— DNS 提供商的 API 令牌。domains— 域名列表,包含您的子域名。ip_urls— 用于获取公共 IPv4 地址的 URL 数组。ipv6_urls— 用于获取公共 IPv6 地址的 URL 数组。ip_type— 决定使用 IPv4 还是 IPv6 的开关(当 支持 时)。可用值:IPv4或IPv6。interval— 公共 IP 更新的频率(以秒为单位)。socks5_proxy— Socks5 代理服务器。resolver— 要使用的公共 DNS 服务器地址。例如,要使用 Google 的公共 DNS,您可以在使用 GoDNS 的 IPv4 模式时设置8.8.8.8,或在 IPv6 模式时设置2001:4860:4860::8888。skip_ssl_verify- 跳过对 https 请求的 SSL 证书验证。
只需将 @ 放入 sub_domains,例如:
"domains": [{
"domain_name": "example.com",
"sub_domains": ["@"]
}]对于 Cloudflare,您需要提供电子邮件和全局 API 密钥作为密码(或使用 API 令牌),并配置所有域名和子域名。
通过设置选项 proxied = true,记录将获得 Cloudflare 的性能和安全优势。此选项仅适用于 Cloudflare。
使用电子邮件和全局 API 密钥
{
"provider": "Cloudflare",
"email": "you@example.com",
"password": "Global API Key",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": "",
"proxied": false
}使用 API 令牌
{
"provider": "Cloudflare",
"login_token": "API Token",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 DNSPod,您需要提供您的 API 令牌(您可以在这里创建),并配置所有域名和子域名。
示例
{
"provider": "DNSPod",
"login_token": "your_id,your_token",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 DigitalOcean,您需要提供一个具有 domain 范围的 API 令牌(您可以在这里创建),并配置所有域名和子域名。
示例
{
"provider": "DigitalOcean",
"login_token": "dop_v1_00112233445566778899aabbccddeeff",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["@", "www"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300
}对于 Dreamhost,您需要提供您的 API 令牌(您可以在这里创建),并配置所有域名和子域名。
示例
{
"provider": "Dreamhost",
"login_token": "your_api_key",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"resolver": "ns1.dreamhost.com",
"socks5_proxy": ""
}对于 Dynv6,只需提供 token,配置 1 个默认域名和子域名。
示例
{
"provider": "Dynv6",
"password": "",
"login_token": "1234567ABCDEFGabcdefg123456789",
"domains": [
{
"domain_name": "dynv6.net",
"sub_domains": ["myname"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 Google Domains,您需要提供电子邮件和密码,并配置所有域名和子域名。
示例
{
"provider": "Google",
"email": "Your_Username",
"password": "Your_Password",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 AliDNS,您需要提供 AccessKeyID 和 AccessKeySecret 作为 email 和 password,并配置所有域名和子域名。
示例
{
"provider": "AliDNS",
"email": "AccessKeyID",
"password": "AccessKeySecret",
"login_token": "",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 DuckDNS,只需提供 token,配置 1 个默认域名和子域名。
示例
{
"provider": "DuckDNS",
"password": "",
"login_token": "3aaaaaaaa-f411-4198-a5dc-8381cac61b87",
"domains": [
{
"domain_name": "www.duckdns.org",
"sub_domains": ["myname"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}示例
{
"provider": "NoIP",
"email": "mail@example.com",
"password": "YourPassword",
"domains": [
{
"domain_name": "ddns.net",
"sub_domains": ["timothyye6"]
}
],
"ip_type": "IPv4",
"ip_urls": ["https://api.ip.sb/ip"],
"resolver": "8.8.8.8",
"interval": 300,
"socks5_proxy": ""
}对于 HE,不需要电子邮件,只需填写 DDNS 密钥作为密码,并配置所有域名和子域名。
示例
{
"provider": "HE",
"password": "Your DDNS Key",
"login_token": "",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}提供商配置
添加一个新的 "A 记录" 并确保勾选 "启用动态 DNS 条目":
填写您自己的 DDNS 密钥或为这个新创建的 "A 记录" 生成一个随机 DDNS 密钥:
记住 DDNS 密钥并在配置文件中设置到 password 属性中。
注意:如果您有多个域名或子域名,请确保它们的 DDNS 密钥相同。
对于 Scaleway,您需要提供 API 密钥作为 login_token(如何生成 API 密钥),并配置域名和子域名。domain_name 应等于 Scaleway 中的 DNS 区域或根域名。DNS 记录的 TTL 将设置为 interval 值。确保相关子域名的 A 或 AAAA 记录存在,这些可以在 Scaleway 控制台 中设置。
示例
{
"provider": "Scaleway",
"login_token": "API Secret Key",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "@"]
},
{
"domain_name": "samplednszone.example.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300
}要与 Linode API 进行身份验证,您需要提供一个具有“读/写”访问权限的个人访问令牌,范围为“Domain”。Linode 有一个关于创建访问令牌的帮助页面。将此令牌传入配置文件中的 login_token 字段。
配置文件中的 domain_name 字段必须是 Linode 管理的现有域名的名称。Linode 有一个关于添加域名的帮助页面。GoDNS Linode 处理程序不会自动创建域名,但会自动创建子域名。
GoDNS Linode 处理程序目前对 Linode DNS 记录使用固定的 30 秒 TTL。
示例
{
"provider": "Linode",
"login_token": ${PERSONAL_ACCESS_TOKEN},
"domains": [{
"domain_name": "example.com",
"sub_domains": ["www","@"]
},{
"domain_name": "samplednszone.example.com",
"sub_domains": ["www","test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300
}对于 Strato,您需要提供电子邮件和密码,并配置所有域名和子域名。 更多信息:德语 英语
示例
{
"provider": "strato",
"password": "Your_Password",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 LoopiaSE,您需要提供用户名和密码,并配置所有域名和子域名。 更多信息:瑞典语
示例
{
"provider": "LoopiaSE",
"email": "Your_Username",
"password": "Your_Password",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 Infomaniak,您需要提供用户名和密码,并配置所有域名和子域名。 更多信息:英语
示例
{
"provider": "Infomaniak",
"email": "Your_Username",
"password": "Your_Password",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 Hetzner,您必须创建一个访问令牌。这可以在 DNS 控制台中完成。 (左上角的个人图标 --> API 令牌) 注意:如果一个域名有多个记录,只有第一个记录会被更新。 确保只有一个记录。
示例
{
"provider": "hetzner",
"login_token": "<token>",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4"
}对于 OVH,您需要提供 Consumerkey、Appsecret 和 Appkey,并配置所有域名和子域名。 所需的值可以通过访问此网站获取 权限应在 GET、POST 和 PUT 上设置为 '*' 更多信息:help.ovhcloud.com
示例
{
"provider": "OVH",
"consumer_key": "e389ac80cc8da9c7451bc7b8f171bf4f",
"app_secret": "d1ffee354d3643d70deaab48a09131fd",
"app_key": "cd338839d6472064",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}对于 Porkbun,您需要提供 API 密钥作为 login_token 和秘密密钥作为 password。
从 Porkbun API 管理 获取您的 API 凭据。
示例
{
"provider": "Porkbun",
"login_token": "pk1_your_api_key",
"password": "sk1_your_secret_key",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["@", "www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ipify.org"],
"ip_type": "IPv4",
"interval": 300
}对于 Dynu,您需要配置 password,配置 1 个默认域名和子域名。
示例
{
"provider": "Dynu",
"password": "Your_Password",
"domains": [
{
"domain_name": "your_domain.com",
"sub_domains": ["your_subdomain"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}这是针对 IONOS 托管服务的,不是 IONOS 云。
您需要注册 IONOS API 访问托管服务,然后创建一个API 密钥。
您可以在IONOS API 文档中找到完整指南。
注意:GoDNS 使用的 API 密钥必须遵循上述文档中描述的 publicprefix.secret 形式。
示例
provider: IONOS
login_token: publicprefix.secret
domains:
- domain_name: example.com
sub_domains:
- somesubdomain
- anothersubdomain
resolver: 1.1.1.1
ip_urls:
- https://api.ipify.org
ip_type: IPv4
interval: 300
socks5_proxy: ""对于 TransIP,您需要提供您的 API 私钥作为 login_token,用户名作为 email,并配置所有域名和子域名。
示例
provider: TransIP
email: account_name
login_token: api_key
domains:
- domain_name: example.com
sub_domains:
- "@"
- somesubdomain
- anothersubdomain
resolver: 1.1.1.1
ip_urls:
- https://api.ipify.org
ip_type: IPv4
interval: 300
socks5_proxy: ""GoDNS 可以在 IP 更改时发送通知。
电子邮件通过 SMTP 发送。使用以下片段更新您的配置:
"notify": {
"mail": {
"enabled": true,
"smtp_server": "smtp.example.com",
"smtp_username": "user",
"smtp_password": "password",
"smtp_port": 25,
"send_from": "my_mail@example.com"
"send_to": "my_mail@example.com"
}
}每次 IP 更改时,您将收到如下电子邮件:
要在 IP 更改时接收 Telegram 消息,使用以下片段更新您的配置:
"notify": {
"telegram": {
"enabled": true,
"bot_api_key": "11111:aaaa-bbbb",
"chat_id": "-123456",
"message_template": "域名 *{{ .Domain }}* 已更新为 %0A{{ .CurrentIP }}",
"use_proxy": false
},
}message_template 属性支持 markdown。新行需要用 %0A 转义。
要在 IP 更改时接收 Slack 消息,使用以下片段更新您的配置:
"notify": {
"slack": {
"enabled": true,
"bot_api_token": "xoxb-xxx",
"channel": "your_channel",
"message_template": "域名 *{{ .Domain }}* 已更新为 \n{{ .CurrentIP }}",
"use_proxy": false
},
}message_template 属性支持 markdown。新行需要用 \n 转义。
要在 IP 更改时接收 Discord 消息,使用以下片段更新您的配置:
"notify": {
"discord": {
"enabled": true,
"bot_api_token": "discord_bot_token",
"channel": "your_channel",
"message_template": "(可选) 域名 *{{ .Domain }}* 已更新为 \n{{ .CurrentIP }}",
}
}要在 IP 更改时接收 Pushover 消息,使用以下片段更新您的配置:
"notify": {
"pushover": {
"enabled": true,
"token": "abcdefghijklmnopqrstuvwxyz1234",
"user": "abcdefghijklmnopqrstuvwxyz1234",
"message_template": "",
"device": "",
"title": "",
"priority": 0,
"html": 1
}
}如果 html 参数为 1,message_template 属性支持 html。如果留空,将使用默认消息。
如果 device 和 title 参数留空,Pushover 将选择默认值参见。有关优先级参数的更多详细信息
可以在 Pushover API 描述 中找到。
要在 IP 更改时接收 Bark 消息,使用以下片段更新您的配置:
"notify": {
"bark": {
"enabled": true,
"server": "https://api.day.app",
"device_keys": "",
"params": "{ \"isArchive\": 1, \"action\": \"none\" }"
}
}server Bark 服务器地址,可使用官方默认服务器 https://api.day.app,也可设置为自建服务器地址。
device_keys 设备 key,支持多个(英文逗号分隔),多个时,用于批量推送。
params Bark 请求参数,可参考 Bark API
user 自建服务器 Basic auth 用户名,与服务端环境变量 BARK_SERVER_BASIC_AUTH_USER 一致。
password 自建服务器 Basic auth 密码,与服务端环境变量 BARK_SERVER_BASIC_AUTH_PASSWORD 一致。
更多内容请参阅 Bark 官方文档
要在 IP 更改时接收 ntfy 通知,使用以下片段更新您的配置:
"notify": {
"ntfy": {
"enabled": true,
"topic": "godns",
"server": "https://ntfy.sh",
"token": "",
"user": "",
"password": "",
"priority": "default",
"tags": "rotating_light",
"icon": "",
"message_template": ""
}
}topic 要发布到的 ntfy 主题(必填)。主题本质上是一个频道名称,请选择不容易被猜到的名称。
server ntfy 服务器 URL。默认为 https://ntfy.sh。如果使用自建服务器,请设置为自建服务器地址。
token 用于身份验证的访问令牌(可选)。仅在启用了访问控制的自建服务器上需要。
user 基本身份验证的用户名(可选)。与 password 一起用于自建服务器。
password 基本身份验证的密码(可选)。与 user 一起用于自建服务器。
priority 消息优先级:min、low、default、high 或 max(可选)。
tags 以逗号分隔的标签或 emoji 短代码 列表(可选)。
icon 通知中显示的图标 URL(可选)。
message_template 自定义消息模板(可选)。如果为空,默认为 IP address of {{ .Domain }} updated to {{ .CurrentIP }}。
更多信息请参阅 ntfy 官方文档
Webhook 是 GoDNS 提供的另一个功能,用于在 IP 更改时向其他应用程序发送通知。GoDNS 通过 HTTP GET 或 POST 请求向目标 URL 发送通知。
配置部分 webhook 用于自定义 webhook 请求。通常,有 2 个字段用于 webhook 请求:
url:发送 webhook 请求的目标 URL。request_body:发送POST请求的内容,如果此字段为空,则发送 HTTP GET 请求而不是 HTTP POST 请求。
可用变量:
Domain:当前域名。IP:新 IP 地址。IPType:IP 类型:IPV4或IPV6。
"webhook": {
"enabled": true,
"url": "http://localhost:5000/api/v1/send?domain={{.Domain}}&ip={{.CurrentIP}}&ip_type={{.IPType}}",
"request_body": ""
}对于此示例,将向目标 URL 发送带有查询字符串参数的 webhook:
http://localhost:5000/api/v1/send?domain=ddns.example.com&ip=192.168.1.1&ip_type=IPV4
"webhook": {
"enabled": true,
"url": "http://localhost:5000/api/v1/send",
"request_body": "{ \"domain\": \"{{.Domain}}\", \"ip\": \"{{.CurrentIP}}\", \"ip_type\": \"{{.IPType}}\" }"
}对于此示例,当 IP 更改时将触发 webhook,目标 URL http://localhost:5000/api/v1/send 将收到带有请求体的 HTTP POST 请求:
{ "domain": "ddns.example.com", "ip": "192.168.1.1", "ip_type": "IPV4" }大多数 提供商 都支持 IPv6。
要启用 GoDNS 的 IPv6 支持,有两种解决方案可供选择:
-
使用在线服务查找外部 IPv6
为此:
- 将
ip_type设置为IPv6,并确保配置了ipv6_urls - 在您的 DNS 提供商中创建
AAAA记录而不是A记录
配置示例
{ "domains": [ { "domain_name": "example.com", "sub_domains": ["ipv6"] } ], "resolver": "2001:4860:4860::8888", "ipv6_urls": ["https://api-ipv6.ip.sb/ip"], "ip_type": "IPv6" } - 将
-
让 GoDNS 查找其运行机器的网络接口的 IPv6(稍后详细说明网络接口 IP 地址)。
为此,只需将
ip_urls和ipv6_urls留空。请注意,网络接口必须配置 IPv6 才能正常工作。
由于某些原因,如果您想获取与网络接口关联的 IP 地址(而不是执行在线查找),您可以在配置文件中这样指定:
"ip_urls": [""],
"ip_interface": "interface-name",将 interface-name 替换为网络接口的名称,例如 Linux 上的 eth0 或 Windows 上的 Local Area Connection。
注意:如果也指定了 ip_urls,它将首先用于执行在线查找,网络接口 IP 将在失败情况下用作后备。
您可以通过在配置文件中指定 SOCKS5 代理 来使所有远程调用通过该代理:
"socks5_proxy": "127.0.0.1:7070"
"use_proxy": true如果您想从 Mikrotik RouterOS 设备获取公共 IP,您可以使用以下配置:
"mikrotik": {
"enabled": false,
"server": "http://192.168.88.1",
"username": "admin",
"password": "password",
"interface": "pppoe-out"
}要显示调试信息,将 debug_info 设置为 true 以启用此功能。默认情况下,调试信息被禁用。
"debug_info": true,GoDNS 支持通过简单的轮询算法从多个 URL 获取公共 IP。如果第一个 URL 失败,它将尝试下一个,直到成功。以下是配置示例:
"ip_urls": [
"https://api.ipify.org",
"https://myip.biturl.top",
"https://api-ipv4.ip.sb/ip"
],从版本 3.1.0 开始,GoDNS 提供了一个 Web 面板来管理配置和监控域名状态。Web UI 默认是禁用的。要启用它,只需在配置文件中启用 web_panel。
"web_panel": {
"enabled": true,
"addr": "0.0.0.0:9000",
"username": "admin",
"password": "123456"
}启用 Web 面板后,您可以访问 http://localhost:9000 来管理配置和监控域名状态。
有几种运行 GoDNS 的方式。
注意:确保在配置文件中设置 run_once 参数,这样程序将在首次运行后退出(默认值为 false)。
它可以添加到 cron 或附加到系统上的其他事件。
{
"...": "...",
"run_once": true
}然后运行
./godnsnohup ./godns &注意:当程序停止时,它不会重新启动。
-
首先安装
upstart(如果尚未可用) -
将
./config/upstart/godns.conf复制到/etc/init(并根据需要调整) -
启动服务:
sudo start godns
-
首先安装
systemd(如果尚未可用) -
将
./config/systemd/godns.service复制到/lib/systemd/system(并根据需要调整) -
启动服务:
sudo systemctl enable godns sudo systemctl start godns
procd 是 OpenWRT 上的 init 系统。如果您想在 OpenWRT 和 procd 上将 godns 用作服务:
-
将
./config/procd/godns复制到/etc/init.d(并根据需要调整) -
启动服务(需要 root 权限):
service godns enable service godns start
可用的 docker 注册表:
访问 https://hub.docker.com/r/timothyye/godns 获取最新的 docker 镜像。-p 9000:9000 选项暴露 Web 面板。
使用 /path/to/config.json 作为您的本地配置文件,运行:
docker run \
-d --name godns --restart=always \
-v /path/to/config.json:/config.json \
-p 9000:9000 \
timothyye/godns:latest要使用 YAML 配置文件运行:
docker run \
-d --name godns \
-e CONFIG=/config.yaml \
--restart=always \
-v /path/to/config.yaml:/config.yaml \
-p 9000:9000 \
timothyye/godns:latest-
下载最新版本的 NSSM
-
在管理员提示符中,从下载 NSSM 的文件夹(例如
C:\Downloads\nssm\win64)运行:nssm install YOURSERVICENAME -
按照界面配置服务。在"Application"选项卡中只需指明
godns.exe文件的位置。您还可以选择在"Details"选项卡上定义描述,并在"I/O"选项卡上定义日志文件。点击"Install service"按钮完成。 -
该服务现在将与 Windows 一起启动。
注意:您可以通过运行以下命令卸载服务:
nssm remove YOURSERVICENAME
欢迎贡献!请随时提交 Pull Request。
要求:
- Bun
1.3.11或更高版本 - Go
1.17或更高版本
前端项目使用 Next.js 和 daisyUI 构建。要启动开发环境,运行:
cd web
bun install
bun run dev要构建前端,运行:
cd web
bun run build要运行前端,运行:
cd web
bun run start
