You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
5.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Wireguard
标准 Wireguard 协议实现。
::: danger
**Wireguard 协议并非专门为翻墙而设计,若在最外层过墙,存在特征可能导致服务器被封锁**
:::
## OutboundConfigurationObject
```json
{
"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"
}
```
::: tip
目前 Wireguard 协议 outbound 中不支持设置 `streamSettings`
:::
> `secretKey`: string
用户私钥。必填。
> `address`: string array
Wireguard 会在本地开启虚拟网卡 tun。使用一个或多个 IP 地址,支持 IPv6
> `kernelMode`: true | false
是否使用 Linux 内核的虚拟网卡 TUN。<br>
需要系统支持且有 root 权限才能使用 Linux 内核的虚拟网卡 TUN使用后会占用 IPv6 的 1023 号路由表。<br>
::: tip
若 IPv6 的 1023 号路由表内已有路由条目,且 `kernelMode` 的值为 `true`,将无法正常使用。
:::
> `mtu`: int
Wireguard 底层 tun 的分片大小。
<details>
<summary>MTU的计算方法</summary>
一个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)。
</details>
> `reserved` \[ number \]
Wireguard 保留字节。
Xray-core v1.8.0 新增参数。<br>
通过 wireguard 连接 warp 时,由于 cloudflare 的限制,香港、洛杉矶部分 IP 需要有 `reserved` 的值才能成功连接。<br>
`reserved` 的值可使用第三方工具获得,例如:[warp-reg](https://github.com/badafans/warp-reg)、[warp-reg.sh](https://github.com/chise0713/warp-reg.sh)。
> `workers`: int
Wireguard 使用线程数。
> `peers`: \[ [Peers](#peers) \]
Wireguard 服务器列表,其中每一项是一个服务器配置。
> `domainStrategy`: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP"
Xray-core v1.8.6 新增参数。<br>
若不写此参数,或留空,默认值 `"ForceIP"`<br>
当目标地址为域名时,使用 Xray-core [内置 DNS 服务器](../dns.md)查询获取 IP若没写 `"dns"` 配置,使用系统 DNS将此 IP 通过 wireguard 发出连接。<br>
::: tip
`domainStrategy` 的值与 `"dns"` 配置中 `"queryStrategy"` 的值产生冲突,会造成网站打开失败。
:::
```json
"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 的网站打开失败。
::: tip
Xray-core v1.8.0 - v1.8.4 没有 `"domainStrategy"`<br>
当目标地址为域名时,使用 Xray-core 内置 DNS 服务器查询获取 IP。使用 `"dns"` 配置中 `"queryStrategy"` 的值控制 IPv4 或 IPv6 优先级。<br>
若没写 `"dns"` 配置,使用系统 DNS 查询获取 IPIPv4 或 IPv6 优先级由系统控制。
:::
### Peers
```json
{
"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`<br>
IP:端口 格式,例如 `162.159.192.1:2408``[2606:4700:d0::a29f:c001]:2408`
::: tip
当目标地址类型为 URL 时,将使用 Xray-core 内置 DNS 查询 URL 以获取 IPIPv4 或 IPv6 优先级由 `domainStrategy` 的值控制。<br>
若没写 `"dns"` 配置,使用系统 DNS 查询 URL 以获取 IPIPv4 或 IPv6 优先级由系统控制。
:::
> `publicKey`: string
服务器公钥,用于验证, 必填
> `preSharedKey`: string
额外的对称加密密钥
> `keepAlive`: int
心跳包时间间隔,单位为秒,默认为 0 表示无心跳
> `allowedIPs`: string array
Wireguard 仅允许特定源 IP 的流量