1. Openwrt 如何設置 Wireguard 呢同樣的參數電腦客戶端可以正常使用,但是到路由器里設置,卻無法使用
OpenWrt的Wireguard在安裝後,只需設置
a)一個監聽介面,用於連接;需要私鑰、監聽埠、IP地址
b)一個peer,用於認證;需要公鑰、允許網段
運行vim/etc/config/network,添加以下信息:
config interface 'wgn'
option proto 'wireguard'
option private_key '私鑰'
option listen_port '埠號'
list addresses 'IPv4/IPv6地址,CIDR格式'
config wireguard_wgn
option public_key '公鑰'
list allowed_ips '允許的網段,CIDR格式'
密鑰可以在OpenWrt下運行以下命令生成
mkdir -p /etc/wireguard
umask 077 && wg genkey > /etc/wireguard/server-privkey
cat /etc/wireguard/server-privkey | wg pubkey > /etc/wireguard/server-pubkey
cat /etc/wireguard/server-pubkey
cat /etc/wireguard/server-privkey
也可利用在其他操作系統上生成的密鑰
不要忘記開放埠
IPv4
iptables -A INPUT -p udp -m udp --dport #監聽埠 -j ACCEPT
IPv6
ip6tables -A INPUT -p udp -m udp --dport #監聽埠 -j ACCEPT
2. RouterOSv7WireGuard隧道協議
RouterOS v7加入了WireGuard,WireGuard是一個極簡而快速的加密VPN協議。其設計目標是比IPsec更快、更精簡和高效,同時性能要比OpenVPN提升很多。WireGuard被設計成一種通用VPN,可以在多個平台上運行,適合許多不同的環境。最初是為Linux內核發布的,後支持跨平台(Windows, macOS, BSD, iOS, Android),能進行廣泛的部署。
從官方測試性能看,WireGurad對於IPsec優勢非常明顯,而對於OpenVPN幾乎是碾壓。
在部署方面,WireGurad各個節點是Peer對等體的概念,而非是Server與Client關系,相互之間是對等的,一個節點既可以是發起者,鋒凳也可以是接收者,比如網上提到VPN的拓撲方案中,可以是點對點,點對多點的中心覆蓋,而WireGuard不一樣了,不僅可以點對點,陪基態也可以點對多點,每個節點同時可連接多個 Peer,看到過有人通過WireGuard建立全互聯模式,三層的Mesh網狀網路。
WireGuard只支持UDP協議,不支持傳統的TCP-over-TCP隧道,因為TCP網路性能並不理想,如果對TCP連接有需求,將wiredguard的UDP包轉換為TCP,並可以使用如udptunnel和udp2raw來協助完成。
關於NAT穿透,通常情況下,WireGuard網路在未被使用的情況下,會盡量保持「安靜」。在大多數情況下,它只在Peer對等體,希望發送數據包時傳輸數據,當它沒有被要求發送數據包時,它就停止發送,直到再次被請求。在點對點公網IP連接的網路環境是這樣的,然而,當一個Peer端位於NAT或防火牆之後時,即使它不發送任何數據包的情況下,也希望能接收傳入的數據包。因為NAT和防火牆會跟蹤「會話連接」,他必須通過定期發送數據包來維持NAT/防火牆連接會話映射的有效,即UDP的timeout時間,即被稱為keepalive。WireGuard可以開啟此選項,每隔一秒向對端點發送一個keepalive報文,當然適用於各種NAT/防火牆的合理間隔在25秒。默認設置keepalive是關閉狀態,因為公網IP連接的用戶不需要這個功能。
WireGuard加密使用ChaCha20,驗證使用Poly1305,它幾乎在所有通用CPU上的運行速度都非常快。雖然未被專用硬體支持(IPsec支持硬體加速),但在CPU上的矢量指令(vector instructions)與AES-NI指令處於相同的優先順序(有時甚至更快)。
總結下WireGuard的特點:
是基於UDP協議連接,具備網路性能優勢
運行在Linux內核,在性能上優於IPsec和OpenVPN
每個節點通過公鑰識別進行驗證,加密採用的是ChaCha20Poly1305。
每個節點是平等的,既可以作為server,又可以作為client
兩端僅需要一個配置公網IP,另一端在nat後也能連接,nat後的節點,僅需要對端節點公鑰,以及公網IP (endpoint)和埠(endpoint port),而公網節點只需要填寫連接端的公鑰即可
從測試結果看未使用IPsec加密的L2TP的傳輸帶寬性能最好,超過了WireGuard,但在使用IPsec的L2TP加密後,性能遠不如WireGuard,我平時喜歡使用SSTP在RouterOS設備之間建立連接,因為SSTP埠靈活,在RouterOS建立隧道無需證書,但SSTP的傳輸性能在RouterOS支持的所有隧道協議中性能是最差的,現在蘆源v7有了WireGuard就不一樣了。