Wireguard

标准 Wireguard 协议实现。

警告

Wireguard 协议并非专门为翻墙而设计,若在最外层过墙,存在特征可能导致服务器被封锁

OutboundConfigurationObject

{
  "secretKey": "PRIVATE_KEY",
  "address": [
    // optional, default ["10.0.0.1", "fd59:7153:2388:b5fd:0000:0000:0000:0001"]
    "IPv4_CIDR",
    "IPv6_CIDR",
    "and more..."
  ],
  "peers": [
    {
      "endpoint": "ENDPOINT_ADDR",
      "publicKey": "PUBLIC_KEY"
    }
  ],
  "kernelMode": true, // optional, default true if it's supported and permission is sufficient
  "mtu": 1420, // optional, default 1420
  "reserved": [1, 2, 3],
  "workers": 2, // optional, default runtime.NumCPU()
  "domainStrategy": "ForceIP"
}

提示

目前 Wireguard 协议 outbound 中不支持设置 streamSettings

secretKey: string

用户私钥。必填。

address: string array

Wireguard 会在本地开启虚拟网卡 tun。使用一个或多个 IP 地址,支持 IPv6

kernelMode: true | false

是否使用 Linux 内核的虚拟网卡 TUN。
需要系统支持且有 root 权限才能使用 Linux 内核的虚拟网卡 TUN,使用后会占用 IPv6 的 1023 号路由表。

提示

若 IPv6 的 1023 号路由表内已有路由条目,且 kernelMode 的值为 true,将无法正常使用。

mtu: int

Wireguard 底层 tun 的分片大小。

MTU的计算方法

一个wireguard数据包的结构如下

- 20-byte IPv4 header or 40 byte IPv6 header
- 8-byte UDP header
- 4-byte type
- 4-byte key index
- 8-byte nonce
- N-byte encrypted data
- 16-byte authentication tag

N-byte encrypted data即为我们需要的MTU的值,根据endpoint是IPv4还是IPv6,具体的值可以是1440(IPv4)或者1420(IPv6),如果处于特殊环境下再额外减掉即可(如家宽PPPoE额外-8)。

reserved [ number ]

Wireguard 保留字节。

Xray-core v1.8.0 新增参数。
通过 wireguard 连接 warp 时,由于 cloudflare 的限制,香港、洛杉矶部分 IP 需要有 reserved 的值才能成功连接。
reserved 的值可使用第三方工具获得,例如:warp-regopen in new tagwarp-reg.shopen in new tag

workers: int

Wireguard 使用线程数。

peers: [ Peers ]

Wireguard 服务器列表,其中每一项是一个服务器配置。

domainStrategy: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP"

Xray-core v1.8.6 新增参数。
若不写此参数,或留空,默认值 "ForceIP"
当目标地址为域名时,使用 Xray-core 内置 DNS 服务器查询获取 IP(若没写 "dns" 配置,使用系统 DNS),将此 IP 通过 wireguard 发出连接。

提示

domainStrategy 的值与 "dns" 配置中 "queryStrategy" 的值产生冲突,会造成网站打开失败。

    "dns": {
        "servers": [
            "https://1.1.1.1/dns-query",
            {
                "address": "https://1.1.1.1/dns-query",
                "domains": [
                    "geosite:openai"
                ],
                "skipFallback": true,
                "queryStrategy": "UseIPv6" // 只查询 AAAA 记录
            }
        ],
        "queryStrategy": "UseIP" // 同时查询 A 和 AAAA 记录,若不写此参数,默认值 UseIP,
    },

domainStrategy: "ForceIPv4" 时,控制 geosite:openai 域名查询的 DNS 字段使用了 "queryStrategy": "UseIPv6",将会导致 geosite:openai 的网站打开失败。

提示

Xray-core v1.8.0 - v1.8.4 没有 "domainStrategy"
当目标地址为域名时,使用 Xray-core 内置 DNS 服务器查询获取 IP。使用 "dns" 配置中 "queryStrategy" 的值控制 IPv4 或 IPv6 优先级。
若没写 "dns" 配置,使用系统 DNS 查询获取 IP,IPv4 或 IPv6 优先级由系统控制。

Peers

{
  "endpoint": "ENDPOINT_ADDR",
  "publicKey": "PUBLIC_KEY",
  "preSharedKey": "PRE_SHARED_KEY", // optional, default "0000000000000000000000000000000000000000000000000000000000000000"
  "keepAlive": 0, // optional, default 0
  "allowedIPs": ["0.0.0.0/0"] // optional, default ["0.0.0.0/0", "::/0"]
}

endpoint: address

服务器地址, 必填

URL:端口 格式,例如 engage.cloudflareclient.com:2408
IP:端口 格式,例如 162.159.192.1:2408[2606:4700:d0::a29f:c001]:2408

提示

当目标地址类型为 URL 时,将使用 Xray-core 内置 DNS 查询 URL 以获取 IP,IPv4 或 IPv6 优先级由 domainStrategy 的值控制。
若没写 "dns" 配置,使用系统 DNS 查询 URL 以获取 IP,IPv4 或 IPv6 优先级由系统控制。

publicKey: string

服务器公钥,用于验证, 必填

preSharedKey: string

额外的对称加密密钥

keepAlive: int

心跳包时间间隔,单位为秒,默认为 0 表示无心跳

allowedIPs: string array

Wireguard 仅允许特定源 IP 的流量