IPV6折腾篇

前言

什么是IPV6

IPv6,全称为Internet Protocol Version 6,是互联网工程任务组(IETF)为了解决IPv4地址耗尽问题而设计的一种新型网络协议。作为互联网的基石,IP协议负责为网络上的每一台设备分配一个独一无二的地址,以便数据能够在复杂的网络结构中准确无误地送达目的地。随着互联网的飞速发展,原有的IPv4协议所提供的地址空间已经无法满足日益增长的网络设备数量,因此IPv6的推出成为了一种必然趋势。

IPv6的核心特性在于其扩展的地址长度,从IPv4的32位增加到了128位,这使得新的协议能够提供几乎无限的地址资源。这一巨大的地址空间不仅能够满足现有的个人电脑、智能手机和其他设备的连接需求,还能够为未来的物联网(IoT)设备、智能家居、智能城市等新兴技术提供充足的地址资源。

除了地址资源的丰富性,IPv6还在安全性、流媒体传输和移动性等方面提供了更加先进的支持。在安全性方面,IPv6内置了对IPsec的支持,这是一种用于保护网络通信的安全协议,它能够为数据传输提供加密和认证,从而大大增强了网络的安全性。在流媒体传输方面,IPv6通过改进的QoS机制,能够保证音视频数据在网络中的优先传输,从而提供更加流畅的流媒体体验。在移动性方面,IPv6的移动IPv6(MIPv6)协议使得移动设备在切换网络时能够无缝连接,这对于移动用户来说是一个巨大的改进。

IPv6的普及和部署对于互联网的未来发展至关重要。它不仅解决了地址耗尽的问题,还为互联网的持续创新和扩展提供了新的可能性。随着越来越多的网络服务提供商、企业和设备制造商开始支持IPv6,我们可以预见一个更加广阔、安全、高效的互联网未来。

为什么要用IPV6

IPv6,作为互联网协议(IP)的第六版,被设计为IPv4的继任者,以应对当今网络世界所面临的诸多挑战。IPv6的核心优势在于其几乎无限的地址空间,这为互联网的持续增长提供了坚实的基础。以下是IPv6相较于IPv4的几个显著优势的详细阐述:

  1. 地址资源的丰富性:IPv6采用128位的地址长度,这使得它可以提供数量惊人的网络地址,远远超过了IPv4的32位地址所能提供的数量。具体来说,IPv6能够提供大约3.4×10^38个独特的网络地址,这个数字如此庞大,以至于可以为地球上的每一粒沙子分配一个IP地址,从而彻底解决了IPv4地址耗尽的问题。
  2. 增强的安全性:IPv6在设计之初就内置了安全性考虑,支持IPsec(Internet Protocol Security)协议,这是一套用于在互联网协议网络上进行安全通信的标准框架。IPsec可以为IPv6提供端到端的加密和数据完整性保障,这在IPv4中通常是作为可选的附加功能实现的。此外,IPv6的地址自动配置功能也能减少对DNS的依赖,从而降低了某些类型的网络攻击风险。
  3. 网络拓扑的优化:IPv6通过邻居发现协议(NDP)简化了网络设备之间的通信过程。NDP取代了IPv4中的地址解析协议(ARP),使得设备能够更高效地发现和维持网络中的邻居关系,从而优化了网络拓扑结构和数据传输路径。
  4. 流媒体传输的优化:IPv6对流媒体传输的支持进行了改进,特别是在支持QoS(Quality of Service)方面。QoS允许网络管理员为特定的流量类型分配带宽和优先级,确保关键应用(如视频会议或实时流媒体)的网络传输质量,这在日益增长的互联网应用中尤为重要。
  5. 移动性的支持:IPv6原生支持移动IPv6(MIPv6)协议,这使得移动设备在切换网络时能够无缝地保持连接,无需重新配置网络设置。这对于智能手机、平板电脑和其他移动设备用户来说是一个巨大的便利,因为它们可以在不同的网络之间移动而不会丢失连接。

综上所述,IPv6不仅提升了网络的性能、安全性和可扩展性,还为互联网的未来发展奠定了坚实的基础。随着物联网(IoT)设备的激增和互联网用户数量的不断增长,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端口被屏蔽了,所以别用这两