# VPN 與 Tailscale

## `[l3vpns]`

定義第三層 VPN 介面，每筆記錄的鍵是自訂介面名稱。

### 共用欄位

| 鍵 | 類型 | 說明 | 必填 |
|---|---|---|---|
| `type` | 字串 | 已實作 `wireguard`、`amneziawg` 與實驗性 `tailscale`。schema 接受 `openvpn`，但不代表已實作 OpenVPN 用戶端。 | 是 |
| `nickname` | 字串 | 易讀的顯示名稱。 | 否 |
| `enabled` | 布林值 | 是否啟用，預設 `true`。 | 否 |

### WireGuard 欄位（`type=wireguard`）

| 鍵 | 類型 | 說明 | 必填 |
|---|---|---|---|
| `private-key` | 字串 | 介面私鑰。 | 是 |
| `address` | CIDR | 介面內部 IP 位址與子網路。 | 是 |

### Tailscale 欄位（`type:tailscale`，實驗性，Pro）

| 鍵 | 說明 |
|---|---|
| `login-server` | HTTPS 控制伺服器 URL，通常為 `https://controlplane.tailscale.com`；不得包含內嵌認證資訊、查詢或片段。 |
| `auth-key` | 選用的初始登入金鑰。建議優先以瀏覽器登入或一次性提交認證KEY，避免在設定檔儲存機密。 |
| `exit-node-ip` | 選填的偏好出口節點 IPv4 位址，不含 CIDR 或連接埠。重新啟動 VPN 或主動登入時套用。節點必須可用且提供出口功能；否則請檢查 Tailscale 狀態。省略時使用裝置儲存的偏好。 |
| `drive-dns` | 預設 `false`。透過 MintFlow DNS 衍生對等節點 IPv4 記錄；不啟用 Tailscale 作業系統層級 MagicDNS 解析器。需要 Pro 與 MintFlow DNS 路徑。 |
| `enabled` | 預設 `true`。每份設定檔只允許一個使用中的 Tailscale 介面。 |

```ini
[l3vpns]
tailnet=type:tailscale,login-server:https://controlplane.tailscale.com,enabled:true

[routing]
CIDR,100.64.0.0/10,L3VPN,tailnet
DEFAULT,DIRECT
DNS-FALLBACK,DIRECT
```

搭配 `[dns]` 中的 `app-routing-enabled=true` 及適當的 `direct-dns` 上游使用。請參閱[完整登入與路由指南](../howtos/tailscale.md)。裝置身分及接受路由仍保存在裝置本機。選填的 `exit-node-ip` 將偏好的出口節點存入設定檔，並隨設定檔同步；即時覆寫不會更動設定檔。省略此欄位時，各裝置使用自己的出口偏好。失去 Pro 權限時，編譯會排除該介面，並將指向它的路由改為 REJECT。

### AmneziaWG 欄位（`type=amneziawg`）

自 1.9.0 起支援 AmneziaWG 1.5 與 2.0 參數。對等節點另於 `[amneziawg-peers]` 設定。

| 鍵 | 類型 | 說明 | 必填 |
|---|---|---|---|
| `private-key` | 字串 | 介面私鑰。 | 是 |
| `address` | CIDR | 介面內部 IP 位址與子網路。 | 是 |
| `jc` | 整數 | 垃圾封包數量參數。 | 否 |
| `jmin` | 整數 | 垃圾封包最小大小。 | 否 |
| `jmax` | 整數 | 垃圾封包最大大小。 | 否 |
| `s1` | 整數 | AmneziaWG S1 參數。 | 否 |
| `s2` | 整數 | AmneziaWG S2 參數。 | 否 |
| `s3` | 整數 | AmneziaWG S3 參數。 | 否 |
| `s4` | 整數 | AmneziaWG S4 參數。 | 否 |
| `h1` | 整數或範圍 | H1 封包標頭值，例如 `1` 或 `843739526-1233562642`。 | 否 |
| `h2` | 整數或範圍 | H2 封包標頭值，例如 `2` 或 `1383464517-1389039856`。 | 否 |
| `h3` | 整數或範圍 | H3 封包標頭值，例如 `3` 或 `1558777559-1611162592`。 | 否 |
| `h4` | 整數或範圍 | H4 封包標頭值，例如 `4` 或 `1797613837-1977519157`。 | 否 |
| `i1` ... `i5` | 字串 | AmneziaWG 2.0 CPS 指令字串，每欄位最多 255 UTF-8 位元組；支援 `<b>`、`<r>`、`<rd>`、`<rc>`、`<t>` 標籤。 | 否 |

```ini
[l3vpns]
my-wireguard=type:wireguard,nickname:My WG,private-key:...,address:10.0.0.1/32
my-awg=type:amneziawg,nickname:My AWG,private-key:...,address:10.8.9.2/32,jc:4,jmin:40,jmax:70,s1:0,s2:0,s3:0,s4:0,h1:1,h2:2,h3:3,h4:4,i1:<r 33>
```

## `[wireguard-peers]`

定義 WireGuard 對等節點，每筆記錄的鍵為自訂節點名稱。

| 鍵 | 類型 | 說明 | 必填 |
|---|---|---|---|
| `interface` | 字串 | 所屬 `l3vpns` 介面名稱。 | 是 |
| `public-key` | 字串 | 對等節點公鑰。 | 是 |
| `preshared-key` | 字串 | 選用的預先共用金鑰。 | 否 |
| `endpoint` | 字串 | 對等節點的公開端點，例如 `1.2.3.4:51820`。 | 是 |
| `allowed-ips` | CIDR 清單 | 經由此節點的 IP 位址/範圍。 | 是 |

```ini
[wireguard-peers]
my-peer=interface:my-wireguard,public-key:...,endpoint:1.2.3.4:51820,allowed-ips:0.0.0.0/0
```

## `[amneziawg-peers]`

定義 AmneziaWG 對等節點，每筆記錄的鍵為自訂節點名稱。欄位與 WireGuard 相同，但 `interface` 必須參照 `[l3vpns]` 中 `type` 為 `amneziawg` 的介面。

| 鍵 | 類型 | 說明 | 必填 |
|---|---|---|---|
| `interface` | 字串 | 所屬 `amneziawg` 介面名稱。 | 是 |
| `public-key` | 字串 | 對等節點公鑰。 | 是 |
| `preshared-key` | 字串 | 選用的預先共用金鑰。 | 否 |
| `endpoint` | 字串 | 對等節點的公開端點，例如 `1.2.3.4:51820`。 | 是 |
| `allowed-ips` | CIDR 清單 | 經由此節點的 IP 位址/範圍。 | 是 |

```ini
[amneziawg-peers]
my-awg-peer=interface:my-awg,public-key:...,endpoint:1.2.3.4:51820,allowed-ips:0.0.0.0/0,::/0
```
