NernBrot
前言介绍
此教程适用于新手开服/进阶开服以及资深经理的开服玩家使用不管什么层面,此教程贴涉及到的技术对你一定有收获涉及到的网络技术都比较基层和硬核但是看完教程一定会或多或少的对网络有一定的了解
其实该教程整篇大多数都在讲解理论通信,如果想要直接部署,请直接下滑到部署操作网络技术
首先如果你想要通信,那么一定避不开的就是通信的原理网络之间是如何通信的,计算机与计算机,手机与计算机,手机与手机,这些设备之间使用的是不通用的系统为什么,这些设备可以进行通信,因为有网络,网络使得这些设备可以互通

首先提一个IP地址192.168.X.X,这个地址可能很多人都很熟悉,这也许是你进路由器管理后台的一个登入地址
也许是你访问局域网中的一个设备的IP地址,那么有些人就有疑惑了,什么是局域网呢
你要知道局域网首先就要知道什么是网,很简单,由很多个点连接成的线织成的网,就叫做网
那么什么是局域网,顾名思义其实就是一个局部地区的网,局域网(Local Area Network,简称LAN)
是指在相对较小的地理范围内建立起来的、用于数据通信的计算机网络
这个范围可以是办公室、学校、家庭、企业内部等相对较小的区域

局域网通常由一组相互连接的计算机和网络设备组成
这些设备通过通信线缆(如以太网电缆)或者无线通信技术(如Wi-Fi)相互连接
局域网的目的是使连接在这个网络上的设备能够方便、快速地共享资源,如文件、打印机、互联网连接等。

其实在你的家中就是一个小型的局域网,由无线设备以及有限设备连接到路由器
在路由器中,其实就是很多的点,通过通信线缆(如以太网电缆)
或者是无线的方式连接到一个设备介质中,在这个介质中的设备直接可以相互访问

那么为什么路由器之间的直连设备(包括有线连接和无线连接)可以通信呢
因为路由器的前身就是一个三层交换机,但是比交换机多了一个最重要的功能就是NAT
什么是NAT,这个下面会详细讲解,刚刚说的路由器=三层交换机+NAT功能,路由器是一种网络设备
用于在计算机网络中传递数据包,路由器在网络中扮演着至关重要的角色,它不仅连接了不同的网络
还提供了许多功能来确保网络的高效运行和安全性。在家庭和企业网络中
路由器通常是构建网络基础设施的核心设备

下方是一个千兆交换机的图片


下方是一个集线器的图片
可以看到,集线器和路由器外观以及接口十分相似
那么什么是交换机,为什么叫三层交换机呢,首先先提到一个交换机的前身
集线器,那么什么是集线器,他又是干什么的呢,集线器,一般的双绞线传输距离都是有限的
可以通过集线器的连接,将信号整形以及放大,集线器工作在OSI参考模型的物理层他传输的是帧
可以对互联的局域设备实现通信,而交换机与集线器有什么区别呢,集线器(Hub)是一种计算机网络设备
用于在局域网中连接多个设备,它在物理层工作,将所有连接的设备视为一个共享的通信介质
它通过广播方式将接收到的数据包发送到所有连接的设备,而不管数据包的目标是哪个设备
所以他与交换机的区别有  
工作层次  [集线器工作在物理层,主要负责信号的放大和转发,交换机工作在数据链路层
能够理解和操作数据帧。]  
数据转发方式   [集线器采用广播方式,将数据包发送到所有连接的端口,交换机采用逐端
口学习和转发,只将数据包发送到目标设备所在的端口,提高网络效率。]  
碰撞与冲突处理     [集线器没有处理碰撞的能力,因此在连接的设备较多时容易发生碰撞交换机能够在每个端口之间建立虚拟通道,避免碰撞,支持全双工通信,每个端口一个VLAN避免广播风暴的产生]  性能    [集线器的性能相对较低,因为它将所有数据广播到所有端口,可能导致网络拥塞,交换机具有更好的性能,因为它能够智能地选择目标端口进行数据转发,减少了冗余传输。]  网络结构   [集线器适用于小型网络,但随着网络规模的增大,碰撞和冲突可能会显著影响性能,交换机适用于中等到大型网络,能够提供更高的性能和更好的网络管理能力。] 总体而言,交换机相对于集线器在性能、碰撞处理和网络管理方面具有优势,因此在现代网络中集线器逐渐被交换机取代

