之前在路由器上使用 Zerotier 組網,效果還是不錯的。但是兩臺路由器都是通過打洞連接的,效果可能并不是特別穩定。恰好我的兩臺路由器都是有 IPv6 地址的,那么何不試試使用 IPv6 地址直連的方式來進行組網呢?
安裝 WireGuard 依賴
在兩臺路由器上均安裝相關的依賴,只需要安裝 luci-i18n-wireguard-zh-cn 系統即可自動將所有依賴安裝完畢,完成之后必須要重啟路由器。
opkg update
opkg install luci-i18n-wireguard-zh-cn
重新登錄路由器管理頁面,就可以在 狀態 – WireGuard 中看到 WireGuard 連接的狀態。
配置 WireGuard 接口
若使用 N 臺路由器互相連接,則需要在每臺路由器上設置 N-1 個對端,這樣可以確保任意兩臺路由器之間能互相連接。此處假設使用兩臺路由器來配置互相連接,每臺路由器上均需要設置一個對端。
路由器
A 的網段為 192.168.1.0/24,路由器 B 的網段為 192.168.2.0/24,我們選擇為 WireGuard 網絡設置網段
172.16.0.0/16,路由器 A 在 WireGuard 網絡中的地址為 172.16.1.1,路由器 B 在 WireGuard
網絡中的地址為 172.16.2.1。
路由器 A
進入 網絡 – 接口 頁面中,添加新的接口,接口名稱填入 wg,協議需要選擇 WireGuard VPN。
在 常規設置 中,點擊生成密鑰按鈕,私鑰欄中會自動生成內容,監聽端口填寫 12000,IP 地址填入 172.16.1.1/16,注意此處最好是帶上網段。
在 高級設置 中,MTU 填入 1280,此處如果填大了會讓兩端連接速度變慢。
在 防火墻設置 中,新建一個 vpn 區域。
保存并應用,創建端口。
在 狀態 – WireGuard 中可以看到路由器 A 的公鑰,復制下來,等下要填入路由器 B 的對端設置中。
回到 網絡 – 接口 中,編輯 wg 接口,在 對端 中,添加一個對端,描述可以寫 OpenWrt2,公鑰中填入路由器 B 的公鑰(參考本文后面路由器 B 的設置獲得公鑰),允許的 IP 中填入 172.16.2.1/32 和 192.168.2.0/24,勾選路由允許的 IP,端點主機填入對端路由器的公網地址,端點端口填入對端路由器的端口 12000,持續 Keep-Alive 中可以填入自己喜歡的大小,如 15,保存并應用所有設置。
進入 網絡 – 防火墻 – 常規設置 – 區域 中,編輯 lan 區域,將允許轉發到目標區域勾選上 vpn 區域,將允許來自源區域的轉發也勾選上 vpn 區域,保存;將 vpn 區域的轉發改為接受,保存并應用設置。
在 網絡 – 防火墻 – 通信規則 頁面中,新增一項規則。
在 常規設置 中,名稱填寫 Allow-WireGuard,協議保持默認 TCP+UDP 即可,源區域選擇 wan,目標區域選擇 設備(輸入),目標端口調入 WireGuard 監聽端口 12000,操作選擇接受,保存防火墻設置。
回到 網絡 – 接口 頁面中,重啟 wg 接口。
路由器 B
進入 網絡 – 接口 頁面中,添加新的接口,接口名稱填入 wg,協議需要選擇 WireGuard VPN。
在 常規設置 中,點擊生成密鑰按鈕,私鑰欄中會自動生成內容,監聽端口填寫 12000,IP 地址填入 172.16.2.1/16,注意此處最好是帶上網段。
在 高級設置 中,MTU 填入 1280,此處如果填大了會讓兩端連接速度變慢。
在 防火墻設置 中,新建一個 vpn 區域。
保存并應用,創建端口。
在 狀態 – WireGuard 中可以看到路由器 B 的公鑰,復制下來,等下要填入路由器 A 的對端設置中。
回到 網絡 – 接口 中,編輯 wg 接口,在 對端 中,添加一個對端,描述可以寫 OpenWrt1,公鑰中填入路由器 A 的公鑰(參考本文前面路由器 A 的設置獲得公鑰),允許的 IP 中填入 172.16.1.1/32 和 192.168.1.0/24,勾選路由允許的 IP,端點主機填入對端路由器的公網地址,端點端口填入對端路由器的端口 12000,持續 Keep-Alive 中可以填入自己喜歡的大小,如 15,保存并應用所有設置。
進入 網絡 – 防火墻 – 常規設置 – 區域 中,編輯 lan 區域,將允許轉發到目標區域勾選上 vpn 區域,將允許來自源區域的轉發也勾選上 vpn 區域,保存;將 vpn 區域的轉發改為接受,保存并應用設置。
在 網絡 – 防火墻 – 通信規則 頁面中,新增一項規則。
在 常規設置 中,名稱填寫 Allow-WireGuard,協議保持默認 TCP+UDP 即可,源區域選擇 wan,目標區域選擇 設備(輸入),目標端口調入 WireGuard 監聽端口 12000,操作選擇接受,保存防火墻設置。
回到 網絡 – 接口 頁面中,重啟 wg 接口。
完成
此時,稍等片刻,在兩臺路由器的 狀態 – WireGuard 中即可看到另外一臺路由器的連接信息。
此時兩端路由器下的設備就都可以訪問另一端路由器下的設備了,就像是在同一個局域網中。
如果需要更省心的操作,可以選擇參考以下內容。
配合 DDNS 使用
當其中一個路由器重新連接網絡之后,公網地址可能會發生變化,此時可能會無法連接 WireGuard,不過我們可以配合 DDNS 使用。
兩臺路由器均配置好 DDNS 之后,可以在 WireGuard 的對端配置中將端點主機的地址由 IP 地址更換為域名。
DDNS 配置好之后,這樣即使路由器更換了 IP 地址也可以重新連接上。
配合 IPv6 使用
WireGuard 可完美兼容 IPv6 使用,只需要 DDNS 的域名只有 IPv6 地址記錄即可,在這種情況下,WireGuard 就使用 IPv6 與其他路由器連接。只需將上文圖中 172.27.0.0/16 的地址替換為 DDNS 域名即可。
IPv6 DDNS 的配置可以參考另一篇文章:OpenWrt IPv6 DDNS
配合 WatchCat 使用
當出現問題無法連通對端路由器的時候,如果有自動化的操作可以直接重啟接口,就很方便了,省去手動重啟操作。
opkg update
opkg install watchcat luci-app-watchcat luci-i18n-watchcat-zh-cn
在
服務 – WatchCat 頁面中,增加一項配置,模式選擇“重啟接口”(有些固件可能會翻譯為“重啟實例”),周期可以設置為 1m,在路由器 A
上安裝的 WatchCat 就填寫路由器 B 的地址 192.168.2.1,在路由器 B 上安裝的 WatchCat 就填寫路由器 A
的地址 192.168.1.1,檢查間隔填寫 10s,接口的話就選擇 wg,其余保持不動,保存應用所有設置。
這樣,在路由器發現無法 ping 通對端路由器 1 分鐘之后將會自動重啟 wg 接口,保證兩臺路由器之間持續連接。
下一篇:virsh命令詳解