WireGuard组网

为了让几台内网的开发机器可以互相访问,权衡 端口映射、FRP、FRPS、CF Tunnel 多种方案:

WireGuard Mesh组网介绍

产品

方案 大陆流畅度 部署难度 安全性 适用场景
Tailscale + 私有 DERP 极高 (依赖国内服务器) 中等 极高 (2FA+端到端) 最推荐,最稳健,体验最好
ZeroTier + Moon 简单 适合不想折腾复杂配置的用户
Headscale 极高 较高 极高 (完全私有) 追求完全开源、隐私、无限制的极客
NetBird (私有化) 较高 极高 需要复杂权限管理的团队/个人

Mesh VPN 有以下几个杀手锏

自建中转服务器

配置要点

与 v2ray 共存

防止路由冲突导致连接中断:

• 分流配置:在代理客户端(如 Clash/v2rayN)的路由配置中,将 Tailscale 网段(100.64.0.0/10)设为直连(Direct)。

• DNS 优化:停用 Tailscale DNS功能,使用IP访问,避免 MagicDNS 与 Fake-IP 模式冲突。

• UDP 放行:确保代理软件不拦截 41641 等 UDP 端口,以维持 P2P 直连。

让WSL也能用

WSL中快速启用代理且Mesh VPN网段不走V2ray

将以下脚本存为 /usr/local/proxy

#!/bin/bash
# 自动检测 WSL 网络模式并获取主机 IP
_gateway_ip=$(ip route | grep default | awk '{print $3}')
# 判断是否为 NAT 模式(默认网关是 WSL 内部网关)
if 3[01])\. ; then
  host_ip=$_gateway_ip
else
  # Mirror 模式使用本地回环地址
  host_ip="127.0.0.1"
fi

# 获取本机局域网 IP(用于 no_proxy)
_local_ip=$(ip route | grep -E "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[0-9]+ dev [^ ]+" | \
            grep -v "docker\|br-" | \
            awk '{print $1}' | head -1 | cut -d'/' -f1)

# 构建 no_proxy 列表(本地、私有和局域网地址)
_no_proxy_entries="localhost,127.0.0.1,::1"
if [ -n "$_local_ip" ]; then
  _no_proxy_entries="$_no_proxy_entries,$_local_ip"
  # 添加同网段 (例如 192.168.1.*)
  _local_subnet=$(echo $_local_ip | cut -d'.' -f1-3).*
  _no_proxy_entries="$_no_proxy_entries,$_local_subnet"
fi
# 添加私有和 VPN 地址范围
_no_proxy_entries="$_no_proxy_entries,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10"

if [ "$1" = "on" ]; then
  export http_proxy="http://$host_ip:1087"
  export https_proxy="http://$host_ip:1087"
  export HTTP_PROXY="http://$host_ip:1087"
  export HTTPS_PROXY="http://$host_ip:1087"
  export no_proxy="$_no_proxy_entries"
  export NO_PROXY="$_no_proxy_entries"
  echo "Proxy is now ON (using $host_ip:1087)."
  echo "no_proxy: $no_proxy"
elif [ "$1" = "off" ]; then
  unset http_proxy
  unset https_proxy
  unset HTTP_PROXY
  unset HTTPS_PROXY
  unset no_proxy
  unset NO_PROXY
  echo "Proxy is now OFF."
elif [ "$1" = "status" ]; then
  if [ -n "$http_proxy" ]; then
    echo "Proxy is ON: $http_proxy"
    [ -n "$no_proxy" ] && echo "no_proxy: $no_proxy"
  else
    echo "Proxy is OFF"
  fi
else
  echo "Usage: proxy [on|off|status]"
fi

执行 chmod +x /usr/local/proxy

今后开启代理:proxy on

关闭代理:proxy off

Tailscale 配置

查看连接状态

tailscale status

测试详细延迟

tailscale ping

诊断网络环境

tailscale netcheck
UDP: true:这是直连的基础。如果为 false,说明 UDP 被防火墙拦截,几乎肯定只能走中转。
MappingVariesByDestIP:如果为 true,代表你是“对称型 NAT”(Hard NAT),打洞难度较大。

不要开启 "Exit Node"

Tailscale 默认只修改发往虚拟网段的路由,不会接管你的所有互联网流量。除非你明确想让开发机当你的加速器,否则不要在笔记本上选择开发机作为 Exit Node。这样,你访问开发机的 3000 端口走 Tailscale,访问其他网站依然走 v2ray。

解决 DNS 污染冲突

这是最容易出问题的地方。Tailscale 默认会开启 MagicDNS,它会接管系统的 DNS 解析以便你通过机器名(如 http://my-dev-machine:3000)访问。

Tailscale 的 "Subnet Router"

支持“节点中转局域网流量”,充当一个“桥梁”,让其它机器可以能访问本机所在局域网的所有设备(比如NAS、路由器管理界面)。
配置命令tailscale up --advertise-routes=192.168.1.0/24

Tailscale 不支持普通客户端做为中转服务器,需要单独安装DERPer 。Tailscale 官方并不直接提供 DERP 的镜像,但社区有非常成熟且轻量的实现(如 fredliang/derper)。

为 DERP 分配一个二级域名(如 derp.yourdomain.com),让 Nginx 处理 SSL 证书,然后将流量转发给运行在非标准端口上的 DERP 容器。

docker-compose.yml

services:
  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    ports:
      - "3478:3478/udp" # STUN 端口保持不变
      - "127.0.0.1:8443:443" # 只监听本地回环,交给 Nginx 转发
    environment:
      - DERP_DOMAIN=derp.yourdomain.com
      - DERP_CERT_MODE=manual # 改为手动模式,不让它自己申请证书
      - DERP_ADDR=:443
      - DERP_VERIFY_CLIENTS=false # 如果是个人用,可以设为 false

部署好容器后,Tailscale 并不会自动使用它。你需要在 Tailscale Admin ConsoleAccess Control 中添加 derpMap 配置:

"derpMap": {
    "OmitDefaultRegions": false, // 是否禁用官方海外节点,建议先设为 false
    "Regions": {
        "901": {
            "RegionID": 901,
            "RegionCode": "my-derp",
            "Nodes": [
                {
                    "Name": "1",
                    "RegionID": 901,
                    "HostName": "你的域名.com",
                    "IPv4": "服务器公网IP",
                    "DERPPort": 443,
                    "STUNPort": 3478
                }
            ]
        }
    }
}

验证:
在其它机器运行 tailscale netcheck。如果输出中看到了 my-derp 且延迟极低,说明配置成功。

其它Mesh组网方案

ZeroTier

ZeroTier 的节点(Peers)具备一定的“中转意识”。

NetBird (支持自建中转且架构更现代)

NetBird 同样基于 WireGuard,但它在“中转”这件事上比 Tailscale 更开放一点。