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_ADMIN 同 SYS_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_HOST 同 WG_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。
部署步驟如下:
- 喺 Oracle Cloud Console 開啟網路安全清單,允許 UDP 443 連入。如果想直接存取 wg-easy Web UI,亦要開放 TCP 51821,但建議將管理界面隱藏喺反向代理或 Cloudflare Tunnel 後面。
- 安裝 Docker Engine 同 Docker Compose Plugin。
- 建立項目目錄同子目錄:
mkdir -p /opt/amneziawg/config
cd /opt/amneziawg
- 將上述 Compose 內容儲存為
docker-compose.yml。 - 喺同一個目錄準備
Dockerfile,內容要包含 AmneziaWG 核心模組、awg工具同相關依賴。例如安裝build-essential、linux-headers、wireguard-tools,並編譯載入 AmneziaWG 模組。 - 建立外部 Docker 網絡:
docker network create --subnet=172.21.0.0/24 cf_network
- 啟動服務:
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 同時掛載到 amneziawg 同 awg-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,或者喺 amneziawg 嘅 ports 加入 "51821:51821/tcp"。
問:INSECURE=true 係咪安全?
呢個選項會令 wg-easy Web UI 完全唔需要密碼,任何人都可以喺內網改 VPN 設定。除非你肯定網絡環境完全可信,否則建議移除 INSECURE=true,改用 PASSWORD 環境變數,並加上反向代理密碼保護。
Related Links¶
docker wireguard AmneziaVPN oracle-cloud cloudflare-tunnel litellm
Source¶
Coverage auto (container scan)