• 2

[RouterOS] 設定WireGuard VPN

好久沒有寫了,也順便多增加一個參考文章
雖然ROS推出這個已經算滿久的,這邊還是來寫一個吧

首先,WireGuard是2020年正式上線的VPN功能,從Linux Kernel 5.6開始內建支援
本身也是一種加密性質的VPN,但比起其他加密的VPN來說有以下幾個特點:
1. 由於Kernel的內建支援,VPN效率與整合性比起其他加密VPN好些,並且可以在路由器上普遍支援
2. OpenVPN與IPSec等都需要先建立金鑰與憑證,但WireGuard不需要如此麻煩
3. WireGuard沒有帳密機制,所有驗證都是透過Public Key

由於都是使用兩端的Public Key進行驗證的緣故,WireGuard在初始設定與保存設定上會稍微麻煩些
其設定方式類似OpenVPN,且在手機以及電腦上都要另外安裝軟體
與IPSec相比則更為簡單外,不同裝置上的相容性也很高
而在連線穩定上,個人目前測試幾天下來,也較OpenVPN穩定

而RouterOS也在v7.1版開始支援WireGuard
另外除了RouterOS外,部分廠牌的較新款Router比如ASUS也都開始支援WireGuard
有鑑於每個家庭的私有雲硬碟越來越多,網路速度也越來越快
但這陣子各類勒索軟體的威脅也不斷增加,透過VPN連回私有硬碟需求也是越來越多
多學習另一種VPN連線方式也是不錯的

OK,那麼開始吧,這邊會分為Server端、Client、手機端、還有電腦端的設定方式

Server端(RouterOS)

進入WireGuard功能,這邊先建立一個WireGuard介面
[RouterOS] 設定WireGuard VPN
依序選項是:
Name:介面名稱
Port:要給WireGuard介面使用的Port號碼
Private & Public Key:WireGuard伺服器端使用的金鑰。這邊可選擇不填,不填的話會自動產生Key。

WireGuard在連接時,是透過虛擬介面的方式去做傳輸,類似於OpenVPN的方式
因此建立好WireGuard介面後,還需要給它一個網段與IP
可到Addresses新增一個IP與網段給這個介面,這邊假設給的IP網段是192.168.60.1/24
[RouterOS] 設定WireGuard VPN

之後,先建立一個Firewall規則,允許WireGuard服務通過
Chain=input Protocol=UDP Port=<建立WG時所使用的port> Action=accept
[RouterOS] 設定WireGuard VPN

回到WG,把介面所產生的Public Key給複製起來,這個等等會需要設定在Client端上






Client端(RouterOS)

進入到WireGuard,照Server端一樣的做法建立一個WG介面並產生Public Key
並且同樣設定一組IP給WG介面,但網段必須相同,且IP不重複
[RouterOS] 設定WireGuard VPN

接著切換到Peers頁籤,建立一個新的Peer
[RouterOS] 設定WireGuard VPN
其依序是
Interface:此Peer使用的WG介面名稱
Public Key:遠端的Public Key資訊。這邊請填入Server端WG的Public Key資訊
Endpoint:遠端連線位址。這邊要輸入Server端的連線IP或者網址
Endpoint Port:遠端連線埠號。輸入跟Server端一樣的Port號即可

Allowed Address:設定連上後要使用WG訪問的IP範圍。這個指的是當連上Server端後要訪問的IP網段,如果設定為0.0.0.0/0則表示允許所有連線都走WG。而這邊的範例是設定連回Server端環境存取區網設備,因此設定的是Server端的區網網段。

Preshared Key:除了Public Key外還可以額外附加連線密碼,以確保Public Key在未知情況下洩漏時,確保不會被盜用VPN連線。
Persistent Keepalive:設定連線確認間隔。此為設定WG固定間隔多久時間發一次連線確認封包,一般設定60~90秒左右即可。


Client設定完成後,接著換Server端也要為這個Client建立一個Peer
建立方式與Client端設定的方式一樣,只是有幾個設定需要轉換:
Public Key:這邊要把Client端所產生的Public Key給填入
Endpoint & Endpoint Port:由於只是要從外面連回家的關係,故Server端不需要設定這些
Allowed Address:這邊是設定Client端會使用哪一個WG介面的IP連入。由於Client端已經設定192.168.60.2,因此這邊也要跟著設定一樣的IP。


Peer設定好後,接著要設定固定路由,把連接到Server端區網網段都導向到透過WG來走
[RouterOS] 設定WireGuard VPN

由於RouterOS到目前v7.5都還沒有任何WG的Log訊息,因此需要實際測試連線才知道有沒有通
可以先透過內建的Ping工具,測試有沒有辦法Ping到Server端的區網IP
[RouterOS] 設定WireGuard VPN
可以Ping到後,接著再到Firewall建立一個Source NAT規則,設定要連線到Server端區網的IP全都透過WG的IP
[RouterOS] 設定WireGuard VPN

這樣Client端連接RouterOS的電腦就都可以連到家中的區網了


