10 KiB
10 KiB
derp(Docker安装):
#Docker容器一键化启动
#默认开启tcp端口33445 udp端口3478
docker run --restart always \
--name derper1 \
-p 33445:33445 \
-p 3478:3478/udp \
-v /shumengya/ssl/derp1/:/app/certs \
-e DERP_CERT_MODE=manual \
-e DERP_ADDR=:33445 \
-e DERP_DOMAIN=derp1.shumengya.top \
-e DERP_CERT_FILE=/app/certs/derp1.shumengya.top.crt \
-e DERP_KEY_FILE=/app/certs/derp1.shumengya.top.key \
-d ghcr.io/yangchuansheng/derper:latest
docker run --restart always \
--name derper2 \
-p 33445:33445 \
-p 3478:3478/udp \
-v /shumengya/ssl/derp2/:/app/certs \
-e DERP_CERT_MODE=manual \
-e DERP_ADDR=:33445 \
-e DERP_DOMAIN=derp2.shumengya.top \
-e DERP_CERT_FILE=/app/certs/derp2.shumengya.top.crt \
-e DERP_KEY_FILE=/app/certs/derp2.shumengya.top.key \
-d ghcr.io/yangchuansheng/derper:latest
docker run --restart always \
--name derper3 \
-p 33445:33445 \
-p 3478:3478/udp \
-v /shumengya/ssl/derp3/:/app/certs \
-e DERP_CERT_MODE=manual \
-e DERP_ADDR=:33445 \
-e DERP_DOMAIN=derp3.shumengya.top \
-e DERP_CERT_FILE=/app/certs/derp3.shumengya.top.crt \
-e DERP_KEY_FILE=/app/certs/derp3.shumengya.top.key \
-d ghcr.io/yangchuansheng/derper:latest
#默认使用Let's Encrypt签发ssl证书
#默认需要关闭nginx占用80端口来签发证书
curl -s https://get.acme.sh | sh
source ~/.bashrc
acme.sh --issue --standalone -d 你的域名
#安装依赖
apt update && apt install -y socat
yum install -y socat
dnf install -y socat
acme.sh --register-account -m 你的邮箱地址
headscale(直接部署systemctl运行):
headscale默认放行:9090~9092 和50443
配置一个域名: headscale.shumengya.top 下载headscale:https://github.com/juanfont/headscale 下载headscale-ui:https://github.com/juanfont/headscale
新建文件夹(用来放相关文件): mkdir -p shumengya/headscale
安装headscale: dpkg -i headscale_0.26.1_linux_amd64.deb
修改headscale配置
---
# headscale 会按照以下顺序查找名为 `config.yaml` (或 `config.json`) 的配置文件:
#
# - `/etc/headscale`
# - `~/.headscale`
# - 当前工作目录
# 客户端将要连接的 URL。
# 通常应为一个域名,例如:
#
# https://myheadscale.example.com:443
#
server_url: http://127.0.0.1:9091
# 服务器监听/绑定的地址
#
# 生产环境建议:
listen_addr: 0.0.0.0:9092
#listen_addr: 127.0.0.1:8080
# /metrics 和 /debug 的监听地址,你可能希望
# 将此端点限制在内网
metrics_listen_addr: 127.0.0.1:9090
# gRPC 的监听地址。
# gRPC 用于通过 CLI 远程控制 headscale 服务器
# 注意:只有在使用有效证书时,远程访问才可用。
#
# 生产环境建议:
grpc_listen_addr: 0.0.0.0:50443
#grpc_listen_addr: 127.0.0.1:50443
# 是否允许 gRPC 管理接口以 **不安全** 模式运行。
# 不推荐启用,因为流量将不加密。只有在你完全理解风险时才启用。
grpc_allow_insecure: false
# Noise 部分包含 TS2021 Noise 协议的特定配置
noise:
# Noise 私钥用于在 headscale 和 Tailscale 客户端之间
# 使用新的基于 Noise 的协议加密流量。缺少的密钥将会自动生成。
private_key_path: /var/lib/headscale/noise_private.key
# 为 tailnet 分配地址的 IP 前缀列表。
# 每个前缀由 IPv4 或 IPv6 地址 + 前缀长度组成,以斜杠分隔。
# 必须在 Tailscale 客户端支持的范围内
# 即 100.64.0.0/10 和 fd7a:115c:a1e0::/48 的子网。
# 否则会导致异常问题。
prefixes:
v4: 100.64.0.0/10
#v6: fd7a:115c:a1e0::/48
# 节点 IP 分配策略,可选:
# - sequential(默认):按顺序分配下一个可用 IP
# - random:使用伪随机生成器分配可用 IP
allocation: sequential
# DERP 是 Tailscale 在无法建立直连时使用的中继系统。
# https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp
#
# headscale 需要一个 DERP 服务器列表供客户端使用。
derp:
server:
# 启用后,将运行内置 DERP 服务器并合并到 DERP 配置中
# 上面的 server_url 必须使用 https,DERP 需要 TLS
enabled: false
# 内置 DERP 服务器的区域 ID。
# 如果与外部配置的区域 ID 冲突,则本地 DERP 优先。
region_id: 999
# 区域代码和名称会在 Tailscale UI 中显示
region_code: "headscale"
region_name: "Headscale Embedded DERP"
# 在指定地址上监听 UDP 端口以支持 STUN 连接(帮助 NAT 穿透)。
# 如果启用内置 DERP,必须定义 stun_listen_addr。
#
# 更多详情可参考:https://tailscale.com/blog/how-tailscale-works/
stun_listen_addr: "0.0.0.0:3478"
# 用于加密 headscale DERP 与 Tailscale 客户端之间流量的私钥。
# 缺少时会自动生成。
private_key_path: /var/lib/headscale/derp_server_private.key
# 此标志用于控制是否自动将内置 DERP 写入 DERP map。
# 若设为 false,则需通过 DERP.paths 手动配置。
automatically_add_embedded_derp_region: true
# 为了更稳定的连接(特别是 Exit-Node + DNS 不可用时),
# 可以选择性地将公网 IPv4/IPv6 地址写入 Derp-Map:
ipv4: 1.2.3.4
ipv6: 2001:db8::1
# 外部可用的 DERP map 列表(JSON 格式)
urls:
# - https://controlplane.tailscale.com/derpmap/default
#- https://你的域名/web/derp.json
# 本地可用的 DERP map 文件(YAML 格式)
#
# 对于自建 DERP 服务器很有用:
# https://tailscale.com/kb/1118/custom-derp-servers/
#
# paths:
# - /etc/headscale/derp-example.yaml
paths: []
# 若启用,将定期刷新上述 DERP 源并更新 derpmap
auto_update_enabled: true
# 检查 DERP 更新的间隔
update_frequency: 24h
# 禁用启动时自动检查 headscale 更新
disable_check_updates: false
# 非活跃临时节点在多久后被删除?
ephemeral_node_inactivity_timeout: 30m
database:
# 数据库类型,可选:sqlite, postgres
# 注意:强烈不推荐使用 Postgres,仅为遗留原因保留。
# 所有新开发和优化都基于 SQLite。
type: sqlite
# 启用调试模式。需要 log.level 设置为 "debug" 或 "trace"。
debug: false
# GORM 配置
gorm:
# 启用预编译语句。
prepare_stmt: true
# 启用参数化查询。
parameterized_queries: true
# 跳过 “record not found” 错误日志。
skip_err_record_not_found: true
# 慢查询阈值(毫秒)
slow_threshold: 1000
# SQLite 配置
sqlite:
path: /var/lib/headscale/db.sqlite
# 启用 WAL 模式。推荐生产环境启用。
# https://www.sqlite.org/wal.html
write_ahead_log: true
# WAL 文件在达到多少帧时自动 checkpoint。
# 设为 0 可禁用自动 checkpoint。
wal_autocheckpoint: 1000
# # Postgres 配置(不推荐,仅遗留支持)
# postgres:
# # 使用 Unix socket 时,设置 host 为 socket 路径,port 留空。
# host: localhost
# port: 5432
# name: headscale
# user: foo
# pass: bar
# max_open_conns: 10
# max_idle_conns: 10
# conn_max_idle_time_secs: 3600
#
# # SSL 配置,参考官方文档
# ssl: false
### TLS 配置
#
## Let's Encrypt / ACME
#
# headscale 支持使用 Let's Encrypt 自动申请 TLS 证书
#
# ACME 目录 URL
acme_url: https://acme-v02.api.letsencrypt.org/directory
# ACME 注册邮箱
acme_email: ""
# 要申请 TLS 证书的域名
tls_letsencrypt_hostname: ""
# 存储证书和元数据的路径
# 生产环境建议:
tls_letsencrypt_cache_dir: /var/lib/headscale/cache
# ACME 挑战类型,目前支持:
# HTTP-01 或 TLS-ALPN-01
# 详见 docs/ref/tls.md
tls_letsencrypt_challenge_type: HTTP-01
# 使用 HTTP-01 时,letsencrypt 必须监听:
# :http = 80 端口
tls_letsencrypt_listen: ":http"
## 使用已有证书
tls_cert_path: ""
tls_key_path: ""
log:
# 日志输出格式:text 或 json
format: text
# 日志级别:info, debug, trace
level: info
## 策略
# headscale 支持 Tailscale 的 ACL 策略
# 文档:https://tailscale.com/kb/1018/acls/
policy:
# 模式:file 或 database
mode: file
# 若为 file 模式,指定 HuJSON 文件路径
path: ""
## DNS
#
# headscale 支持 Tailscale 的 DNS 配置和 MagicDNS。
# 文档:
# https://tailscale.com/kb/1054/dns/
# https://tailscale.com/kb/1081/magicdns/
# https://tailscale.com/blog/2021-09-private-dns-with-magicdns/
#
# 注意:要使 DNS 配置生效,客户端必须启用 `--accept-dns=true`。
# 否则将不生效。
dns:
# 是否启用 MagicDNS
magic_dns: true
# MagicDNS 的基础域名,必须与 server_url 域名不同。
base_domain: example.com
# 是否覆盖本地 DNS 设置
override_local_dns: false
# 全局 DNS 服务器列表
nameservers:
global:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
# NextDNS 示例
# - https://dns.nextdns.io/abc123
# Split DNS 示例(为特定域使用不同 DNS)
split: {}
# 自定义搜索域
search_domains: []
# 额外 DNS 记录(支持 A/AAAA)
extra_records: []
# - name: "grafana.myvpn.example.com"
# type: "A"
# value: "100.64.0.3"
# CLI 使用的 Unix socket(无认证)
# 生产环境建议自定义
unix_socket: /var/run/headscale/headscale.sock
unix_socket_permission: "0770"
# OpenID Connect 配置(实验功能)
# oidc:
# only_start_if_oidc_is_available: true
# issuer: "https://your-oidc.issuer.com/path"
# client_id: "your-oidc-client-id"
# client_secret: "your-oidc-client-secret"
# client_secret_path: "${CREDENTIALS_DIRECTORY}/oidc_client_secret"
# expiry: 180d
# use_expiry_from_token: false
# scope: ["openid", "profile", "email", "custom"]
# extra_params:
# domain_hint: example.com
# allowed_domains:
# - example.com
# allowed_groups:
# - /headscale
# allowed_users:
# - alice@example.com
# pkce:
# enabled: false
# method: S256
# Logtail 配置
# Logtail 是 Tailscale 的日志与审计系统
logtail:
# 启用后,客户端将日志发送到 Tailscale 服务器
enabled: false
# 启用后,设备将优先使用随机端口进行 WireGuard 流量
# 以避免某些防火墙兼容性问题。
# 详见:https://tailscale.com/kb/1181/firewalls/
randomize_client_port: false
设置反向代理: 公网域名->127.0.0.1:9092
location /web {
index index.html;
alias /shumengya/headscale/web;
}