为什么交换机还分层呢,交换机分层的设计是为了适应不同网络需求和提供更灵活的功能。在网络中,二层交换机和三层交换机分别在OSI模型的数据链路层和网络层工作拥有不同的功能和适用场景,二层交换机主要在数据链路层工作,负责通过学习目标设备的MAC地址将数据帧从一个端口转发到目标端口,实现局域网内设备之间的通信,适用于构建简单的局域网提供高速的局域网内部通信。通常不涉及路由功能,因此在处理速度上更快,适合处理大量本地流量多用于功能设定为接入层交换机,三层交换机在数据链路层和网络层都有操作,除了二层交换功能外还具备路由功能,能够根据网络层的IP地址进行数据包转发。因此,三层交换机可以连接不同子网并实现跨子网的通信,适用于需要进行不同子网之间的数据通信,提供更多网络层的功能通常用于中型到大型企业网络或需要实现复杂网络拓扑的环境,交换机的分层设计是为了满足不同网络需求并在不同层次上提供特定的功能,从而更好地支持不同规模和类型的网络,路由器的LAN口与交换机的LAN口是一样的功能一样的工作模式,可以进行局域网的互联互联的设备(通过网线或者是连接同一个WIFI)的设备就是一个局域网



下方为一个三层交换机图片



下方为一个二层交换机图片

可以看到外观接口也是很相似


刚刚解释了什么是局域网,以及局域网的搭建,也提到了局域网的设备全部都可以互联如果你在自己家,或者是学校的机房或者是网吧,等很多个设备连接到一个网络的设备均可以实现互联简单的说,你在自己电脑上开启一个我的世界服务器,那么自己以及另一台电脑均可以加入这个服务器中这里就扩展一点,数据的发送和接受,当需要发送数据时,首先确定源IP和端口以及目的IP和端口我们加入服务器输入IP和端口就是这里提到的目的IP而源IP和端口就是本机的IP和通信端口这里需要提到IP是如何通信的,首先IP分为两种,一种是私有IP,另一种是公网IP我们广泛使用的IP协议是TPC/IP协议集中IPv4,而IPv4是2进制的32位数通过子网掩码的划分,最多可以划分70多亿个合法IP但是当今这个时代,人口基增如果想要通信必须是一个合法IP对合法IP在通信过程中私有IP只能在局域网中进行通信在网络通信中私有IP是不合法的,所以如果想要通信,在早期是一个连网设备一个公网IP地址,但是慢慢的网络开始发达现在大部分人都拥有不止一个可以连网的设备电脑,手机,电视,都需要连网有些甚至夸张的,冰箱都可以连网一个人就好多个连网设备那么全球80多亿人肯定是不够的所以在2014年IPv4就告急不够用使用了一个NAT技术,他可以将你的不合法的需要进行以太网通信的私有IP通过转换变成一个在以太网中合法的公网IP,现在绝大部分家庭中的局域网的设备通信以太网就都是通过NAPT你给运营商交了网费,运营商给你开通了一个公网IP,但是你家里不止一个需要上网的设备一个公网IP是怎么分呢,到底分给谁呢,这时候NAPT解决了这个问题它可以将一个局域网中的一个需要连网通信的设备转换成运营商给你开通的公网IP并且后面加上了一个端口,比如说PC1需要上网,你交了一份网费运营商给你分配了一个公网IP为1.2.0.1,当你的PC1上网通信时,可以自动转换成1.2.0.1:1001合法端口的范围是1024~65535 这个数量是相当的多的,而且是一个公网就可以给这么多私有的局域网设备转换但是只能是仅仅你去与别的公网的IP通信,无法是公网IP的人或者是不在一个局域网内的其他设备与你通信这也就是你在你自己的电脑上架设了个服务器,如果你没有公网IP,那么必须要通过映射的方式才能加入你的服务器,否则是无法加入服务器的


