IPV6折腾篇

前言

什么是IPV6

IPv6 是 Internet 协议(IP)的下一代标准,也称为 IPv6 协议。它是由互联网工程任务组(IETF)设计的用于替代现行的 IPv4 协议的下一代 IP 协议。IPv6 的地址长度为 128 位,相比 IPv4 的 32 位地址长度,IPv6 可以提供更多的地址资源,可以满足未来互联网连接的需求。除此之外,IPv6 还增强了安全性、流媒体传输、移动性等方面的支持。IPv6 的普及对于互联网的发展和创新有着重要的意义。

为什么要用IPV6

IPv6 是 IPv4 的下一代标准,有着以下几个方面的优势:

  • 地址资源丰富:IPv6 使用 128 位地址长度,相比 IPv4 的 32 位地址长度,IPv6 可以提供更多的地址资源,可以满足未来互联网连接的需求。
  • 增强安全性:IPv6 支持更多的安全机制,例如地址隐藏、地址自动配置、隧道技术等,可以提高网络的安全性。
  • 优化网络拓扑:IPv6 支持邻居发现协议,可以轻松地建立和维护邻居关系,可以更方便地实现分布式网络拓扑结构。
  • 流媒体传输:IPv6 对流媒体传输进行了优化,支持 QoS(服务质量) 机制,可以保证流媒体传输的质量。
  • 移动性:IPv6 支持移动 IPv6 协议 (MIPv6),可以实现移动设备的无缝漫游,而 IPv4 的移动性则需要使用漫游协议来实现。

总结起来,IPv6 的使用可以提高网络的性能、安全性和可扩展性,满足未来互联网连接的需求,对于互联网的发展和创新有着重要的意义。

食用

食用准备

虽然现在工信部在推IPV6,但是很多地方还没接入IPV6,所以首先我们要确定自己是否有IPV6
访问IPV6测试


如果出现你的公网IPV6地址,那么就可以进行下一步

如果你是以上情况,那么恭喜你,你没有IPV6,若想获取就问问你宽带相对应的运营商

开始食用

因为光猫有防火墙,如果你想外网访问,需要配置防火墙,将强度设置到低

Windows 获取IPV6地址

打开终端或CMD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ ipconfig

Windows IP 配置


以太网适配器 以太网:

连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : 240e:398:1e50:
临时 IPv6 地址. . . . . . . . . . : 240e:398:1e50:
本地链接 IPv6 地址. . . . . . . . : fe80::a72:fec8:a5d9:4b10%6
IPv4 地址 . . . . . . . . . . . . : 192.168.1.4
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : fe80::1%6
192.168.1.1

其中IPV6地址就是你的IPV6地址,将其复制到浏览器中,访问即可

IPV6访问与IPV4有些许不同,IPV6访问需要将IPV6填入[]内才能访问

Linux 获取IPV6地址

打开终端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 8a:94:d4:2e:1c:4e brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.1.20/24 metric 100 brd 192.168.1.255 scope global dynamic ens18
valid_lft 595136sec preferred_lft 595136sec
inet6 240e:398:1e50:/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591896sec preferred_lft 604696sec
inet6 fe80::8894:d4ff:fe2e:1c4e/64 scope link
valid_lft forever preferred_lft forever

其中inet6地址就是你的IPV6地址,将其复制到浏览器中,访问即可

添加域名

因为IPV6地址难记,并且家庭宽带的IPV6地址是动态的,所以需要添加域名,这样就可以通过域名访问

因为是动态域名,我这里推荐ddns-go,他可以根据你的IPV6地址自动更新域名,并且支持多域名,多IPV6地址,多IPV4地址

系统中使用

  • Releases 下载并解压 ddns-go
  • [可选] 使用 Homebrew 安装 ddns-go

    1
    brew install ddns-go
  • 双击运行, 如没有找到配置, 程序将自动打开 http://127.0.0.1:9876

  • 安装服务
    • Mac/Linux: sudo ./ddns-go -s install
    • Win(以管理员打开cmd): .\ddns-go.exe -s install
  • 服务卸载
    • Mac/Linux: sudo ./ddns-go -s uninstall
    • Win(以管理员打开cmd): .\ddns-go.exe -s uninstall
  • 支持安装或启动时带参数 -l监听地址 -f同步间隔时间(秒) -cacheTimes间隔N次与服务商比对 -c自定义配置文件路径 -noweb不启动web服务 -skipVerify跳过证书验证 -dns 自定义 DNS 服务器。如:./ddns-go -s install -l :9877 -f 600 -c /Users/name/ddns-go.yaml