這個是單純連回家的部分,下面兩個回應會再講如何設定Site to Site以及電腦/手機端的設定
2022-09-15 7:59 發佈
電腦端設定方式(以macOS為例)

雖然是以macOS當範例,但設定上其實大同小異,因此可直接對應

首先,可以先到這邊下載對應的Client端
https://www.wireguard.com/install/
Windows的部分可以直接從這下載
Mac的話可以直接點上面的AppStore連結或者直接在AppStore裡面搜尋


安裝後,先新增一個空白的Tunnel,新增的時候會自動產生一組Public Key
把這個Public Key給複製下來,然後在Server端的WG上建立另一個Peer


這次假設這台Mac會使用到的WG通道IP為192.168.60.4/32

回到WG連線程式,接著需要寫一下設定檔裡面的內容,可以對應1F在RouterOS設定的方式


[interface]
PrivateKey = [此為自動產生,請勿更動或拿掉]
Address = [WG介面的IP,必須與server端的peer設定一致]

[Peer]
PublicKey = [Server端wg使用的public key]
AllowedIPs = [設定哪些IP網段要透過WG連線]
Endpoint = [Server端的ip或網址]:[Server端使用的Port號]
PersistentKeepalive = [確認連線存活的間隔,建議與Server端的設定一致]


設定完成後就可以測試連線,連線後會是這樣的狀態




手機端設定方式(以iOS為例)

iOS也是差不多的方式,一樣在AppStore安裝WireGuard連線軟體
新增新的連線設定檔,並且跟在電腦端一樣的設定方式

唯一問題大概是要把上面的Public Key貼到RouterOS裡面會麻煩一點
這點也可以借助Mikrotik的App,先登入進Server端的RouterOS,然後在裡面先建立Peer,把Public Key給貼過去,再透過電腦的Winbox完成設定

Addresses:iOS端連線時使用的WG介面IP
Public Key:Server端的Public Key資訊
Endpoint:Server端連線資訊
Allowed IPs:設定哪些網段要透過WG去連線
PersistentKeepalive:確認連線存活的間隔

之後就可以啟用連線,並測試功能是否正常


另外連線軟體本身也可以設定自動連線功能,可以指定接有線/WIFI/行動網路的時候自動啟用WG通道
這個是保留區塊,要寫Site to Site設定方式
mark!
請問我設定好可以連到區網內部機器,但無法連到routerOS本身那台機器,是NAT/Firewall rule要增加嗎?
AKSN74
AKSN74 樓主

你連到RouterOS用的是他的區網IP嗎?我測試是正常。可能要看你的Firewall設定是否需要添加額外的規則

2022-09-15 10:51
這邊補充一個東西

當作WireGuard Client端的ROS,若都設定了電腦還是ping不到家中設備

但透過ROS的ping工具卻可以ping的話,那麼防火牆要多加一個規則

chain=srcnat src-address=[本地區網IP網段] dst-address=[遠端區網IP網段] action=src-nat to-addresses=[client端的wireguard ip]

然後把這規則拉到比Masquerade的規則還高

這樣就確保可以連線了
寫得超詳細!
我用2台RouterOS
照著操作可以成功連回server端的設備。
目前從client端 RouterOS中可以PING到server端router 內網ip,
但是反過來server端 RouterOS就PING不client的,
這樣是否正常?

但請問要可以從server連到client端的設備的話,
是否就是要看另一編作site to site才行?
1986coffee

感謝教學[拇指向上],前幾天照著那編已有成功建好

2023-04-08 11:43
AKSN74 wrote:
好久沒有寫了,也順便...(恕刪)


謝謝樓主分享!
已成功用CHR當client連上server端RB450gx4
但我遇到一個問題⋯
就是每當client網路斷了重新pppoe接上
wireguard不會自動連上
通常要刪除client的peer重新建立才又連上
否則就是等很久(幾天不一定)才自己接上
請問這個問題能怎麼解呢
mizuhomilk wrote:
請問這個問題能怎麼解呢
用script解決,client與server都需要加:
:local wgname   "wireguard1" 
:local wglocal "10.0.0.1"
:local wgremote "10.0.0.2"
:local wgport [/interface wireguard get $wgname listen-port]

:local count 0
:while ([:ping $wgremote src-address=$wglocal count=2]=0 && $count<5) do={
:set count ($count+1)
/interface wireguard peer disable [find interface=$wgname] ; :log error "Disable $wgname peer"
/ip firewall connection remove [find dst-address~$wgport || src-address~$wgport] ; :delay 2s
/interface wireguard peer enable [find interface=$wgname] ; :log warning "Enable $wgname peer"; :delay 12s
}
注意兩台router,wg的local與remote ip是相互對調的
gfx
gfx

只要start time的時間不同,尤其設為startup更要不得,兩邊就有時差無法同時驗證peer,或做出清除connection需求

2023-11-25 1:12
mizuhomilk

謝謝解說,又學到了[讚]

2023-11-25 13:41
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?