下方是两台内网为192.168.0.2-0.3的计算机通过路由器的NAT转换成为1.2.0.1公网合法的IP



部署操作

讲完了理论的通信,那么开始将实际的通信,在上面讲到了局域网中的设备都是私有IP,上面讲道理,私有IP是无法与没有直连交换介质设备的设备通信的大白话说,你住在上海,你在自己的电脑上开启了一个我的世界服务器,而你的一个在北京的朋友如果你没有公网IP或者是没有做端口映射,是无法进行通信的,这个时候,我们有两种方法第一种就是去用FRP映射技术,来给你的电脑端口程序进行私网IP映射成为公网IP具体的软件和收费标准结合不同的FRP软件,可以自行搜索我的世界FRP或者是FPR不建议家里云使用FRP,这是没办法的办法能申请公网IP就尽量申请第二种就是去网络运营商ICP电信移动联通申请一个公网IP其中移动的最难申请,而电信相对来说比较开放,只需要转人工说自家网络需要开通公网IP就好了具体的方法可以自行百度搜索各种相关的话术,当你申请成功后公网IP就可以直接的让你的朋友与你通信了但是申请的公网IP大概率或者是一个动态的公网IP,什么是动态的呢,也就是在当时开机后你将自动获得一个合法的公网IP,在你电脑使用的这段时间,这个IP一直都是你的,没人会抢走但是,一点你的电脑关闭,这个IP地址将可能被另一个动态公网IP的用户使用,所以,电脑关机或者是路由器重启,家庭的停电,是难免的,但是你的IP地址一直不是固定的这没办法进行宣传,也很难作为家里云开服务器,这个时候怎么办呢可以运用一种技术DDNS(动态域名解析服务器),提到DDNS那么就不得不提DNS(域名解析服务器)那么这个域名服务器是个什么东西呢,在之前我的帖子中也讲过点击这里简单的一讲就是将数字的IP地址记录成为简短自定义高自由度的IP地址比如说baidu.com他就是使用的DNS将数字IP记录成了baidu这个域名,你可以花费几块钱或者是几十块钱,在阿里云购买一个域名,来当作你服务器的IP来使用,买了域名就可以记录了把IP地址记录成为你自己的域名,但是仔细一想,这个动态IP的地址会自动变换啊
每次重启,难道我就要去阿里云重新记录吗,这时候就可以用到前面提到的DDNS这里个人使用下来认为DDNS-GO这个程序比较好用方便下面是使用阿里云的域名结合DDNS-GO完成的DDNS
首先在开始之前,你需要准备一个域名,DNS服务商如下









这里教程以阿里云为例子,其他服务商应该大差不差

首先准备好已经购买好并且完成实名认证,在Whois中可以查询到的域名一个

以阿里云为例子,创建自己的AccessKeyID 以及AccessKey Secret 阿里云官方教程链接













接下来开始填写IPv4的获取方式,以及将自动获取到的IP记录成为指定的域名









按照图片示范在第一个选项框 勾选 是否启用
在 获取IP方式 选择按钮中,这里建议选择第一个通过连网获取IP,网卡获取以及命令获取都是获取的局域网IP
最后一个输入框 Domains 这个是填写把IP记录成什么域名,需要注意的是,这个域名必须是你自己购买的比如你自己购买了一个顶级域名xyi5.top 你想把这个顶级域名作为DDNS,那么这里只需要填写顶级域名
如果你想记录二级域名,也是可以的,只需要正常填写二级域名就好了,比如www.xyi5.top
填写完成后保存,默认就会按照每5秒检测一次IP,并且对比DNS记录的IP然后重新记录

那么做完这一步,就离成功还差最后一步,设置DDNS的开机自启动 安装服务  - Mac/Linux: `sudo ./ddns-go -s install`  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
官方DDNS-GO教程文档# ddns-go

GitHub release GitHub release downloads Go version

自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。

- 特性
- 系统中使用
- Docker中使用
- 使用IPv6
- Webhook
- Callback
- 界面
- 开发&自行编译

