跳轉至

Amneziawg

Amneziawg(簡稱 AWG)係一個由 AmneziaVPN 團隊開發嘅 WireGuard 分支,旨在對抗深度封包檢測(Deep Packet Inspection, DPI)同網絡審查。佢保留咗 WireGuard 簡潔、高效、現代化嘅架構,但改用混淆嘅握手協定同加密封包格式,令防火牆同 ISP 難啲辨識 VPN 流量。呢個條目記述一個喺 Oracle Cloud 上以 Docker Compose 自架 Amneziawg 嘅方案,並配合 wg-easy Web UI 管理用戶端。

Overview

Amneziawg 針對 WireGuard 被封鎖嘅場景而誕生。傳統 WireGuard 嘅握手封包有固定特徵,DPI 可以輕易識別並阻斷;Amneziawg 透過修改封包結構同加密方式,令流量外觀似普通 HTTPS/QUIC,從而提高穿透能力。呢個方案特別適合喺網絡審查較嚴格嘅地區使用。

呢篇條目描述嘅部署方式係喺 Oracle Cloud Infrastructure(OCI)嘅 Always Free 虛擬機器上,利用 Docker Compose 運行兩個容器:

  • amneziawg:建立 AmneziaWG VPN 介面同核心處理。
  • awg-wg-easy:提供 Web 管理介面,方便添加用戶端同產生設定檔。

Architecture

呢個 Docker Compose 架構包含兩個主要服務,並共用一個外部 Docker 網絡 cf_network

services:
  amneziawg:
    build:
      context: .
      dockerfile: Dockerfile
    image: amneziawg:3.1
    container_name: amneziawg
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    devices:
      - /dev/net/tun:/dev/net/tun
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv6.conf.all.forwarding=1
    networks:
      cf_network:
        ipv4_address: 172.21.0.53
    ports:
      - "443:443/udp"
    volumes:
      - ./config:/config
    environment:
      - TZ=Asia/Hong_Kong

  awg-wg-easy:
    image: ghcr.io/wg-easy/wg-easy:15
    container_name: awg-wg-easy
    restart: unless-stopped
    network_mode: "service:amneziawg"
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    volumes:
      - ./config:/etc/wireguard
    environment:
      - INSECURE=true
      - DISABLE_IPV6=true
      - TZ=Asia/Hong_Kong
      - WG_HOST=wire.benhoweb.com
      - WG_PORT=443
      - WG_DEFAULT_ADDRESS=10.8.1.x
      - WG_PERSISTENT_KEEPALIVE=25
      - WG_DEFAULT_DNS=1.1.1.1
      - WG_DEVICE=awg0

networks:
  cf_network:
    external: true

amneziawg 服務負責低層網絡操作。佢需要 NET_ADMINSYS_MODULE 權限,先可以建立 TUN 介面同載入核心模組;/dev/net/tun 映射確保容器可以使用虛擬網絡裝置。sysctls 部分啟用 IPv4 同 IPv6 封包轉發,令 VPN 用戶端可以透過伺服器上網。

awg-wg-easy 使用 network_mode: "service:amneziawg",意思係佢同 amneziawg 共享同一個網絡命名空間,冇自己獨立嘅 IP 位址。佢透過 Web UI 管理 VPN 用戶端,並將設定寫入共享嘅 ./config 目錄。WG_DEVICE=awg0 指定 VPN 介面名稱,而 WG_HOSTWG_PORT 則係用戶端連接時使用嘅公開地址同 UDP 連接埠。

cf_network 被設定為 external: true,代表 Compose 唔會自動建立呢個網絡。管理員需要預先用 Docker 建立佢,並確保子網路包含 172.21.0.53 呢個靜態 IP。

Deployment

要喺 Oracle Cloud 上部署,首先需要一部執行 Ubuntu 22.04 或 24.04 嘅 x86/ARM 虛擬機器。Oracle Cloud Always Free 提供 Ampere A1 ARM 執行個體,性價比高,適合用嚟自架 VPN。

部署步驟如下:

  1. 喺 Oracle Cloud Console 開啟網路安全清單,允許 UDP 443 連入。如果想直接存取 wg-easy Web UI,亦要開放 TCP 51821,但建議將管理界面隱藏喺反向代理或 Cloudflare Tunnel 後面。
  2. 安裝 Docker Engine 同 Docker Compose Plugin。
  3. 建立項目目錄同子目錄:
