# headscale 内网穿透 Tailscale 客户端开源,服务端社区有第三方开源版本Headscale * 服务端: ``` # 下载 wget https://github.com/juanfont/headscale/releases/download/v0.16.4/headscale_0.16.4_linux_amd64 -O /usr/local/bin/headscale # 增加可执行权限 chmod +x /usr/local/bin/headscale # 配置目录 mkdir -p /etc/headscale # 创建用户 useradd \ --create-home \ --home-dir /var/lib/headscale/ \ --system \ --user-group \ --shell /usr/sbin/nologin \ headscale ``` ``` # 创建 SystemD 配置文件 # /lib/systemd/system/headscale.service [Unit] Description=headscale controller After=syslog.target After=network.target [Service] Type=simple User=headscale Group=headscale ExecStart=/usr/local/bin/headscale serve Restart=always RestartSec=5 # Optional security enhancements NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/var/lib/headscale /var/run/headscale AmbientCapabilities=CAP_NET_BIND_SERVICE RuntimeDirectory=headscale [Install] WantedBy=multi-user.target ``` 配置 /etc/headscale/config.yaml ``` --- # Headscale 服务器的访问地址 # # 这个地址是告诉客户端需要访问的地址, 即使你需要在跑在 # 负载均衡器之后这个地址也必须写成负载均衡器的访问地址 server_url: https://your.domain.com # Headscale 实际监听的地址 listen_addr: 0.0.0.0:8080 # 监控地址 metrics_listen_addr: 127.0.0.1:9090 # grpc 监听地址 grpc_listen_addr: 0.0.0.0:50443 # 是否允许不安全的 grpc 连接(非 TLS) grpc_allow_insecure: false # 客户端分配的内网网段 ip_prefixes: - fd7a:115c:a1e0::/48 - 100.64.0.0/10 # 中继服务器相关配置 derp: server: # 关闭内嵌的 derper 中继服务(可能不安全, 还没去看代码) enabled: false # 下发给客户端的中继服务器列表(默认走官方的中继节点) urls: - https://controlplane.tailscale.com/derpmap/default # 可以在本地通过 yaml 配置定义自己的中继接待你 paths: [] # SQLite config db_type: sqlite3 db_path: /var/lib/headscale/db.sqlite # 使用自动签发证书是的域名 tls_letsencrypt_hostname: "" # 使用自定义证书时的证书路径 tls_cert_path: "" tls_key_path: "" # 是否让客户端使用随机端口, 默认使用 41641/UDP randomize_client_port: false ``` ``` # 开机自启动 并 立即启动 systemctl enable headscale --now ``` * 客户端 ``` curl -fsSL https://tailscale.com/install.sh | sh ```