{"id":18,"date":"2026-08-11T15:11:24","date_gmt":"2026-08-11T15:11:24","guid":{"rendered":"http:\/\/localhost:8088\/?p=18"},"modified":"2026-08-11T15:35:57","modified_gmt":"2026-08-11T15:35:57","slug":"headscalederper%e9%83%a8%e7%bd%b2","status":"publish","type":"post","link":"https:\/\/speedtest.lcsh.top\/?p=18","title":{"rendered":"Headscale+Derper\u90e8\u7f72"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Headscale\u548cDerper\u662f\u53ef\u4ee5\u66ff\u4ee3\u4ed8\u8d39Tailscale\u7684\u5f00\u6e90\u65b9\u6848\uff0c\u53ef\u4ee5\u8ba9\u5904\u4e8e\u4e0d\u540c\u7f51\u7edc\u73af\u5883\u4e0b\u7684\u4e0d\u540c\u8bbe\u5907\u901a\u8fc7\u865a\u62df\u5c40\u57df\u7f51\u4e92\u8054\uff1bHeadscale\u8d1f\u8d23\u5ba2\u6237\u7aef\u534f\u8c03\u548c\u6253\u6d1e\uff0cDerper\u8d1f\u8d23\u6253\u6d1e\u4e0d\u901a\u65f6\u4f5c\u4e3a\u4e2d\u7ee7\u8f6c\u53d1\u6d41\u91cf\u3002\u7b80\u4e2d\u793e\u533a\u5bf9\u4e8e\u5efa\u7acbHeadscale\u548cDerper\u7684\u535a\u5ba2\u5f88\u591a\uff0c\u4f46\u662f\u59ff\u52bf\u5404\u4e0d\u76f8\u540c\u5bfc\u81f4\u697c\u4e3b\u7b2c\u4e00\u6b21\u90e8\u7f72\u8e29\u4e86\u5927\u5751\u3002\u5728Gemini\u7684\u5e2e\u52a9\u4e0b\u641e\u597d\u4e86\uff0c\u8fd9\u91cc\u4f5c\u4e3a\u7b14\u8bb0\u8bb0\u5f55\u4e00\u4e0b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.\u65e5\u5e38\u542f\u52a8\u548c\u914d\u7f6e\u8bb0\u5f55<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u542f\u52a8\u547d\u4ee4<\/h3>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>sudo env -u HTTP_PROXY -u HTTPS_PROXY -u http_proxy -u https_proxy tailscale up --login-server &lt;HTTPS_LINK&gt; --authkey &lt;KEY&gt; --accept-routes --accept-dns=false --hostname=&lt;HOSTNAME&gt;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">accept-dns = false\u975e\u5e38\u91cd\u8981\uff0c\u5982\u679c\u63a5\u53d7\u4e86\u5b83\u4f1a\u548c\u4ee3\u7406\u8f6f\u4ef6dns\u8d77\u51b2\u7a81\uff0c\u5bfc\u81f4\u6d4f\u89c8\u5668\u65e0\u6cd5\u6b63\u5e38\u4e0a\u7f51\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-u\u9632\u6b62\u7cfb\u7edf\u4ee3\u7406\u8bbe\u7f6e\u5f71\u54cdtailscale<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6ce8\uff1aiStoreOS\u522b\u901a\u8fc7Luci\u767b\u5f55tailscale\uff08\u5f53\u7136\u5f97\u5148\u901a\u8fc7Luci\u542f\u52a8\u5b83\uff09\uff0c\u56e0\u4e3a\u65e0\u6cd5\u586b\u5199&#8211;accept-dns=false\u4f1a\u5bfc\u81f4\u65ad\u7f51<\/strong>\uff1b\u800c\u4e14Luci\u5b89\u88c5\u7684tailscale\u5ba2\u6237\u7aef\u65e0\u6cd5\u6301\u4e45\u4fdd\u5b58\u79c1\u6709\u670d\u52a1\u5668\u767b\u5f55\u4fe1\u606f\uff0c\u6240\u4ee5\u5efa\u8baeopkg update &amp;&amp; opkg install tailscale\u5b89\u88c5tailscale\u5ba2\u6237\u7aef\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 IP\u5730\u5740<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">100.64.0.1 Armbian<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5176\u5b83\u7701\u7565<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2 \u901a\u8fc7Docker Compose\u90e8\u7f72<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u65b9\u4fbf\u8d77\u89c1\uff0cdocker compose\u653e\u5728\u4e86\/etc\/derp\/\u76ee\u5f55\u4e2d\uff1b\u5982\u679c\u672a\u5b89\u88c5Docker\uff0c\u53ef<code>curl -fsSL https:\/\/get.docker.com -o get-docker.sh &amp;&amp; sudo sh get-docker.sh<\/code>\u5b89\u88c5\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u4f7f\u7528acme.sh\u7533\u8bf7\u548c\u5b89\u88c5\u8bc1\u4e66<\/h3>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>sudo apt update &amp;&amp; sudo apt install -y curl socat cron<\/code><\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>curl https:\/\/get.acme.sh | sh -s email=&lt;Your Email&gt;<\/code><\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>sudo mkdir -p \/etc\/derp\/certs\/&lt;Your Domain&gt;<\/code><\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>acme.sh --issue -d <your domain=\"\"> --standalone<\/your><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u5c31\u7533\u8bf7\u597d\u4e86\u8bc1\u4e66\uff0c\u5b58\u653e\u5728~\/.acme.sh\u4e2d\uff0c\u4e0d\u80fd\u76f4\u63a5\u4f7f\u7528\uff0c\u6240\u4ee5\u8981\u518d\u6b21\u4f7f\u7528acme.sh\u628a\u5b83\u5b89\u88c5\u5230\u5bb9\u5668\u4f7f\u7528\u7684\u76ee\u5f55\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>mkdir -p \/etc\/derp\/certs\/<code>&lt;Your Domain&gt;<\/code>\/<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u5b89\u88c5\u8bc1\u4e66\u3002\u7531\u4e8e\u8981\u7528docker compose\u90e8\u7f72\uff0c\u6240\u4ee5renew\u8bc1\u4e66\u7684\u65f6\u5019\u9644\u52a0\u547d\u4ee4\uff0c\u5728\u5b89\u88c5\u8bc1\u4e66\u65f6\u5c31\u5199\u597d\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code has-blush-light-purple-gradient-background has-background\"><code>~\/.acme.sh\/acme.sh --install-cert -d <span style=\"background-color: initial; font-family: inherit; font-size: inherit; text-align: initial; color: initial;\">&lt;Your Domain&gt;<\/span> \\\n  --key-file       \/etc\/derp\/certs\/<span style=\"background-color: initial; font-family: inherit; font-size: inherit; text-align: initial; color: initial;\">&lt;Your Domain&gt;<\/span>\/<span style=\"background-color: initial; font-family: inherit; font-size: inherit; text-align: initial; color: initial;\">&lt;Your Domain&gt;<\/span>.key \\\n  --fullchain-file \/etc\/derp\/certs\/<span style=\"background-color: initial; font-family: inherit; font-size: inherit; text-align: initial; color: initial;\">&lt;Your Domain&gt;<\/span>\/<span style=\"background-color: initial; font-family: inherit; font-size: inherit; text-align: initial; color: initial;\">&lt;Your Domain&gt;<\/span><your domain=\"\"><your domain=\"\">.crt \\\n  --reloadcmd      \"docker restart derper &amp;&amp; systemctl reload nginx\"<\/your><\/your><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 \u5bb9\u5668\u90e8\u7f72<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>vim \/etc\/derp\/docker-compose.yml<\/code>\u6dfb\u52a0\u5982\u4e0b\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code has-blush-light-purple-gradient-background has-background\"><code>services:\n  headscale:\n    image: headscale\/headscale:latest\n    container_name: headscale\n    restart: unless-stopped\n    volumes:\n      # \u65b9\u4fbf\u8d77\u89c1\u4f7f\u7528\u660e\u786e\u7684\u7edd\u5bf9\u8def\u5f84\n      - \/etc\/derp\/headscale:\/etc\/headscale\n      - \/etc\/derp\/headscale-data:\/var\/lib\/headscale\n    ports:\n      - \"127.0.0.1:8080:8080\"\n    command: serve --config \/etc\/headscale\/config.yaml\n\n\n  derper:\n      image: ghcr.io\/kaaanata\/derper:latest\n      container_name: derper\n      restart: unless-stopped\n      volumes:\n        # \u6302\u8f7d\u4f60\u7684\u57df\u540d\u8bc1\u4e66\u76ee\u5f55\u5230\u5bb9\u5668\u5185\u7684 \/app\/certs\n        # \u5bb9\u5668\u4f1a\u81ea\u52a8\u5728 \/app\/certs \u5bfb\u627e <your domain=\"\">.crt \u548c <your domain=\"\">.key\n        - \/etc\/derp\/certs\/<your domain=\"\">:\/app\/certs\n      ports:\n        - \"8443:8443\/tcp\"\n        - \"3478:3478\/udp\"\n      environment:\n        # \u5fc5\u586b\uff1a\u4f60\u7684 DERP \u57df\u540d\n        - DERP_DOMAIN=<your domain=\"\">\n        # \u6307\u5b9a\u76d1\u542c\u5730\u5740\u4e0e\u7aef\u53e3\uff08\u5339\u914d\u5bbf\u4e3b\u673a\u6620\u5c04\u7684 8443\uff09\n        - DERP_ADDR=:8443\n        # \u7981\u7528 80 \u7aef\u53e3 HTTP \u670d\u52a1\uff08\u9632\u6b62\u4e0e Nginx \u62a2\u5360\u7aef\u53e3\uff09\n        - DERP_HTTP_PORT=-1\n        # \u663e\u5f0f\u4f7f\u7528\u6211\u4eec\u5df2\u7533\u8bf7\u597d\u7684 manual \u8bc1\u4e66\u6a21\u5f0f\n        - DERP_CERT_MODE=manual\n        # \u8bc1\u4e66\u5b58\u653e\u8def\u5f84\n        - DERP_CERT_DIR=\/app\/certs\n        # STUN \u6253\u6d1e\u670d\u52a1\u53ca UDP \u7aef\u53e3\n        - DERP_STUN=true\n        - DERP_STUN_PORT=3478\n        # \u5f00\u542f\u5ba2\u6237\u7aef\u8eab\u4efd\u6821\u9a8c\uff08\u9632\u6b62\u88ab\u4ed6\u4eba\u514d\u8d39\u6ee5\u7528\uff09\uff08\u4e0d\u8fc7\u672c\u8282\u70b9\u5e76\u6ca1\u6709\u516c\u5f00\uff0c\u8eab\u4efd\u8ba4\u8bc1\u5bc6\u94a5\u4e5f\u4e0d\u516c\u5f00\uff0c\u53ef\u4ee5\u653e\u5fc3\u5173\u6389\uff09\n        - DERP_VERIFY_CLIENTS=false<\/your><\/your><\/your><\/your><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\uff0c\u8981\u7ed9headscale\u548cderp\u5199\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>vim \/etc\/derp\/headscale\/config.yaml<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server_url: https:\/\/<your domain=\"\">\nlisten_addr: 0.0.0.0:8080\nmetrics_listen_addr: 0.0.0.0:9090\ngrpc_listen_addr: 0.0.0.0:50443\ngrpc_allow_insecure: true\n\nprivate_key_path: \/var\/lib\/headscale\/private.key\nnoise:\n  private_key_path: \/var\/lib\/headscale\/noise_private.key\n\ndatabase:\n  type: sqlite3\n  sqlite:\n    path: \/var\/lib\/headscale\/db.sqlite\n\nprefixes:\n  v4: 100.64.0.0\/10\n  v6: fd7a:115c:a1e0::\/48\n\ndns:\n  magic_dns: true\n  base_domain: lcsh\n  nameservers:\n    global:\n      -8.8.8.8\n      -1.1.1.1\n  override_local_dns: true\n\nnode:\n  ephemeral:\n    inactivity_timeout: 30m\n\nderp:\n  server:\n    enabled: false\n  urls: &#91;]\n  paths:\n    - \/etc\/headscale\/derp.yaml\n  auto_update_enabled: true\n  update_frequency: 24h\n\ndisable_check_updates: true<\/your><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u8fd9\u4e2a\u6587\u4ef6\u4e2d\uff0c\u6709headscale\u7684\u81ea\u6709\u5bc6\u94a5\uff0c\u5f71\u54cd\u4f7f\u7528\u5417\uff1fGemini\u7684\u56de\u7b54\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>\/var\/lib\/derper\/derper.key<\/code>\uff08\u8eab\u4efd\u79c1\u94a5\uff09<\/strong>\uff1a<\/li>\n\n\n\n<li>\u8fd9\u662f DERP \u670d\u52a1\u5668<strong>\u81ea\u8eab\u7684\u8282\u70b9\u8eab\u4efd\u79c1\u94a5<\/strong>\uff08Node Key\uff09\uff0c\u7528\u6765\u5411 Tailscale\/Headscale \u7f51\u7edc\u6807\u8bc6\u201c\u6211\u662f\u4e00\u53f0 DERP \u8282\u70b9\u201d\u3002<\/li>\n\n\n\n<li>\u5f53\u955c\u50cf\u6ca1\u6709\u6307\u5b9a <code>-keyfile<\/code> \u8def\u5f84\u65f6\uff0cderper \u4f1a\u81ea\u52a8\u5728\u672c\u5730\u751f\u6210\/\u8bfb\u53d6\u8fd9\u4e2a\u6587\u4ef6\uff08\u63d0\u793a <code>using \/var\/lib\/derper\/derper.key<\/code>\uff09\u3002\u8fd9\u662f Tailscale \u539f\u751f derper \u7684\u6807\u51c6\u884c\u4e3a\uff0c\u4e0e\u57df\u540d\u8bc1\u4e66\u6beb\u65e0\u5173\u7cfb\u3002<\/li>\n\n\n\n<li><strong><code>\/app\/certs<\/code> \u4e2d\u7684\u8bc1\u4e66\uff08TLS \u52a0\u5bc6\u8bc1\u4e66\uff09<\/strong>\uff1a<\/li>\n\n\n\n<li>\u8fd9\u662f\u7528\u6765\u8fdb\u884c HTTPS\/TLS \u63e1\u624b\u7684\u57df\u540d\u8bc1\u4e66\uff08<code><your domain=\"\">.crt<\/your><\/code> \u548c <code><your domain=\"\">.key<\/your><\/code>\uff09\u3002<\/li>\n\n\n\n<li>\u5728\u4f60\u7684\u914d\u7f6e\u4e2d\uff0c<code>DERP_CERT_MODE=manual<\/code> \u548c <code>DERP_CERT_DIR=\/app\/certs<\/code> \u5df2\u7ecf\u6210\u529f\u751f\u6548\uff0c\u65e5\u5fd7\u4e2d\u7684 <code>derper: serving on :8443 with TLS<\/code> \u5c31\u662f\u6700\u597d\u7684\u8bc1\u660e \u2014\u2014 \u8bf4\u660e\u5b83\u5df2\u7ecf\u52a0\u8f7d\u4e86\u4f60\u7684 <code>acme.sh<\/code> \u8bc1\u4e66\uff0c\u5e76\u7528\u5b83\u5f00\u542f\u4e86\u5b89\u5168\u7684 TLS \u4f20\u8f93\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u53caderp\u7684\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>vim \/etc\/derp\/headscale\/derp.yaml<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>regions:\n  901:\n    regionid: 901\n    regioncode: hk-derp\n    regionname: \"HK Private DERP\"\n    nodes:\n      - name: 901a\n        regionid: 901\n        hostname: <your domain=\"\">\n        stunport: 3478\n        derpport: 8443\n        stunonly: false<\/your><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u522b\u6025\uff0c\u8fd8\u6709nginx\u53cd\u4ee3\u9700\u8981\u914d\u7f6e\u3002\u9996\u5148\u5b89\u88c5nginx<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>apt install nginx -y<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7136\u540e<code>vim \/etc\/nginx\/sites-available\/headscale<\/code>\uff0c\u5199\u5165\u4ee5\u4e0b\u5185\u5bb9\uff0c\u7528\u6765\u8f6c\u53d1443\u8bf7\u6c42\u7ed9headscale\uff0c\u4ee5\u53ca\u7ed9acme.sh\u9a8c\u8bc1\u505a\u4e00\u4e2a\u56de\u843d\uff1b\u53e6\u5916\u6211\u914d\u7f6ederper\u4f7f\u75288443\uff0c\u4e0d\u4e0eheadscale\u62a2\u7aef\u53e3\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name <your domain=\"\">;\n\n    # 1. \u4e13\u95e8\u7ed9 acme \u9a8c\u8bc1\u7528\u7684\u76ee\u5f55\n    location \/.well-known\/acme-challenge\/ {\n        root \/var\/www\/html;\n    }\n\n    # 2. \u5176\u4ed6 HTTP \u8bf7\u6c42\u91cd\u5b9a\u5411\u5230 HTTPS\uff08\u4fdd\u6301\u539f\u6837\u6216\u52a0\u4e0a\uff09\n    location \/ {\n        return 301 https:\/\/$host$request_uri;\n    }\n}\n\nserver {\n    listen 443 ssl http2;\n    server_name <your domain=\"\">;\n\n    # \u5f15\u7528\u4f60\u5728\u7b2c\u4e00\u6b65\u7533\u8bf7\u5230\u7684 acme.sh \u8bc1\u4e66\u7edd\u5bf9\u8def\u5f84\n    ssl_certificate     \/etc\/derp\/certs\/<your domain=\"\">\/<your domain=\"\">.crt;\n    ssl_certificate_key \/etc\/derp\/certs\/<your domain=\"\">\/<your domain=\"\">.key;\n\n    ssl_protocols TLSv1.2 TLSv1.3;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # \u5c06\u6240\u6709 HTTPS \u8bf7\u6c42\u8f6c\u53d1\u7ed9 Docker \u5bb9\u5668\u4e2d\u7684 Headscale (8080)\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:8080;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/your><\/your><\/your><\/your><\/your><\/your><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u94fe\u63a5\u914d\u7f6e\u6587\u4ef6\u5230\u53e6\u4e00\u4e2a\u76ee\u5f55\uff0c\u7136\u540e\u542f\u52a8nginx\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>ln -s \/etc\/nginx\/sites-available\/headscale \/etc\/nginx\/sites-enabled\/<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53e6\u5916\uff0c\u4e4b\u524d\u7533\u8bf7\u8bc1\u4e66\u662f\u7528standalone\u6a21\u5f0f\uff0c\u4f46\u662f\u7531\u4e8e\u5b89\u88c5\u4e86nginx\u5bfc\u81f480\u7aef\u53e3\u88ab\u5360\u7528\uff0c\u4e0d\u80fd\u518d\u752880\u7aef\u53e3\u505a\u9a8c\u8bc1\u4e86\uff0c\u6240\u4ee5\u8981\u6539\u6210nginx+webroot\u505a\u54cd\u5e94\u7684\u9a8c\u8bc1\u6a21\u5f0f\uff0c\u4e0a\u9762\u4ee3\u7801\u5757\u7684#1\u90e8\u5206\u5df2\u7ecf\u505a\u4e86\u54cd\u5e94\u76ee\u5f55\u7684\u8bbe\u7f6e\uff1b\u8fd9\u65f6\u518drenew\u548c\u5b89\u88c5\u4e00\u4e0b\u8bc1\u4e66\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>~\/.acme.sh\/acme.sh --renew -d &lt;Your_Domain> --force<\/code><\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>~\/.acme.sh\/acme.sh --install-cert -d <code>&lt;Your_Domain><\/code> \\ --key-file \/etc\/derp\/certs\/<code>&lt;Your_Domain><\/code>\/<code>&lt;Your_Domain><\/code>.key \\ --fullchain-file \/etc\/derp\/certs\/<code>&lt;Your_Domain><\/code>\/<code>&lt;Your_Domain><\/code>.crt \\ --reloadcmd \"docker restart derper &amp;&amp; systemctl reload nginx\"<\/code><\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\">\u6700\u540e\uff0c\u91cd\u542fnginx\u3002<br><code>nginx -t &amp;&amp; systemctl restart nginx<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 \u542f\u52a8<\/h3>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>docker exec -it headscale headscale users create &lt;MyUserName&gt;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ea\u6709\u4e00\u4e2auser\u7684\u8bdd\uff0c\u8fd9\u91cc\u586b&#8211;user 1\u5c31\u53ef\u4ee5\uff0c\u6709\u6548\u671f10\u5e74<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>docker exec -it headscale headscale preauthkeys create --user 1 --reusable --expiration 3650d<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b8c\u6210\u540e\u4f1a\u6253\u5370\u4e00\u957f\u4e32\u5bc6\u94a5\uff0c\u4e00\u5b9a\u8981\u590d\u5236\u4fdd\u5b58\u4e0b\u6765\uff0c\u53ea\u663e\u793a\u4e00\u6b21\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 \u68c0\u67e5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u68c0\u67e5\u8fde\u63a5\u662f\u5426\u6b63\u5e38\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>tailscale netcheck<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u68c0\u67e5\u5de5\u4f5c\u72b6\u6001\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>tailscale status<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.5 \u7ba1\u7406<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u67e5\u770b\u5ba2\u6237\u7aef\u8282\u70b9<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>docker exec -it headscale headscale node list<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5220\u9664\u5ba2\u6237\u7aef\u8282\u70b9<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>docker exec -it headscale headscale node delete -i 7<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3 \u5ba2\u6237\u7aef\u5b89\u88c5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Linux\u7cfb\u7edf\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><code>curl -fsSL https:\/\/tailscale.com\/install.sh | sh<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542f\u52a8\u547d\u4ee4\u770b\u5f00\u5934\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Win10\/11\u76f4\u63a5\u627e\u5b98\u7f51\u4e0b\u8f7d\u3002\u4f46\u5b89\u88c5\u5b8c\u4e86\u4e0d\u8981\u767b\u5f55\u5b98\u65b9\u8282\u70b9\uff0c\u4f7f\u7528\u5f00\u5934\u7684\u542f\u52a8\u547d\u4ee4\u53bb\u6389sudo\u548cenv\u90e8\u5206\u5728cmd\u8fd0\u884c\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b89\u5353\u52a0\u5165\u8282\u70b9\u7684\u547d\u4ee4\uff1a<\/p>\n\n\n\n<p class=\"has-blush-light-purple-gradient-background has-background wp-block-paragraph\"><br><code>docker exec -it headscale headscale auth register --auth-id &lt;Android client ID&gt; --user &lt;User Name&gt;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Headscale\u548cDerper\u662f\u53ef\u4ee5\u66ff\u4ee3\u4ed8\u8d39Tailscale\u7684\u5f00\u6e90\u65b9\u6848\uff0c\u53ef\u4ee5\u8ba9\u5904\u4e8e\u4e0d\u540c\u7f51\u7edc\u73af\u5883\u4e0b\u7684\u4e0d\u540c\u8bbe\u5907\u901a\u8fc7\u865a\u62df\u5c40\u57df\u7f51\u4e92\u8054\uff1bHeadscale\u8d1f\u8d23\u5ba2\u6237\u7aef\u534f\u8c03\u548c\u6253\u6d1e\uff0cDerper\u8d1f\u8d23\u6253\u6d1e\u4e0d\u901a\u65f6\u4f5c\u4e3a\u4e2d\u7ee7\u8f6c\u53d1\u6d41\u91cf\u3002\u7b80\u4e2d\u793e\u533a\u5bf9\u4e8e\u5efa\u7acbHeadscale\u548cDerper\u7684\u535a\u5ba2\u5f88\u591a\uff0c\u4f46\u662f\u59ff\u52bf\u5404\u4e0d\u76f8\u540c\u5bfc\u81f4\u697c\u4e3b\u7b2c\u4e00\u6b21\u90e8\u7f72\u8e29\u4e86\u5927\u5751\u3002\u5728Gemini\u7684\u5e2e\u52a9\u4e0b\u641e\u597d\u4e86\uff0c\u8fd9\u91cc\u4f5c\u4e3a\u7b14\u8bb0\u8bb0\u5f55\u4e00\u4e0b\u3002 1.\u65e5\u5e38\u542f\u52a8\u548c\u914d\u7f6e\u8bb0\u5f55 1. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-18","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category--tech-notes"],"_links":{"self":[{"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/posts\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18"}],"version-history":[{"count":1,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":20,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/posts\/18\/revisions\/20"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=\/wp\/v2\/media\/17"}],"wp:attachment":[{"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speedtest.lcsh.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}