繞過校園網的共用限制 win10搭建VPN伺服器實現--從入門到放棄

来源:http://www.cnblogs.com/deali/archive/2016/11/13/6058292.html
-Advertisement-
Play Games

一、開篇立論= =.. 上次說到博主在電腦上搭建了代理伺服器來繞過天翼客戶端的共用限制,然而經過實際測試還不夠完美,所以本著生命不息,折騰不止的精神,我又開始研究搭建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.生成根證書CAbuild-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是客戶端
dev tun          #必須與伺服器端的保持一致
proto udp          #必須與伺服器端的保持一致
remote 192.168.0.2 1194  #指定連接的遠程伺服器的實際IP地址和埠號
resolv-retry infinite   #斷線自動重新連接,在網路不穩定的情況下(例如:筆記本電腦無線網路)非常有用。
nobind           #不綁定特定的本地埠號
persist-key
persist-tun
ca ca.crt          #指定CA證書的文件路徑
cert client.crt      #指定當前客戶端的證書文件路徑
key client.key      #指定當前客戶端的私鑰文件路徑
remote-cert-tls server  #指定採用伺服器校驗方式
tls-auth ta.key 1     #如果伺服器設置了防禦DoS等攻擊的ta.key,則必須每個客戶端開啟;如果未設置,則註釋掉這一行;
comp-lzo          #與伺服器保持一致
verb 3          #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細

      實際修改內容參見下麵的截圖。

      

      

      

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連接共用。

後者需要電腦帶有雙網卡,有雙網卡的同學可以試一下,感覺我們的筆記本帶有有線網卡和無線網卡應該算是雙網卡了吧= =...

這裡博主用的方法是:

  1. 筆記本插上網線,用天翼客戶的撥號連接上校園網,此時筆記本已經可以上網了
  2. 筆記本用WIFI連接路由器(假設你已經有了路由器,沒有的自行找辦法)
  3. 在控制面板里給連接網線的“本地連接”設置Internet共用

  到這裡基本就可以上網了。

 

  額... 可能有的同學電腦沒有雙網卡的,別急,那就用第一種方法..

  對了... 就是利用Serve系統的功能設置軟路由nat轉發

  首先確保你使用的操作系統是Server版,或者是XP... win7以上的可以搜索給系統添加netsh routing的方法,找不到就沒辦法了

  操作步驟如下:

  1. 按Win+R 輸入並運行services.msc,在服務裡面尋找Routing and Remote Access,右鍵單擊進入屬性,將啟動類型更改為自動,並點擊啟動按鈕。
  2. 編輯註冊表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter= 1   然後重啟電腦
  3. 在cmd控制臺中依次輸入一下命令
  4. netsh
    routing ip nat
    install
    add interface name="本地連接 2" mode=full //伺服器上用於上外網的連接
    add interface name="本地連接 3" mode=private //安裝OpenVPN時生成的虛擬連接
    add interface name="內部" mode=private
  5. 輸入show interface命令後顯示:
    NAT 內部 配置
    ---------------------------
    模式              : 專用介面
    
    
    NAT 本地連接 2 配置
    ---------------------------
    模式              : 地址和埠轉換
    
    
    NAT 本地連接 3 配置
    ---------------------------
    模式              : 專用介面

    即表示NAT配置成功,重啟。
    以上步驟實現後,則VPN+NAT配置成功。可撥入主機,並可通過主機代理出去訪問主機所在的資源。如同處在主機帶的區域網中。

 

(PS:由於博主使用的是win10專業版系統,並且通過各種搜索並沒有找到能在win10中添加netsh routing模塊的方法,所以已經放棄了掙扎。)

這次折騰從周六下午到晚上,花了很長的時間,最終的效果差強人意,不過這還是為繞過天翼限制提供了很好的思路,比如

  1. 自己手機二手配件然後配置一臺價格很低的台式機,用台式機連校園網並開啟vpn服務,配合路由器可以做到共用網路上網,這時最完美的解決方法,這台二手主機可以二十四小時開機,作為宿舍里的伺服器
  2. 買一個openwrt系統的路由器,這種系統的路由器可以充當小型伺服器,在路由器上面配置VPN也是沒有問題的,在配置完VPN做一個nat轉發,把外網的流量轉發到宿舍里連接校園網的那臺電腦就好了= =... 具體就不展開了(其實是具體操作博主也不會T T... 逃)

不知不覺就寫了這麼長了,不得不說,Windows真不適合搞伺服器,還是Linux好用一些T T... 然而電信更辣雞!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • info 伺服器基本信息 monitor 實時轉儲收到的請求 flushdb 清空當前資料庫 flushall 清空所有資料庫 quit 關閉連接 save 將數據同步保持到磁碟 bgsave 非同步 lastsave 返回最後一次成功保存數據到磁碟的時間戳 shundown 將數據同步保持到磁碟並關 ...
  • VMware虛擬機中安裝CentOS,進行網路連接,分為兩步,內網連接,與外網連接。 前提: 當你正確安裝VMware後,網路適配器會增加2個新的網卡:(可在設備管理器->網路適配器中查看) 第一步:內網連接在安裝CentOS時就已經開始了 點擊【自定義硬體】,網路適配器->自定義【VMnet8(N ...
  • 參考博客: http://www.aiuxian.com/article/p-705047.html http://blog.csdn.net/u013232419/article/details/45201437 contiki大神Jelline的博客:http://blog.chinaunix. ...
  • 第十單元 系統的初始化和服務 Linux系統引導的順序 Linux系統引導的順序 BOIS的初始化和引導載入程式 什麼是BIOS GRUB程式和grub.conf文件 什麼是grub grub配置文件grub.conf 內核的初始化和init的初始化 init的配置文件/etc/inittab in ...
  • chkconfig的級別: 0:關機 1:單用戶模式 2:無網路支持的多用戶模式 3:有網路支持的多用戶模式 4:保留,未使用 5:有網路支持有X-Windows(圖形界面)支持的多用戶模式 6:重新引導系統,即重啟 開機不重啟: #chkconfig server off server 0:off ...
  • vi編輯器簡介 什麼是vi vi編輯器的操作模式 vi編輯器的3種基本模式 在vi編輯器中游標的移動 移動游標位置的鍵與游標移動間的關係 進入插入模式 從命令行模式進入插入模式的命令 在命令行模式下刪除與複製的操作 刪除與複製命令 粘貼命令 複原和重做命令 擴展模式與文件的存儲和退出 擴展模式下常用 ...
  • tcpip協議使用"流式"(套接字)進行數據的傳輸,就是說它保證數據的可達以及數據抵達的順序,但並不保證數據是否在你接收的時候就到達,特別是為了提高效率,充分利用帶寬,底層會使用緩存技術,具體的說就是使用Nagle演算法將小的數據包放到一起發送,但是這樣也帶來一個使用上的問題——黏包,黏包就是說一次將 ...
  • 當我們用socket進行編程的時候,細節上都是選擇一個 ,`AF_INET`再根據相應的類型填充地址,其實根據通信需求,有幾種簡單的服務模型可供選用,掌握了這些框架再結合socket高度的抽象,可以為我們編寫簡單的伺服器程式提供指導 迴圈服務 用戶請求服務需要排隊,伺服器一次只能服務一個客戶,服務完 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...