DERP介绍
DERP服务器的作用
- 中继节点通信:
- 充当中继站点,解决由于网络地址转换(NAT)或防火墙等原因而导致的节点无法直接通信的问题。
- 节点A和节点B通过DERP服务器建立连接,DERP服务器协助它们获取对方的地址信息,使得它们能够建立直接通信,而无需担心网络边界的限制。
- 控制面交互:
- 处理Headscale网络的控制平面,负责节点注册、身份验证以及密钥交换等操作。
- DERP服务器在节点启动时验证其身份,并分发必要的配置信息和密钥,确保网络的安全性和可控性。它是网络管理的中枢,负责协调节点之间的关系。
DERP服务器的原理
- 中继节点通信原理:
- 节点A和节点B分别与DERP服务器建立连接,将自己的网络信息注册到DERP服务器上。
- DERP服务器根据节点的注册信息,协助节点获取对方的地址信息,使它们能够直接通信,解决了可能存在的NAT或防火墙等网络层面的问题。
- DERP服务器不直接处理数据传输,只在建立连接时提供协助。
- 控制面交互原理:
- DERP服务器通过安全的通信协议(例如TLS)与Headscale节点进行通信。
- 节点在启动时向DERP服务器注册,DERP服务器验证节点的身份,确保只有合法的节点能够参与Headscale网络。
- DERP服务器分发必要的配置信息和密钥,为节点的安全通信提供基础。
这样,DERP服务器通过协助节点间的通信和处理网络控制平面,使得Headscale网络能够在分散的环境中安全、高效地运作。
DERP服务器部署
docker compose 部署
docker-compose.yaml
的配置
version: '3.5'
services:
# DERP服务器
derper:
container_name: derper
image: fredliang/derper
restart: always
ports:
- 3478:3478/udp # UDP端口,用于中继通信
- 56000:19850 # 控制面交互端口
environment:
- DERP_DOMAIN=xxx.xxx.com # 指定DERP服务器的域名
- DERP_ADDR=:19850 # 指定DERP服务器监听的地址和端口
- DERP_VERIFY_CLIENTS=false # 不验证客户端,简化配置
networks:
- internal-network # 使用内部网络
networks:
internal-network:
driver: bridge
说明:
- 服务器需要开放端口:
3478
,类型为UDP DERP_DOMAIN
为derp服务器的域名DERP_VERIFY_CLIENTS=false
为表示不加验证,谁都可以用本DERP服务器,如果不希望公用,需要改为true