mkdir -p /opt/amneziawg/config
cd /opt/amneziawg
  1. 將上述 Compose 內容儲存為 docker-compose.yml
  2. 喺同一個目錄準備 Dockerfile,內容要包含 AmneziaWG 核心模組、awg 工具同相關依賴。例如安裝 build-essentiallinux-headerswireguard-tools,並編譯載入 AmneziaWG 模組。
  3. 建立外部 Docker 網絡:
docker network create --subnet=172.21.0.0/24 cf_network
  1. 啟動服務:
docker compose up -d --build

執行完成後,可以使用 docker compose ps 檢查服務狀態。

Configuration

呢個方案嘅主要設定透過環境變數控制。

WG_HOST=wire.benhoweb.com 係用戶端連接嘅伺服器主機名。可以係域名,亦可以係 Oracle Cloud 執行個體嘅公共 IP。WG_PORT=443 指定用戶端連接用嘅 UDP 連接埠,必須同 ports 入面發佈嘅連接埠一致。

WG_DEFAULT_ADDRESS=10.8.1.x 定義用戶端預設 IP 地址範圍。WireGuard/WireGuard Easy 通常會自動分配 IP,x 係佔位符號,實際使用時會由系統自動填充。WG_DEFAULT_DNS=1.1.1.1 設定用戶端嘅 DNS 伺服器。WG_PERSISTENT_KEEPALIVE=25 係保活間隔,有助於用戶端通過 NAT 或防火牆。

WG_DEVICE=awg0 指定 AmneziaWG 介面名稱。呢個名稱必須同 amneziawg 容器建立嘅介面一致,否則 wg-easy 無法正確設定 peer。INSECURE=true 表示 wg-easy Web UI 唔需要密碼登入,只適合喺受保護嘅內網或短期測試環境使用;正式部署應該設定 PASSWORD 環境變數。

Volume 方面,./config 同時掛載到 amneziawgawg-wg-easy。wg-easy 將 VPN 設定、私鑰同用戶端檔案寫入 /etc/wireguard,實際檔案會同步到主機嘅 ./config,方便備份。

Operations

日常操作可以使用以下指令:

# 查看狀態
docker compose ps

# 查看日誌
docker compose logs -f amneziawg
docker compose logs -f awg-wg-easy

# 停止服務
docker compose down

# 更新並重建
docker compose build --pull
docker compose up -d

新增用戶端時,可以登入 wg-easy Web UI,建立新 peer,然後下載 QR Code 或設定檔。所有 Peer 嘅資料會保存喺 ./config,所以備份呢個目錄就等於備份整個 VPN 設定。

如果用戶端連接唔到,可以檢查幾樣嘢:

  • Oracle Cloud 安全清單同系統 iptables 係咪開放 UDP 443。
  • /dev/net/tun 係咪正確存在。
  • 睇下 amneziawg 日誌有冇核心模組載入錯誤。
  • 確認 WG_HOST 可以解析到伺服器公共 IP,而且 443 UDP 冇被封鎖。

FAQ

問:Amneziawg 同 WireGuard 有咩分別?

Amneziawg 係 WireGuard 嘅分支,主要分別在於混淆協定同加密方式。佢令封包更難被 DPI 辨識。但因此 Amneziawg 同原版 WireGuard 唔兼容,用戶端需要使用支援 AmneziaWG 嘅程式,例如 AmneziaVPN 或相應嘅改版客戶端。

問:點解要用 UDP 443?

UDP 443 同 HTTPS/QUIC 使用相同連接埠,流量外觀更具迷惑性,喺網絡審查環境下比較難被直接封鎖。如果 443 被佔用,可以改用其他高位 UDP 連接埠。

問:點解要喺 Oracle Cloud 部署?

Oracle Cloud Always Free 提供穩定嘅虛擬機器同流量額度,特別適合自架 VPN。而且 Ampere ARM 執行個體效能唔錯,支援 Docker 同 AmneziaWG。

問:wg-easy Web UI 點樣先可以存取?

呢個 Compose 方案入面,Web UI 程式同 amneziawg 共享網絡命名空間,但預設冇將 TCP 51821 發布到主機。你可以透過同一個 cf_network 入面嘅 Cloudflare Tunnel 或 Nginx Proxy Manager,代理到 http://172.21.0.53:51821,或者喺 amneziawgports 加入 "51821:51821/tcp"

問:INSECURE=true 係咪安全?

呢個選項會令 wg-easy Web UI 完全唔需要密碼,任何人都可以喺內網改 VPN 設定。除非你肯定網絡環境完全可信,否則建議移除 INSECURE=true,改用 PASSWORD 環境變數,並加上反向代理密碼保護。

docker wireguard AmneziaVPN oracle-cloud cloudflare-tunnel litellm

Source

Coverage auto (container scan)