找回密碼
 立即註冊
    查看: 14|回覆: 0

    用 Docker 架 WireGuard(一)wg-easy v15:有網頁介面的版本

    [複製鏈接]

    !lvup!   100%

    384

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005859
    發表於 前天 01:22 | 顯示全部樓層 |閱讀模式
    wg-easy 是最省事的 WireGuard 架法:一個容器,網頁點一點就新增使用者,直接給你 QR code。

    但 v15 是整個重寫的版本,網路上絕大多數教學還停在 v14,照抄一定失敗。 這篇從零做完,並把 v15 特有的兩個坑標出來。

    但 v15 是整個重寫的版本,網路上絕大多數教學還停在 v14,照抄一定失敗。

    先說結果:做完之後你在外面用手機的行動網路,可以連回家裡的 NAS、Home Assistant、路由器管理頁,就像人在家裡一樣。

    第一步:確認主機環境

    需要一台開機就一直開著的家用主機:NAS、小主機、Raspberry Pi、或跑 Proxmox 的機器都可以。

    1-1 確認 Docker 裝好了
    1. docker --version
    2. docker compose version
    複製代碼

    你會看到:
    1. Docker version 27.3.1, build ce12230
    2. Docker Compose version v2.29.7
    複製代碼


    • `docker: command not found` → 先裝 Docker。Debian / Ubuntu 上是 `curl -fsSL https://get.docker.com | sudo sh`
    • `compose` 不是已知指令 → 你的 Docker 太舊。舊的 `docker-compose`(中間有橫線)也能用,下面的指令把 `docker compose` 換成 `docker-compose` 即可


    1-2 確認核心支援 WireGuard
    1. sudo modprobe wireguard && echo OK
    複製代碼

    你會看到一行 `OK`。


    • 回 `modprobe: FATAL: Module wireguard not found` → 核心太舊。Linux 5.6 之後是內建的,現在的主流發行版都有。真的沒有的話 Debian / Ubuntu 下 `sudo apt install wireguard-tools`
    • 在 Synology / QNAP 上 → 部分機型的核心沒有內建 WireGuard 支援,要另外裝套件。裝不起來的話 wg-easy 就跑不動


    1-3 查出主機的內網 IP,等一下要用
    1. ip -4 addr show | grep inet
    複製代碼

    你會看到像這樣,找那個 192.168 或 10. 開頭的:
    1. inet 127.0.0.1/8 scope host lo
    2. inet 192.168.1.20/24 brd 192.168.1.255 scope global eth0
    複製代碼

    `192.168.1.20` 就是你的主機內網 IP,下面都用這個代稱。

    ⚠ 一定要在路由器把這台主機設成固定 IP(DHCP 保留)。不然主機重開機拿到新 IP,路由器的埠轉發就轉到空氣去了,而且症狀是「以前能連現在連不上」,完全沒有任何訊息。

    第二步:查出你家對外的位址

    使用者要連的是你家的對外位址,所以要先知道它是什麼、以及它會不會變。

    2-1 查對外 IP

    在主機上執行:
    1. curl -4 ifconfig.me; echo
    複製代碼

    你會看到一個像 `114.32.80.149` 的 IPv4 位址。

    2-2 判斷你有沒有被 CGNAT 擋住(這一步非常重要)

    比對兩個東西:


    • 上一步查到的對外 IP
    • 路由器管理頁面上顯示的 WAN IP(有些機種叫「廣域網路 IP」)


    兩個一樣 → 你有真實的對外 IP,可以做埠轉發,往下走。

    兩個不一樣,或路由器的 WAN IP 落在下面這些範圍:
    1. 10.0.0.0    ~ 10.255.255.255
    2. 172.16.0.0  ~ 172.31.255.255
    3. 192.168.0.0 ~ 192.168.255.255
    4. 100.64.0.0  ~ 100.127.255.255   ← 這段是 CGNAT 的專用網段
    複製代碼

    → 你被電信業者的 CGNAT 擋住了,埠轉發完全無效。傳統做法救不了,因為問題不是 IP 會變,是你根本沒有一個外面連得進來的位址。

    中華電信 HiNet 的使用者有一個免費解法:HiNet 家用寬頻預設給 8 個浮動 IP,可以到 HiNet 的客服後台申請改成「1 個固定 IP + 7 個動態 IP」,免費。路徑是服務總覽 → 寬頻 → HiNet 非固定制固定IP申請。

    ⚠ 申請完一定要改 PPPoE 帳號:從 `8123xxxx@hinet.net` 改成 `8123xxxx@ip.hinet.net`(多了 `ip.`)才會拿到固定 IP。帳號沒改的話申請了也沒用。這個帳號要設在路由器上,不要在電腦上撥號。

    注意方案限制:官網載明適用非固定制非對稱頻寬 5M/384K 以上,但 500M/250M 與 1G/600M 不適用。第四台業者(即使宣稱用中華的線路)也不適用。

    真的被 CGNAT 卡死的話,唯一的路是租一台有公網 IP 的小 VPS 當中繼,由家裡主動連出去。那是另一個題目,這篇不涵蓋。

    2-3 浮動 IP 就設 DDNS

    對外 IP 是真的但會變的話,設一個動態網域名稱。最簡單的是用路由器內建的:


    • 路由器管理頁 → 找 DDNS 或 動態 DNS
    • 選一家服務商(華碩路由器有免費的 asuscomm.com;其他常見的是 No-IP、DuckDNS)
    • 取一個名字,套用


    你會看到路由器顯示一個像 `myhome.asuscomm.com` 的網址,狀態是「已成功註冊」。

    驗證它真的指到你家:
    1. nslookup myhome.asuscomm.com
    複製代碼

    回傳的 Address 要跟第 2-1 步查到的對外 IP 一樣。 不一樣的話等五分鐘讓 DNS 更新,還是不一樣就是 DDNS 沒設對。

    第三步:寫 docker-compose.yml

    在主機上建一個資料夾:
    1. mkdir -p ~/wg-easy && cd ~/wg-easy
    複製代碼

    建檔 `docker-compose.yml`,整份內容是這樣(這是官方 repo 的版本,加上兩個一定要有的東西):
    1. volumes:
    2.   etc_wireguard:
    3. services:
    4.   wg-easy:
    5.     image: ghcr.io/wg-easy/wg-easy:15
    6.     container_name: wg-easy
    7.     environment:
    8.       - INSECURE=true
    9.     networks:
    10.       wg:
    11.         ipv4_address: 10.42.42.42
    12.         ipv6_address: fdcc:ad94:bacf:61a3::2a
    13.     volumes:
    14.       - etc_wireguard:/etc/wireguard
    15.       - /lib/modules:/lib/modules:ro
    16.     ports:
    17.       - "51820:51820/udp"
    18.       - "51821:51821/tcp"
    19.     restart: unless-stopped
    20.     cap_add:
    21.       - NET_ADMIN
    22.       - SYS_MODULE
    23.     sysctls:
    24.       - net.ipv4.ip_forward=1
    25.       - net.ipv4.conf.all.src_valid_mark=1
    26.       - net.ipv6.conf.all.disable_ipv6=0
    27.       - net.ipv6.conf.all.forwarding=1
    28.       - net.ipv6.conf.default.forwarding=1
    29. networks:
    30.   wg:
    31.     driver: bridge
    32.     enable_ipv6: true
    33.     ipam:
    34.       driver: default
    35.       config:
    36.         - subnet: 10.42.42.0/24
    37.         - subnet: fdcc:ad94:bacf:61a3::/64
    複製代碼

    ⚠⚠ `INSECURE=true` 這一行是整篇最重要的一行

    官方的 compose 檔裡這一行是註解掉的,而網路上的教學幾乎都直接照抄那份。

    少了它會發生什麼:你開 `http://192.168.1.20:51821`,網頁打得開、登入畫面出得來,輸入正確的帳號密碼按下去,畫面直接回到登入頁。沒有「密碼錯誤」,沒有紅字,什麼都沒有。你會去懷疑密碼打錯、去重設、去刪容器重來,而問題是 v15 預設拒絕在非 HTTPS 連線下登入。

    什麼時候該把它拿掉:你在前面架了反向代理(Traefik、Caddy、Nginx Proxy Manager)並用 HTTPS 存取的時候。wg-easy 本身不提供 HTTPS。

    其他幾個參數在做什麼:

    以下還有約 61% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-27 02:16 , Processed in 0.135239 second(s), 25 queries .

    快速回覆 返回頂部 返回列表