技巧:如何在Linux平臺上配置點對點VPN

責(zé)任編輯:editor005

2015-01-09 14:22:30

摘自:中關(guān)村在線

一個傳統(tǒng)的 VPN(如 OpenVPN、PPTP)由一個 VPN 服務(wù)器和一個或多個連接到這臺服務(wù)器的客戶端組成。至此,你應(yīng)該能夠從一個邊緣節(jié)點用 VPN IP 地址 ping 通另一個邊緣節(jié)點了。

一個傳統(tǒng)的 VPN(如 OpenVPN、PPTP)由一個 VPN 服務(wù)器和一個或多個連接到這臺服務(wù)器的客戶端組成。當(dāng)任意兩個 VPN 客戶端彼此通信時,VPN 服務(wù)器需要中繼它們之間的 VPN 數(shù)據(jù)流量。這樣一個中心輻射型的 VPN 拓?fù)浣Y(jié)構(gòu)存在的問題是,當(dāng)連接的客戶端增多以后,VPN 服務(wù)器很容易成為一個性能上的瓶頸。從某種意義上來說,中心化的 VPN 服務(wù)器也同樣成為一個單點故障的來源,也就是當(dāng) VPN 服務(wù)器出現(xiàn)故障的時候,整個 VPN 都將無法被任何 VPN 客戶端訪問。

點對點 VPN(又稱 P2P VPN)是另一個 VPN 模型,它能解決傳統(tǒng)的基于服務(wù)器-客戶端模型的 VPN 存在的這些問題。一個 P2P VPN 中不再有一個中心的 VPN 服務(wù)器,任何擁有一個公開 IP 地址的節(jié)點都能引導(dǎo)其他節(jié)點進(jìn)入 VPN。當(dāng)連接到一個 VPN 之后,每一個節(jié)點都能與 VPN 中的任何其他節(jié)點直接通信,而不需要經(jīng)過一個中間的服務(wù)器節(jié)點。當(dāng)然任何節(jié)點出現(xiàn)故障時,VPN 中的剩余節(jié)點不會受到影響。節(jié)點中的延遲、帶寬以及 VPN 擴(kuò)展性在這樣的設(shè)定中都有自然的提升,當(dāng)你想要使用 VPN 進(jìn)行多人游戲或者與許多朋友分享文件時,這都是十分理想的。

開源的 P2P VPN 實現(xiàn)已經(jīng)有幾個了,比如 Tinc、peerVPN,以及 n2n。在本教程中,我將會展示如何在 Linux 上用 n2n 配置點對點 VPN。

n2n 是一個開源(GPLv3)軟件,它允許你在用戶間構(gòu)建一個加密的 2/3 層點對點 VPN。由 n2n 構(gòu)建的 VPN 是“對 NAT 友好”的,也就是說,不同 NAT 路由器后方的兩個用戶可以通過 VPN 直接與對方通信。n2n 支持對稱的 NAT 類型,這是 NAT 中限制最多的一種。因此,n2n 的 VPN 數(shù)據(jù)流量是用 UDP 封裝的。

一個 n2n VPN 由兩類節(jié)點組成:邊緣(edge)節(jié)點和超級(super)節(jié)點。一個邊緣節(jié)點是一臺連接到 VPN 的電腦,它可能在一個 NAT 路由器后方。一個超級節(jié)點則是擁有一個可以公共訪問的 IP 地址的電腦,它將會幫助 NAT 后方的邊緣節(jié)點進(jìn)行初始通信。想要在用戶中創(chuàng)建一個 P2P VPN 的話,我們需要至少一個超級節(jié)點。

準(zhǔn)備工作

  準(zhǔn)備工作

在這篇教程中,我將會創(chuàng)建一個擁有 3 個節(jié)點的 P2P VPN:一個超級節(jié)點和兩個邊緣節(jié)點。唯一的要求是,邊緣節(jié)點需要能夠 ping 通超級節(jié)點的 IP 地址,而它們是否在 NAT 路由器之后則沒有什么關(guān)系。

在 Linux 上安裝 n2n

若想用 n2n 構(gòu)建一個 P2P VPN,你需要在每個節(jié)點上安裝 n2n,包括超級節(jié)點。