## 特性

- 支持Mac、Windows、Linux系统,支持ARM、x86架构
- 支持的域名服务商 `Alidns(阿里云)` `Dnspod(腾讯云)` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Google Domain`
- 支持接口/网卡/命令获取IP
- 支持以服务的方式运行
- 默认间隔5分钟同步一次
- 支持同时配置多个DNS服务商
- 支持多个域名同时解析
- 支持多级域名
- 网页中配置,简单又方便,默认勾选`禁止从公网访问`
- 网页中方便快速查看最近50条日志
- 支持Webhook通知
- 支持TTL
- 支持部分DNS服务商传递自定义参数,实现地域解析等功能

> [!NOTE]
> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。FAQ

## 系统中使用

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

  ```bash
  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`

> [!NOTE]
> 通过合理的配置 `-f` 和 `-cacheTimes` 可以实现 IP 变化即时触发更新且不会被 DDNS 服务商限流, 例如 `-f 10 -cacheTimes 360` 效果为每 10 秒检查一次本地 IP 变化, 每小时去公网对比一下 IP 变化

## Docker中使用

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

  ```bash
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
  ```

- 在浏览器中打开`http://主机IP:9876`,修改你的配置,成功

- [可选] 使用 `ghcr.io` 镜像

  ```bash
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
  ```

- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)

  ```bash
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
  ```

- [可选] 不使用docker host模式

  ```bash
  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酱

  ```
  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
  ```
- Bark

  ```
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
  ```
  
- 钉钉

  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
  - URL中输入钉钉给你的 `Webhook地址`
  - RequestBody中输入
    ```json
    {
        "msgtype": "markdown",
        "markdown": {
            "title": "你的公网IP变了",
            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
        }
    }
    ```
  
- 飞书

  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
  - URL中输入飞书给你的 `Webhook地址`
  - RequestBody中输入
    ```json
    {
        "msg_type": "post",
        "content": {
            "post": {
                "zh_cn": {
                    "title": "你的公网IP变了",
                    "content": [
                        [
                            {
                                "tag": "text",
                                "text": "IPv4地址:#{ipv4Addr}"
                            }
                        ],
                        [
                            {
                                "tag": "text",
                                "text": "域名更新结果:#{ipv4Result}"
                            }
                        ]
                    ]
                }
            }
        }
    }
    ```
  
- Telegram

  ddns-telegram-bot
  
- plusplus 推送加

  - 获取token
  - URL中输入 `https://www.pushplus.plus/send`
  - RequestBody中输入
    ```json
    {
        "token": "your token",
        "title": "你的公网IP变了",
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
    }
    ```
  
- Discord

  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
  - URL中输入Discord复制的 `Webhook网址`
  - RequestBody中输入
    ```json
    {
        "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}  | 记录类型 `A`或`AAAA` |
  | #{ttl}  | ttl |
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
- Callback配置参考

## 界面

screenshots

## 开发&自行编译

- 如果喜欢从源代码编译自己的版本,可以使用本项目提供的 Makefile 构建
- 使用 `make build` 生成本地编译后的 `ddns-go` 可执行文件
- 使用 `make build_docker_image` 自行编译 Docker 镜像
复制代码


最后
教程耗费了很多的时间和精力教程中相关的技术也是通过计算机网络技术不断地修正最后打磨出这一个教程出来









相关图片引用:

        家用路由器连接宽带上网原理 - 知乎 (zhihu.com)
信锐RS5300-28T-4F安视24口千兆三层交换机_广州铭冠信息科技有限公司(铭冠网安)官网:网络安全,云计算,物联网,信创,国产化软件 (gzmcrown.com)
翰林办公之家——办公用品厂家直销 (officebay.net)

MSR系列路由器NAT连接数限制功能的配置 - 知了社区 (h3c.com)

锐捷 RG-NBS228F-E-P 24口百兆+2千兆 二层网管POE供电企业级交换机 (325999.com)

工业级24口千兆+4万兆三层交换机


以上图片引用如有侵权,联系立删

第一页 上一页 下一页 最后一页