iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
Arm Platforms

OpenWRT開源路由兩三事系列 第 23

Day_23 WireGuard

延伸昨天OpenVPN,介紹另一個VPN點對點的連接技術"WireGuard"。在這四千多行的程式中完成了更安全的加密與更簡易的配置,相較其他VPN方式又提升連接效能。
WireGuard在Linux 5.6版本併入核心,目前openwrt 21.02使用Linux kernel 5.4。不過都是基於linux的專案,因此使用與安裝沒有問題。且WireGuard已經可以在多個系統中運作,讓實務應用與配置度更靈活。

WireGuard是由Jason A. Donenfeld開發的開放原始碼VPN程式及協定[1],基於Linux核心實現,利用Curve25519進行金鑰交換,ChaCha20用於加密,Poly1305用於資料認證,BLAKE2用於雜湊函式運算[1],支援IPv4和IPv6的第3層。[2]WireGuard旨在獲得比IPsec和OpenVPN更好的效能[3]。

  • 安裝相關套件包
    opkg update
    opkg luci-proto-wireguard luci-app-wireguard luci-i18n-wireguard-zh-tw
    
  • 建立一個新資料夾,之後比較好分類
    mkdir /etc/wireguard
    cd /etc/wireguard
    
  • 修改資料權限(可省略)
    umask 077
  • 建立server的公/私鑰,可以看到生出兩個文件
    wg genkey |  tee wg.key | wg pubkey > wg.pub
    
名稱 說明
wg.key server 私鑰
wg.pub server 公鑰
  • 用cat指令複製與記下金鑰

    cat wg.key
    cat wg.pub
    
  • 回到luci介面設定(也可以使用命令介面)

    • 需要重啟網路介面,WireGuard的設定才會出現。
    • 也可以用指令/etc/init.d/network reload
  • 建立新介面

    • 填名字
    • 選協定"WireGuard"
    • 輸入server私鑰(wg.key)
    • 選擇port(1024-65535不要跟其他port重複)
    • 輸入新網域(不要與現有網域重複)
    • 高級設置預設值
    • 防火牆選VPN或直接選擇LAN

  • 防火牆規則

    • 目的是讓連進來的設備能連上其他設備
    • 192.168.20.1/24 為剛設定的網域
    • -o 後面看實際lan的介面。我這邊要選實體網卡"eth0",如果是橋接就是"br-lan"
    iptables -t nat -A POSTROUTING -s 192.168.20.1/24 -o eth0 -j MASQUERADE
    

  • 開啟防火牆port

    • openwrt為主路由時,可直接在防火牆設置。
      • 設定開啟剛剛選擇監聽的UDP port 號
    • 如果是次級路由等,需要先做port口的轉發
      • 把WAN UDP port 轉發到內網openwrt的port上
  • 建立客戶端金鑰

    • 一樣建立資料夾好區分
    mkdir 01
    cd 01
    
  • 建立共享金鑰,減少交握過程

    wg genpsk > wgclient.psk
    cat wgclient.psk
    
  • 建立client端金鑰

    wg genkey | tee wgclient.key | wg pubkey > wgclient.pub
    
名稱 說明
wgclient.key client 私鑰
wgclient.pub client 公鑰
```
cat wgclient.key
cat wgclient.pub
```
![](https://i.imgur.com/iUUfxT2.png)
  • 回到luci介面中設定
    • 新增Peers。並填入client公鑰、IP、允許的IP群、共享金鑰,最後保存啟用與重新啟動。如果多個用戶就重複步驟建立多個用戶

  • client 的設定檔製作
    • 填入以下資訊,並儲存成*.conf檔案。這檔案就要小心使用,避免公開傳輸。
[Interface]
Address = 192.168.20.2
PrivateKey = wgclient.key值
DNS = 路由器IP
[Peer]
PublicKey = wg.pub值  
AllowedIPs = 0.0.0.0 /0
PresharedKey = wgclient.psk值
如果啟用下面這行,表示只有192.168.2.0/24, 192.168.100.0/24這兩個IP走WireGuard
AllowedIPs = 192.168.2.0/24, 192.168.100.0/24
Endpoint = 實體IP:port(hotsname:port)
PersistentKeepalive = 25 

client端

  • 先到WireGuard下載對應作業系統的軟體

  • 匯入檔案並測試連線

    • win 使用tracert openwrt.org
    • linux 使用traceroute openwrt.org

Troubleshooting

目前也還在翻車中,有看到已連線,但資訊封包流向可能不正確或是防火牆設定錯誤,所以一直在斷線之中。

Ref


上一篇
Day_22 OpenVPN
下一篇
Day_24 Nginx/FRP/ZeroTie
系列文
OpenWRT開源路由兩三事30

尚未有邦友留言

立即登入留言