一、開篇立論= =.. 上次說到博主在電腦上搭建了代理伺服器來繞過天翼客戶端的共用限制,然而經過實際測試還不夠完美,所以本著生命不息,折騰不止的精神,我又開始研究搭建vpn伺服器= =... (上次的博文:win10搭建代理伺服器實現繞過校園網的共用限制--從入門到放棄) 不得不說,這是一個痛苦的過 ...
一、開篇立論= =..
上次說到博主在電腦上搭建了代理伺服器來繞過天翼客戶端的共用限制,然而經過實際測試還不夠完美,所以本著生命不息,折騰不止的精神,我又開始研究搭建vpn伺服器= =... (上次的博文:win10搭建代理伺服器實現繞過校園網的共用限制--從入門到放棄)
不得不說,這是一個痛苦的過程... 畢竟之前沒有在Windows上倒騰過伺服器,忍不住說一句= = Windows真不適合弄伺服器,T T.. 然而別無選擇啊,天翼客戶端只有Linux版本的!
二、概念介紹
- 接下來教程開始,首先講一講VPN服務的原理
虛擬專用網VPN(virt ual private network)是在公共網路中建立的安全網路連接,這個網路連接和普通意義上的網路連接不同之處在於,它採用了專有的隧道協議,實現了數據的加密和完整性的檢驗、用戶的身份認證,從而保證了信息在傳輸中不被偷看、篡改、複製,從網路連接的安全性角度來看,就類似於再公共網路中建立了一個專線網路一樣,只補過這個專線網路是邏輯上的而不是物理的所以稱為虛擬專用網。VPN系統的結構圖1所示,包括VPN伺服器,VPN客戶機和隧道。由於使用Internet進行傳輸相對於租用專線來說,費用極為低廉,所以VPN的出現使企業通過Internet既安全又經濟的傳輸私有的機密信息成為可能。
- 博主使用的VPN伺服器軟體是OpenVPN,OpenVPN是一個用於創建虛擬專用網路加密通道的軟體包,最早由James Yonan編寫。OpenVPN允許創建的VPN使用公開密鑰、電子證書、或者用戶名/密碼來進行身份驗證。(附OpenVPN軟體下載:openvpn-install-2.3.11-I601-x86_64.exe )
- 其他要用到的還有Windows自帶的埠轉發工具netsh,微軟Windows的netsh是一個命令行腳本實用工具。使用netsh工具 ,可以查看或更改本地電腦或遠程電腦的網路配置。不僅可以在本地電腦上運行這些命令,而且可以在網路上的遠程電腦上運行。(後面會發現然並卵)
三、操作步驟概覽
1.安裝OpenVPN,實現內網伺服器和雲伺服器變為一個區域網(a.b.c.d.e.f.g 在雲伺服器完成,h 在內網伺服器完成)
a.雲伺服器安裝OpenVPN;
b.初始化配置;
c.生成根CA;
d.生成dh1024.pem文件;
e.生成伺服器端證書、客戶端證書和TA證書;(以上cmd命令必須在一個cmd視窗完成)
f.對伺服器端和客戶端配置文件文件進行配置;
g.配置伺服器端,為客戶端連接做準備;
h.配置客戶端,連接伺服器端,使內網伺服器和雲伺服器變為一個區域網;
2.配置埠轉發,實現內網伺服器對外網的發佈
四、步驟內容
1.安裝OpenVPN,實現內網伺服器和雲伺服器變為一個區域網。
a.雲伺服器安裝OpenVPN
雙擊openvpn-install-2.3.11-I601-x86_64.exe開始安裝:
安裝完畢後,打開 控制面板->網路和 Internet->網路和共用中心->更改適配器設置
出現虛擬網卡為TAP-Windows Adapter V9的新本地連接,將其改名為OpenVPN。
(註:如果沒有出現新的本地連接,請雙擊C:\Program Files\TAP-Windows\bin目錄下的addtap.bat 文件,來手動添加一個)
b.初始化配置
(一)使用寫字板打開 OpenVPN安裝目錄\easy-rsa\vars.bat.sample 文件容(最好用寫字板打開,以免記事本打開會破壞文檔格式),如下:
註:上面文件信息可以不予更改。但是,由於稍後給客戶端生成對應加密證書和私鑰時,程式會要求我們輸入一些註冊信息。如果你需要配置多個客戶端,並且許多信息都相同(比如國家、省市、地址、公司名稱等)你還可以修改vars.bat.sample文件後面的一些相關變數的預設值,這樣在稍後生成客戶端證書的時候,如果該信息項不輸入就會採用預設值。
(二)運行DOS命令,初始化執行環境。
打開 %OpenVPN的安裝目錄%\easy-rsa 目錄,按住 Shift + 右鍵 選擇 在此處打開命令視窗 ,
然後依次輸入並執行以下命令:
init-config(初始化配置,將vars.bat.sample文件的內容複製到vars.bat。實際上,你也可以直接雙擊執行easy-rsa目錄下的init-config.bat文件來代替這一步。) vars(設置相應的局部環境變數,就是我們在vars.bat.sample文件中設置的內容) clean-all(相關設置和清理工作) |
c.生成根證書CA:build-ca
如上圖所示,在build-ca的時候需要輸入一些註冊信息。在輸入信息的時候,如果你不輸入任何信息,就表示採用預設值(前面[]中的內容就是預設值);如果你輸入 .(點號) ,則表示當前信息項留空白。值得註意的是,上圖中紫色框中的OpenVPN_CA是證書的通用名稱(Common Name),相當於我們常說的賬號,你也可以自行輸入其他名稱。
d.生成dh1024.pem文件(創建迪菲·赫爾曼密鑰):build-dh
迪菲·赫爾曼密鑰交換(Diffie–Hellman key exchange,簡稱「D–H」) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全通道創建起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。
e.生成伺服器端證書、客戶端證書和TA證書
(一)生成服務端證書:build-key-server server
如上圖所示,命令中的參數server指的是生成的證書文件名稱,你可以按照自己的需要進行修改,不過後面的Common Name也應保持一致。第三個紅色矩形框中是輸入的密碼,你也可以根據意願自行輸入。最後程式會詢問你是否註冊並提交證書,兩次均輸入y即可。
(二)生成客戶端證書:build-key CdtsmClient
如上圖所示,命令中的參數client表示生成的證書文件名稱,你可以按照自己的需要進行修改,不過後面的Common Name也應保持一致。第三個紅色矩形框中是輸入的密碼,你也可以根據意願自行輸入。最後程式會詢問你是否註冊並提交證書,兩次均輸入y即可。
如果你想創建多個不同的客戶端證書,只需要重覆此步驟即可。切記,Common Name不要重覆,這是OpenVPN用來區分不同客戶端的關鍵所在。
(三)生成TA證書:openvpn --genkey --secret keys/ta.key
這一步其實是可選操作,生成的ta.key主要用於防禦DoS、UDP淹沒等惡意攻擊。命令中的第3個參數keys/ta.key表示生成的文件路徑(含文件名)。
非常重要的提醒:以上命令都是在同一個DOS視窗中執行的,如果你以後需要打開新視窗來執行命令(比如創建新的客戶端證書):你不需要再執行init-config命令,除非你再次改動了vars.bat.sample文件;每一次打開新視窗時都需要先執行vars命令,後面才能執行其他命令。
f.對伺服器端和客戶端配置文件進行配置
上面我們已經創建了OpenVPN配置所需要的各種證書和私鑰,現在我們開始為伺服器和客戶端編寫對應的配置文件,文件目錄為 OpenVPN安裝目錄\sample-config 。
對於一個剛剛接觸OpenVPN的人來說,我們應該配置些什麼呢,又該從哪裡入手呢?彆著急,OpenVPN已經考慮到了這一點。在OpenVPN的安裝目錄的sample-config文件夾中存放有3個示例模板文件:server.ovpn、client.ovpn、sample.ovpn。其中,server.ovpn是伺服器的配置模板,client.ovpn是客戶端的配置模板(sample.ovpn也可用作客戶端配置模板,不過配置比較簡單,不夠全面。按照官方的說法,client.ovpn可用於連接具有多個客戶端的伺服器端配置文件)。
在OpenVPN的配置文件中,前面帶「#」或「;」的表示註釋內容。
(一)配置服務端文件:server.ovpn
local 192.168.0.2 #指定監聽的本機IP(因為有些電腦具備多個IP地址),該命令是可選的,預設監聽所有IP地址。 port 1194 #指定監聽的本機埠號 proto udp #指定採用的傳輸協議,可以選擇tcp或udp dev tun #指定創建的通信隧道類型,可選tun或tap ca ca.crt #指定CA證書的文件路徑 cert server.crt #指定伺服器端的證書文件路徑 key server.key #指定伺服器端的私鑰文件路徑 dh dh1024.pem #指定迪菲赫爾曼參數的文件路徑 server 10.8.0.0 255.255.255.0 #指定虛擬區域網占用的IP地址段和子網掩碼,此處配置的伺服器自身占用10.8.0.1。 ifconfig-pool-persist ipp.txt #伺服器自動給客戶端分配IP後,客戶端下次連接時,仍然採用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。 client-to-client #允許客戶端與客戶端相連接,預設情況下客戶端只能與伺服器相連接。 keepalive 10 120 #每10秒ping一次,連接超時時間設為120秒。 tls-auth ta.key 0 #開啟TLS,使用ta.key防禦攻擊。伺服器端的第二個參數值為0,客戶端的為1。 comp-lzo #開啟VPN連接壓縮,如果伺服器端開啟,客戶端也必須開啟 persist-key persist-tun #持久化選項可以儘量避免訪問在重啟時由於用戶許可權降低而無法訪問的某些資源。 status openvpn-status.log #指定記錄OpenVPN狀態的日誌文件路徑 verb 3 #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細 |
實際修改內容參見下麵的截圖。
(二)客戶端配置文件:client.ovpn
client #指定當前VPN是客戶端 |
實際修改內容參見下麵的截圖。
g.配置伺服器端,為客戶端連接做準備
(一)把配置文件server.ovpn複製到伺服器端 OpenVPN安裝目錄\config 下
(二)把OpenVPN安裝目錄\easy-rsa\keys目錄下的
複製到OpenVPN安裝目錄\config目錄下
(三)打開OpenVPN GUI.exe
此時在任務欄的右下角將會出現如下圖所示的白色小圖標,右鍵該圖標,點擊connect
緊接著,就會自動彈出如下視窗,右下角圖標變為黃色。
連接成功後,視窗自動關閉,右下角的圖標變為綠色。
h.配置客戶端,連接伺服器端,使內網伺服器和雲伺服器變為一個區域網
(一)把配置文件client.ovpn複製到客戶端 OpenVPN安裝目錄\config 下
(二)把OpenVPN安裝目錄\easy-rsa\keys目錄下的
複製到OpenVPN安裝目錄\config目錄下
(三)打開OpenVPN GUI.exe
和伺服器端一樣,圖標為綠色表示成功。
(四)驗證區域網是否成功
在伺服器端ping客戶端地址
在客戶端ping伺服器端地址
註:如果ping不通,看防火牆是否關閉。這裡的OpenVPN設置是為了實現埠轉發,如果內網伺服器需要通過雲伺服器上網,請打開雲伺服器的本地連接的共用(不是OpenVPN的適配器,是雲伺服器聯網的適配器)。
2.配置埠轉發,實現內網伺服器對外網的發佈(可省略)
在雲伺服器端打開Dos命令視窗,
例,將內網伺服器的80埠轉發到雲伺服器的14941埠
我們在cmd里執行 netsh interface portproxy add v4tov4 listenport=14941 connectaddress=10.8.0.6 connectport=80 實現埠轉移。
如果需要查看那些埠已經被轉移,則在cmd執行 netsh interface portproxy show all
如果需要刪除那些埠轉移,則在cmd執行 netsh interface portproxy delete v4tov4 listenport=14941
五、接下來
到這裡OpenVPN的配置就全部完成了= =... 然而這時客戶端連接VPN之後還是無法上網的,原因是客戶端只是和服務端處於同個虛擬區域網中,但是服務端的外網並沒有和虛擬區域網聯通,所以無法上網。為了能讓客戶端連上外網,我們需要在服務端做路由nat轉發或者是設置internet連接共用。
後者需要電腦帶有雙網卡,有雙網卡的同學可以試一下,感覺我們的筆記本帶有有線網卡和無線網卡應該算是雙網卡了吧= =...
這裡博主用的方法是:
- 筆記本插上網線,用天翼客戶的撥號連接上校園網,此時筆記本已經可以上網了
- 筆記本用WIFI連接路由器(假設你已經有了路由器,沒有的自行找辦法)
- 在控制面板里給連接網線的“本地連接”設置Internet共用
到這裡基本就可以上網了。
額... 可能有的同學電腦沒有雙網卡的,別急,那就用第一種方法..
對了... 就是利用Serve系統的功能設置軟路由nat轉發
首先確保你使用的操作系統是Server版,或者是XP... win7以上的可以搜索給系統添加netsh routing的方法,找不到就沒辦法了
操作步驟如下:
- 按Win+R 輸入並運行services.msc,在服務裡面尋找Routing and Remote Access,右鍵單擊進入屬性,將啟動類型更改為自動,並點擊啟動按鈕。
- 編輯註冊表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter= 1 然後重啟電腦
- 在cmd控制臺中依次輸入一下命令
-
netsh routing ip nat install add interface name="本地連接 2" mode=full //伺服器上用於上外網的連接 add interface name="本地連接 3" mode=private //安裝OpenVPN時生成的虛擬連接 add interface name="內部" mode=private
-
輸入show interface命令後顯示: NAT 內部 配置 --------------------------- 模式 : 專用介面 NAT 本地連接 2 配置 --------------------------- 模式 : 地址和埠轉換 NAT 本地連接 3 配置 --------------------------- 模式 : 專用介面
即表示NAT配置成功,重啟。
以上步驟實現後,則VPN+NAT配置成功。可撥入主機,並可通過主機代理出去訪問主機所在的資源。如同處在主機帶的區域網中。
(PS:由於博主使用的是win10專業版系統,並且通過各種搜索並沒有找到能在win10中添加netsh routing模塊的方法,所以已經放棄了掙扎。)
這次折騰從周六下午到晚上,花了很長的時間,最終的效果差強人意,不過這還是為繞過天翼限制提供了很好的思路,比如
- 自己手機二手配件然後配置一臺價格很低的台式機,用台式機連校園網並開啟vpn服務,配合路由器可以做到共用網路上網,這時最完美的解決方法,這台二手主機可以二十四小時開機,作為宿舍里的伺服器
- 買一個openwrt系統的路由器,這種系統的路由器可以充當小型伺服器,在路由器上面配置VPN也是沒有問題的,在配置完VPN做一個nat轉發,把外網的流量轉發到宿舍里連接校園網的那臺電腦就好了= =... 具體就不展開了(其實是具體操作博主也不會T T... 逃)
不知不覺就寫了這麼長了,不得不說,Windows真不適合搞伺服器,還是Linux好用一些T T... 然而電信更辣雞!