安装服务后会自启动,所以直接去浏览器访问localhost:9876即可

Docker中使用

  • 挂载主机目录, 使用docker host模式。可把 /opt/ddns-go 替换为你主机任意目录, 配置文件为隐藏文件

    1
    docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
  • 在浏览器中打开http://主机IP:9876,修改你的配置,成功

  • [可选] 使用 ghcr.io 镜像

    1
    docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
  • [可选] 支持启动带参数 -l监听地址 -f间隔时间(秒)

    1
    docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
  • [可选] 不使用docker host模式

    1
    docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go

使用IPv6

  • 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
  • Windows/Mac:推荐 系统中使用,Windows/Mac桌面版的docker不支持--net=host
  • 群晖:
    • 套件中心下载docker并打开
    • 注册表中搜索ddns-go并下载
    • 映像 -> 选择jeessy/ddns-go -> 启动 -> 高级设置 -> 网络中勾选使用与 Docker Host 相同的网络,高级设置中勾选启动自动重新启动
    • 在浏览器中打开http://群晖IP:9876,修改你的配置,成功
  • Linux的x86或arm架构,推荐使用Docker的--net=host模式。参考 Docker中使用
  • 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6

Webhook

  • 支持webhook, 域名更新成功或不成功时, 会回调填写的URL
  • 支持的变量

    | 变量名 | 说明 |
    | —— | —— |
    | #{ipv4Addr} | 新的IPv4地址 |
    | #{ipv4Result} | IPv4地址更新结果: 未改变 失败 成功|
    | #{ipv4Domains} | IPv4的域名,多个以,分割 |
    | #{ipv6Addr} | 新的IPv6地址 |
    | #{ipv6Result} | IPv6地址更新结果: 未改变 失败 成功|
    | #{ipv6Domains} | IPv6的域名,多个以,分割 |

  • 如 RequestBody 为空则为 GET 请求,否则为 POST 请求

  • Server酱

    1
    https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
  • Bark
    1
    https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
  • 钉钉 - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义 - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了` - URL中输入钉钉给你的 `Webhook地址` - RequestBody中输入
    1
    2
    3
    4
    5
    6
    7
    {
    "msgtype": "markdown",
    "markdown": {
    "title": "你的公网IP变了",
    "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
    }
    }
  • 飞书 - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人 - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了` - URL中输入飞书给你的 `Webhook地址` - RequestBody中输入
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    {
    "msg_type": "post",
    "content": {
    "post": {
    "zh_cn": {
    "title": "你的公网IP变了",
    "content": [
    [
    {
    "tag": "text",
    "text": "IPv4地址:#{ipv4Addr}"
    }
    ],
    [
    {
    "tag": "text",
    "text": "域名更新结果:#{ipv4Result}"
    }
    ]
    ]
    }
    }
    }
    }
  • Telegram [ddns-telegram-bot](https://github.com/WingLim/ddns-telegram-bot)
  • plusplus 推送加 - [获取token](https://www.pushplus.plus/push1.html) - URL中输入 `https://www.pushplus.plus/send` - RequestBody中输入
    1
    2
    3
    4
    5
    {
    "token": "your token",
    "title": "你的公网IP变了",
    "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
    }
  • Discord - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址 - URL中输入Discord复制的 `Webhook网址` - RequestBody中输入
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
    "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
    "embeds": [
    {
    "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
    "color": 15258703,
    "author": {
    "name": "DDNS"
    },
    "footer": {
    "text": "DDNS #{ipv4Result}"
    }
    }
    ]
    }
  • 查看更多Webhook配置参考

Callback

  • 通过自定义回调可支持更多的第三方DNS服务商
  • 配置的域名有几行, 就会回调几次
  • 支持的变量

    | 变量名 | 说明 |
    | —— | —— |
    | #{ip} | 新的IPv4/IPv6地址 |
    | #{domain} | 当前域名 |
    | #{recordType} | 记录类型 AAAAA |
    | #{ttl} | ttl |

  • 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
  • Callback配置参考

因为不可抗力因素,家庭宽带80和443端口被屏蔽了,所以别用这两