由于它非常精簡的依賴需求,在大多數(shù) Linux 平臺上 n2n 都能被輕松編譯。

在基于 Debian 的系統(tǒng)上安裝 n2n:

在基于 Red Hat 的系統(tǒng)上安裝 n2n:

用 n2n 配置一個 P2P VPN

如前文所述,我們需要至少一個超級節(jié)點,它將會作為一個初始化引導(dǎo)服務(wù)器。我們假設(shè)這個超級節(jié)點的 IP 地址是 1.1.1.1。

超級節(jié)點:

在一個作為超級節(jié)點的電腦上運行下面的命令。其中“-l ”指定超級節(jié)點的監(jiān)聽端口。運行 supernode 并不需要 root 權(quán)限。

邊緣節(jié)點:

在每個邊緣節(jié)點上,使用下面的命令來連接到一個 P2P VPN。edge 守護(hù)程序?qū)诤笈_運行。

邊緣節(jié)點 #1:

邊緣節(jié)點 #2:

下面是對命令行的一些解釋:

“-d ”選項指定了由 edge 命令創(chuàng)建的 TAP 接口的名字。

“-a ”選項(靜態(tài)地)指定了分配給 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一臺邊緣節(jié)點上配置一臺 DHCP 服務(wù)器,然后使用“-a dhcp:0.0.0.0”選項來代替。

“-c ”選項指定了 VPN 組的名字(最大長度為 16 個字節(jié))。這個選項可以被用來在同樣一組節(jié)點中創(chuàng)建多個 VPN。

“-u”和“-g”選項被用來在創(chuàng)建一個 TAP 接口后降權(quán)放棄 root 權(quán)限。edge 守護(hù)進(jìn)程將會作為指定的用戶/組 ID 運行。

“-k ”選項指定了一個由 twofish 加密的密鑰來使用。如果你想要將密鑰從命令行中隱藏,你可以使用 N2N_KEY 環(huán)境變量。

“-l ”選項指定了超級節(jié)點的監(jiān)聽 IP 地址和端口號。為了冗余,你可以指定最多兩個不同的超級節(jié)點(比如 -l -l )。

“-m ”給 TAP 接口分配了一個靜態(tài)的 MAC 地址。不使用這個參數(shù)的話,edge 命令將會隨機(jī)生成一個 MAC 地址。事實上,為一個 VPN 接口強(qiáng)制指定一個靜態(tài)的 MAC 地址是被強(qiáng)烈推薦的做法。否則,比如當(dāng)你在一個節(jié)點上重啟了 edge 守護(hù)程序的時候,其它節(jié)點的 ARP 緩存將會由于新生成的 MAC 地址而遭到污染,它們將不能向這個節(jié)點發(fā)送數(shù)據(jù),直到被污染的 ARP 記錄被消除。

至此,你應(yīng)該能夠從一個邊緣節(jié)點用 VPN IP 地址 ping 通另一個邊緣節(jié)點了。

  至此,你應(yīng)該能夠從一個邊緣節(jié)點用 VPN IP 地址 ping 通另一個邊緣節(jié)點了。

故障排除

在調(diào)用 edge 守護(hù)程序的時候得到了如下錯誤。

n2n[4405]: ERROR: ioctl() [Operation not permitted][-1]

注意 edge 守護(hù)進(jìn)程需要超級用戶權(quán)限來創(chuàng)建一個 TAP 接口。因此需要確定用 root 權(quán)限來執(zhí)行,或者對 edge 命令設(shè)置 SUID。之后你總是可以使用“-u”和“-g”選項來降權(quán)放棄 root 權(quán)限。

總結(jié)

n2n 可以成為對你來說非常實用的免費 VPN 解決方案。你可以輕松地配置一個超級節(jié)點,無論是用你自己家里的網(wǎng)絡(luò),還是從云主機(jī)提供商購買一個可以公共訪問的 VPS 實例。你不再需要把敏感的憑據(jù)和密鑰放在第三方 VPN 提供商的手里,使用 n2n,你可以在你的朋友中配置你自己的低延遲、高帶寬、可擴(kuò)展的 P2P VPN。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號