差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:wireguard [2023/10/28 11:27] – [修改 Listen Port] jonathantech:wireguard [2024/04/12 20:53] (目前版本) – [host Alpine 升級到 3.19 之後啟動異常解決方法] jonathan
行 1: 行 1:
-====== [Draft]在 Alpine 內安裝 WireGuard VPN (Docker) ======+====== 在 Alpine 內安裝 WireGuard VPN (Docker) ======
   * 安裝環境   * 安裝環境
     * VM : 1vCore / 1G RAM / 16G SSD     * VM : 1vCore / 1G RAM / 16G SSD
-    * OS : Alpine 3.18 - alpine-standard-3.18.4-x86_64.iso  +    * OS : Alpine 3.18 - alpine-standard-3.18.4-x86_64.iso
-  * 預計採用 [[https://hub.docker.com/r/linuxserver/wireguard|linuxserver/wireguard]] 的 docker image  +
   * 先參考 [[tech/alpine_docker]]   * 先參考 [[tech/alpine_docker]]
 +
 +===== 採用 weejewel/wg-easy 版本(包含 WebUI) =====
 +  * 採用 [[https://hub.docker.com/r/weejewel/wg-easy|weejewel/wg-easy]] 的 docker image 
 +  * 執行以下語法 <cli>
 +vi docker-compose.yml
 +</cli>修改以下有標註 #optional 的參數 <file>
 +version: "3.8"
 +services:
 +  wg-easy:
 +    environment:
 +      # Required:
 +      # Change this to your host's public address
 +      - WG_HOST=wgvpn.ichiayi.com
 +
 +      # Optional:
 +      - PASSWORD=myPassword
 +      - WG_PORT=51820
 +      - WG_DEFAULT_ADDRESS=10.13.12.x
 +      - WG_DEFAULT_DNS=192.168.11.6
 +      # - WG_MTU=1420
 +      # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
 +      # - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
 +      # - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
 +      # - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
 +      # - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
 +
 +    image: weejewel/wg-easy
 +    container_name: wg-easy
 +    volumes:
 +      - ./etc_wireguard:/etc/wireguard
 +    ports:
 +      - "51820:51820/udp"
 +      - "51821:51821/tcp"
 +    restart: unless-stopped
 +    cap_add:
 +      - NET_ADMIN
 +      - SYS_MODULE
 +    sysctls:
 +      - net.ipv4.ip_forward=1
 +      - net.ipv4.conf.all.src_valid_mark=1
 +</file>
 +  * 啟動服務 <cli>
 +docker compose up -d
 +</cli>
 +  * 可以使用瀏覽器 http://server-ip:51821 輸入設定密碼(myPassword)登入管理介面進行 vpn 使用者管理
 +  * 詳細設定參數請參考 - https://github.com/wg-easy/wg-easy#options
 +
 +==== 修改 Listen Port ====
 +  * Exp. 將原本 Listen Port udp/51820 改成 udp/123 (預設 ntp port)<cli>
 +vi docker-compose.yml
 +</cli>修改以下 ports 設定<file>
 +:
 +      - WG_PORT=51820
 +:
 +    ports:
 +      - "123:51820/udp"
 +:
 +</file>
 +
 +===== FAQ =====
 +  - host Alpine 升級到 3.19 之後啟動時 log 出現 <cli>
 +:
 +iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT;
 +modprobe: can't change directory to '/lib/modules': No such file or directory
 +modprobe: can't change directory to '/lib/modules': No such file or directory
 +iptables v1.8.3 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
 +Perhaps iptables or your kernel needs to be upgraded.
 +:
 +</cli>
 +    * Ans : 需要在 host (Alpine 3.19) 執行以下指令<cli>
 +modprobe ip_tables
 +echo 'ip_tables' >> /etc/modules
 +</cli>並重新開機即可解決
 +    * 參考 - https://github.com/wg-easy/wg-easy/discussions/976 
 +
 +===== 採用 linuxserver/wireguard 版本(無 WebUI) =====
 +  * 採用 [[https://hub.docker.com/r/linuxserver/wireguard|linuxserver/wireguard]] 的 docker image 
   * 執行以下語法 <cli>   * 執行以下語法 <cli>
 vi docker-compose.yml vi docker-compose.yml
行 42: 行 117:
 </cli> </cli>
  
-===== 修改 Listen Port =====+==== 修改 Listen Port ====
   * Exp. 將原本 Listen Port udp/51820 改成 udp/123 (預設 ntp port)<cli>   * Exp. 將原本 Listen Port udp/51820 改成 udp/123 (預設 ntp port)<cli>
 vi docker-compose.yml vi docker-compose.yml
行 53: 行 128:
   * 另外對於產生 peer 設定檔範本也需要修改 <cli>   * 另外對於產生 peer 設定檔範本也需要修改 <cli>
 vi data/config/templates/peer.conf vi data/config/templates/peer.conf
-</cli>將 Endpoint 的 port 改成 123<file>+</cli>將 Endpoint 的 port 改成 123 <file>
 : :
 [Peer] [Peer]
 : :
-Endpoint = wgvpn.ichiayi.com:123+Endpoint = ${SERVERURL}:123
 : :
 </file> </file>
  
-===== 建立指定 Client 的憑證 =====+==== 建立指定 Client 的憑證 ====
   * Exp. 將原本 environment 的 PEERS=1 改成要建立 Client 的 id 清單, Exp. jonathan,lin,lin2,stanley,jerry<cli>   * Exp. 將原本 environment 的 PEERS=1 改成要建立 Client 的 id 清單, Exp. jonathan,lin,lin2,stanley,jerry<cli>
 vi docker-compose.yml vi docker-compose.yml
行 78: 行 153:
 coredns         peer_jerry      peer_jonathan   peer_jonathan2  peer_lin        peer_lin2       peer_lintsai    peer_stanley    server          templates       wg_confs coredns         peer_jerry      peer_jonathan   peer_jonathan2  peer_lin        peer_lin2       peer_lintsai    peer_stanley    server          templates       wg_confs
 </cli> </cli>
-  * 提供給 Client QRCode 的方式 Exp. lin2 <cli>+  * 提供給 Client key 兩個方式 Exp. lin2  
 +    - 連線檔案方式 <cli> 
 +wgvpn:~# cat ./data/config/peer_lin2/peer_lin2.conf 
 +</cli> 
 +    - QRCode 的方式<cli>
 wgvpn:~# docker exec -it wireguard /app/show-peer lin2 wgvpn:~# docker exec -it wireguard /app/show-peer lin2
 </cli> </cli>
  
 +==== 刪除特定 Client 的憑證 ====
 +  * Exp. 將原本 environment 的 PEERS= 將特定 Client 的 id 刪除, Exp. 刪除 lin2 : PEERS=jonathan,lin,lin2,stanley,jerry -> PEERS=jonathan,lin,stanley,jerry<cli>
 +vi docker-compose.yml
 +</cli>修改如下設定<file>
 +:
 +    environment:
 +    :
 +      - PEERS=jonathan,lin,stanley,jerry
 +:
 +</file>
 +  * 重新啟動 docker compose 之後, lin2 就無法使用
 +  * 如果誤刪除直接加回 lin2 重啟 docker compose 之後, lin2 就可以恢復使用, 主要是因為 ./data/config/ 內的 peer_lin2 並沒有被移除
 +  * 如果確定要將 lin2 憑證移除, 就要將 data/config 內的 peer_lin2 目錄刪除<cli>
 +rm -rf ./data/config/peer_lin2
 +</cli>這樣之後若有重建 lin2 這相同 Client id , 就會產生新的憑證
 +
 +==== 顯示目前 Client 憑證與連線狀態 ====
 +  * 主要是使用 wg 這命令來查詢 Exp. <cli>
 +wgvpn:~# docker exec -it wireguard wg
 +interface: wg0
 +  public key: h6hkpJqDrUhS5Zw4tLGnzd/Mt58PyzDfEO9G5s3d/gE=
 +  private key: (hidden)
 +  listening port: 51820
 +
 +peer: 2e2goKlqaJ05iCLA5MR3WyD/OgPJUIbw/6oggcn4Q3U=
 +  preshared key: (hidden)
 +  endpoint: 39.9.230.151:45592
 +  allowed ips: 10.13.13.7/32
 +  latest handshake: 4 minutes, 41 seconds ago
 +  transfer: 1.68 MiB received, 8.01 MiB sent
 +
 +peer: H1n/9a0yXzM66YtYvjP+k3SAcncArjurXAE2MjDU4jo=
 +  preshared key: (hidden)
 +  allowed ips: 10.13.13.3/32
 +
 +peer: Y+/LcaNKnqEJplR4qOiSI9pUtpWAm0C6jgwhRoOlrQE=
 +  preshared key: (hidden)
 +  allowed ips: 10.13.13.2/32
 +
 +peer: SNh3eIl8s76oIicaTDnW0C8McuRqL+jS8kxAo0NgYRs=
 +  preshared key: (hidden)
 +  allowed ips: 10.13.13.5/32
 +
 +peer: rOiBsv7yGMm5UtC+zLLj0a2fyWYTssaYMygSgKFmTzQ=
 +  preshared key: (hidden)
 +  allowed ips: 10.13.13.4/32
 +
 +peer: GLr/5jTUv9ZYmIRRIIFp5gZpZGP1UdSPASagUCuv2lg=
 +  preshared key: (hidden)
 +  allowed ips: 10.13.13.6/32
 +</cli>
 +
 +<note important>
 +  * 目前由修改 docker-compose.yml 用重啟 docker compose 命令的維運方式要注意:
 +    - 新增刪除 Client 修改 docker-compose.yml 都需要重啟 docker compose 才能生效 
 +    - 重啟過程的這幾秒鐘 WireGuard 會斷線無法提供服務
 +</note>
 +
 +==== 後續須持續了解項目 ==== 
 +  * WireGuard Web UI 方案 - https://github.com/ngoduykhanh/wireguard-ui/ (初步使用 [[https://github.com/ngoduykhanh/wireguard-ui/tree/master/examples/docker-compose|docker-compose]] 範例修改, 還無法正常運作)
 +  * Client 端設為 [[https://www.utunnel.io/help/what-is-split-routing|split routing]] 模式 
  
 ===== 參考網址 ===== ===== 參考網址 =====
   * https://github.com/linuxserver/docker-wireguard   * https://github.com/linuxserver/docker-wireguard
 +  * https://github.com/wg-easy/wg-easy
  
 {{tag>docker alpine vpn}} {{tag>docker alpine vpn}}
  
  • tech/wireguard.1698463666.txt.gz
  • 上一次變更: 2023/10/28 11:27
  • jonathan