我的網路是浮動 IP,假設已經設定好 DDNS,使用的是 deSEC
首先安裝套件,【系統 - Software】按 Update lists... 更新列表,如圖

安裝完成後,【系統 - 重新啟動】執行重新啟動,重開機後就會認得 WireGuard 協定
接著到【網路 - 介面】
- 新增介面

- 一般設定

- 進階設定

- 防火牆設定

- 對等點

- 編輯對等點

一般設定
- 產生新的金鑰對,生成公鑰與私鑰
- 監聽連接埠,這邊選擇預設的 51820
- IP 位址,填入 VPN 網段,這裡選 10.14.0.1/24,不勾選無主機路由,openwrt 會新增這個網段路由,我們需要使用它與 Peer 溝通
不勾選使用預設閘道,我們上網是靠 wan
防火牆設定
在 --自訂-- 處輸入名稱 wireguard,按 Enter
編輯對等點
- 輸入端點的名稱
- 產生新的金鑰對,生成公鑰與私鑰
- 產生預先共用金鑰,PresharedKey (PSK),可以加強連線安全
- 允許的 IP,填入端點的位址 10.14.0.99/32
- 路由允許的 IP,如果有其他允許的 IP 網段,勾選建立路由
最後儲存 -> 儲存並應用,建立 wg0 介面

- 一般設定

- 編輯區域

- Traffic Rules

- 編輯規則

【網路 - 防火牆 - 一般設定】
- 輸出輸入都選 accept,讓路由器能從這個 zone 連出,Peer 也能連入
- wireguard 要去其他區網或外網,就勾選 Allow forward to destination zones
wireguard 要允許其他區網通過,就勾選 Allow forward from source zones - 勾選 MSS clamping
- 勾選 IPv4 Masquerading,如果區網要訪問 Peer,可偽裝源位址為 wg0 IP,對端就能認得回來的路
【網路 - 防火牆 - Traffic Rules】
如圖設定接受外網連入,這樣才能建立 VPN 連線

最後把設定貼到客戶端軟體,就可以連線了
[Interface]
貼 Server 新增的對等點資訊
[Peer]
貼 Server 的資訊,其中 PresharedKey 是在對等點中產生的,每個客戶端都會有一個預先共用金鑰。AllowedIPs 是 Peer 負責的網段,假如有很多 Peers,WireGuard 會判斷哪個網段該走哪個 Peer 並幫我們傳送,我們要做的是在主機把該網段的流量路由到 WireGuard,不過 Windows 客戶端軟體已經幫我們把這步做好了,不用自己來

socket: improve reply-to-src algorithm
We store the destination IP of incoming packets as the source IP of
outgoing packets. When we send outgoing packets, we then ask the routing
table..... If not, we fall back to the default IP address.
WireGuard 收到連線時,會記住連入的目標 IP,並嘗試用它當回應的來源 IP
但有一個例外,當他架在路由器上,如果我們在區網想跟他連線,用外網 IP,他沒辦法用外網 IP 回應,會根據路由表決定源位址來回應,所以你連他 (192.168.1.100, x.y.z.w) 他會回你 (192.168.1.1, 192.168.1.100),連線會成功,WireGuard 接受這種情形。但這樣有兩個問題,有些防毒軟體的防火牆如 ESET,會阻擋這種連線,連線就會失敗,再來就是,如果在第二層子路由器連他,也會有問題,因為區網電腦會收不到回應。
像是這樣:
(192.168.8.180,IP) -> (192.168.2.220,IP) -> 主路由器收到然後回應我們希望這樣:
(192.168.2.1,192.168.2.220) -> 子路由器收到無法回應給 192.168.8.180
(192.168.8.180,IP) -> (192.168.2.220,IP) -> (192.168.2.220,192.168.2.1)
(192.168.2.1,192.168.2.220) -> (IP,192.168.2.220) -> (IP,192.168.8.180)
為了讓多層子路由器仍然可以連線成功,需要在主路由器把它改為內網位址,可以用 DNS 轉換,可以用 Port Forwards 轉換,這裡就看看連接埠轉發:
- 圖1

- 圖2

- 圖3

- 圖4

這個轉發會做兩件事,看圖4
1) 他把外網進來的連線目標 IP 改寫為 lan IP
2) 他設定一個 reflection,把 lan 進來的連線,目標為 wan IP 的改寫為 lan IP
我們需要第二條,因為目標位址被改為 lan IP,WireGuard 回應時會是 (lan IP, client IP),然後因為第二條 un-NAT 回 (wan IP, client IP),這樣子路由器收到後,就會繼續 un-NAT,然後回傳給客戶端,不管幾層都可以連線。
按理說我們不需要第一條,但 LuCI 會買一送一,無法拒絕。





































































































