Wireguard作為新一代VPN的代表,可能很多同學(xué)都不太了解。和其它 VPN 技術(shù)一樣,我們可以使用它在家庭網(wǎng)絡(luò)和公司網(wǎng)絡(luò)之間搭建一條安全的信道,由此可以訪問(wèn)「內(nèi)網(wǎng)」的數(shù)據(jù)和應(yīng)用。本期智匯華云,我們?yōu)榇蠹規(guī)?lái)《Wireguard VPN 介紹與使用》。
Wireguard是目前使用起來(lái)最方便的,入門最快(內(nèi)核代碼只有4000行),性能最強(qiáng)的l3 vpn,即使是在樹莓派這種入門級(jí)嵌入式平臺(tái)上也能跑到600Mb/s的速度,并且配置wireguard比其他vpn都要方便的多,配置參數(shù)基本看上去就能理解,如果你以前配置過(guò)ipsec vpn,那一定會(huì)對(duì)一大堆參數(shù)感到莫名的頭疼,常常會(huì)因?yàn)檫B不上而查看log并調(diào)整參數(shù)。
Wireguard工作原理
內(nèi)核會(huì)創(chuàng)建出對(duì)應(yīng)的wireguard接口,這里取名為wg0,接口上配置了雙方通信的地址,這樣當(dāng)物理機(jī)上的程序使用10.66.66.1地址進(jìn)行訪問(wèn)10.66.66.2地址時(shí),內(nèi)核就會(huì)進(jìn)行數(shù)據(jù)包加密,并把加密之后的報(bào)文封包為udp報(bào)文,發(fā)送給對(duì)方,對(duì)方內(nèi)核會(huì)進(jìn)行報(bào)文解密,并把解密之后的數(shù)據(jù)包發(fā)送給用戶,完成vpn隧道的功能。
Wireguard概念介紹
Wireguard vpn中涉及到幾個(gè)基本概念:
Peer:wireguard中的節(jié)點(diǎn)。
私鑰(Private key):每個(gè)節(jié)點(diǎn)自己的私鑰,可以使用wg genkey生成。
公鑰(Public key):每個(gè)節(jié)點(diǎn)自己的公鑰,可以使用wg pubkey生成。
allowed-ips:定義每個(gè)節(jié)點(diǎn)允許通過(guò)的ip地址段。
這里公鑰使用的Curve25519的Diffie-Hellman函數(shù),由Daniel J. Bernstein教授設(shè)計(jì)。在密碼學(xué)中,它是最快的ECC曲線之一,并未被任何已知專利所涵蓋。并且wireguard為了防止被以后的量子計(jì)算機(jī)破解,還可以額外使用wg genpsk產(chǎn)生與共享密鑰來(lái)保證安全??紤]的真的是周到。
Wireguard 隧道創(chuàng)建流程非常簡(jiǎn)單,用一句話來(lái)說(shuō)就是,通過(guò)curve25519進(jìn)行ecdh密鑰交換得到雙方的對(duì)稱密鑰,之后所有報(bào)文通過(guò)該密鑰進(jìn)行加解密。
其實(shí)所有的vpn都是為了雙方協(xié)商一個(gè)密鑰進(jìn)行通信,但是能做到如此簡(jiǎn)單的還只有wireguard,不像ipsec,協(xié)商個(gè)密鑰真的是復(fù)雜,ikev1就有野蠻模式和主模式,之后又來(lái)了個(gè)ikev2版本,讓人頭暈,就看libreswan中光pluto目錄下代碼就有10萬(wàn)行。
Wireguard使用
安裝wireguard:
如果內(nèi)核大于5.6就不需要安裝內(nèi)核模塊了,只要安裝wireguard-tools工具就行。舊版本內(nèi)核可以安裝wireguard-dkms內(nèi)核模塊。
# apt install wireguard-tools wireguard-dkms
了解前面幾個(gè)基本概念之后,就可以通過(guò)ip命令創(chuàng)建一個(gè)最簡(jiǎn)單的wireguard vpn。
在12.13.11.10機(jī)器上執(zhí)行如下命令:
在12.13.11.13上執(zhí)行如下命令:
?
查看wireguard連接狀態(tài):
這里可以看到wireguard vpn建立正常,已經(jīng)可以ping通對(duì)方地址。
這里的wg0設(shè)備里面顯示了NOARP,也就是說(shuō)不支持2層mac地址查找,因此wireguard只能封裝三層包。
要停止手工創(chuàng)建的wireguard隧道也很簡(jiǎn)單,直接刪除就行了:
# ip link del dev wg0
上面演示的是純手工創(chuàng)建wireguard隧道,還有另一種方式,可以事先把配置先寫入/etc/wireguard/wg0.conf文件中,然后wg-quick up wg0啟用起來(lái)就可以。
12.13.11.10節(jié)點(diǎn):
12.13.11.13節(jié)點(diǎn):
wg-quick-up命令除了會(huì)自動(dòng)創(chuàng)建wg0設(shè)備并配置好wireguard的參數(shù)之外,還會(huì)處理路由表相關(guān)的東西,特別是當(dāng)AllowedIPs設(shè)置為0.0.0.0/0時(shí),就會(huì)通過(guò)ip rule添加額外的路由表,來(lái)讓本機(jī)出去的流量都從wg0設(shè)備走,不然這些規(guī)則都要手動(dòng)設(shè)置。
從上面的介紹可以看出,wireguard真的是簡(jiǎn)單,配置參數(shù)也少,但是就是這樣一個(gè)vpn最純正功能的軟件,卻直到最近才被開發(fā)出來(lái),當(dāng)然wireguard缺點(diǎn)也是有的,比如沒(méi)辦法加密兩個(gè)節(jié)點(diǎn)之間本來(lái)的流量,wireguard只有在新接口上的流量才能被加密,而ipsec卻可以做到^^。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )