Using WireGuard directly offers better performance than using Tailscale. Tailscale does more than WireGuard, so that will always be true. We aim to minimize that gap, and Tailscale generally offers good bandwidth and excellent latency, particularly compared to non-WireGuard VPNs.
執行指令登入到headscale 打開dos, 或是powershell (希望不用做這動作, 不然麻瓜會生氣) ** powershell or cmd run as administrator
cd C:\Program Files\Tailscale
tailscale login --login-server https://headscale.test.com --exit-node=<headscale ip 可為headscale server local ip> --exit-node-allow-lan-access=true
Site A
對外IP: 192.168.1.1 , udp port: 65536
內網: 10.192.130.15/24
Wireguard Tunnel ip : 10.1.0.1/24
Site B
對外IP: 192.168.2.1 , udp port: 65536
內網: 191.1.0.0/24
Wireguard Tunnel ip : 10.1.0.2/24
安裝步驟:
安裝外掛程式 登入OPNsense , System -> Firmware -> Plugins 選擇安裝 os-wireguard-go
啟用WireGuard VPN
新增Local 設定 Name , Listen Port , tunnel ip . 裡面的 public key , private key 先不用輸入,等新增後會自動出現
新增Endpoints 這部分的資訊為對方服務器資訊, 以我們是Site A來說, 要輸入 Site B相關資訊
綁定Local與Endpoints 我們回過頭來修改Local, 設定其與Endpoints綁定
設定防火牆, 讓對方能存取我們的udp port
設定對方內網網段,與tunnel 網段(可以跟多個site互聯) , 讓內網與tunnel ip 能通過wireguard 介面, 進而互相溝通
另外一邊服務器, 請務必也用OPNsense , 不要像我這樣走冤枉路, 一邊OPNsense, 一邊Linux, 或是docker, 作法同上步驟, 資料記得不可一模一樣, 每個服務器ip, udp port , public key, 都不一樣
我打算用OPNsense取代目前老舊的硬體防火牆(Fortigate 80C) , 後來透過OPNsense 外掛, 試了suricata, AdGuard Home, tailcale , wireguard , 總共花了我2周的時間, 對於VPN, site to site , point to site 也都玩了一輪.
tailscale 做site to site 只能以NAT方式完成, 這會有問題, 以鼎新tiptop GP 5.1來說就無法回撥source ip 的6400 port ,算是假的site to site vpn , 就算官方宣稱加上 –snat-subnet-routes=false 可以辦到, 但我怎麼試都失敗, 網路上大部分也都不在意,看來tailscale使用群更專注在翻牆功能.
wireguard 設定檔簡單解釋如下, 檔案為/etc/wireguard/wg0.conf, 該設定檔可形成 site to site , 但我在Linux設定一直失敗, 只能用NAT方式,最後發現OPNsense才能做到真正的site to site 功能, 太怪了!
[Interface]
# Site A
# private key
PrivateKey = CG0svjlK7NdZ3U0MdYQzBHx7adDi1p2UlhPFXdH4HHw=
# Site A Tunnel IP
Address = 10.1.0.1/32
ListenPort = 51820
[Peer]
# Site B public key , tunnel ip 10.1.0.2/32
PublicKey = Jkdn621+amuCV8Wj7YQLMydtE9GO5kpq+oZdK/17XAY=
# 允許Site B內網, 以及Site B的tunnel ip
AllowedIPs = 10.1.0.2/32,10.176.5.0/24
Endpoint = <Site B 對外ip>:51820
PersistentKeepalive = 25
[Peer]
# Site C public key , tunnel ip 10.1.0.3/32
PublicKey = VaVaSY6SkizEhexj9vSTkzKgaIo5MwMnulu6I/D+iAI=
# 允許Site C內網, 以及Site C的tunnel ip
AllowedIPs = 10.1.0.3/32,192.1.0.0/22
Endpoint = <Site B 對外ip>:51820
PersistentKeepalive = 25