RouterOS是MikroTik推出的一種路由操作系統,可以在基于x86構架的PC上安裝RouterOS,從而實現路由功能。RouterOS是基于Linux2.6內核開發的,所占資源并不高,一臺內存配置為64MB,硬盤容量為512MB的PC就足以運行該系統,也就是說,在一臺淘汰下來的服務器上安裝RouterOS,這臺服務器就變身為高端路由器了。
如果沒有閑置的電腦,也可以用VMware等虛擬化軟件,創建一臺虛擬機,在虛擬機上安裝RouterOS,用虛擬機當做路由器。
VPN(虛擬專用網絡)是在公用網絡上建立專用網絡,是通過在互聯網或其他公共網絡上建立的臨時的、安全的連接,這個連接的實質是用加密技術封裝出一條穿過混亂的公用網絡的安全、穩定的隧道。這種加密的隧道技術主要有PPTP、L2TP、MPLS、IPSEC VPN、SSL VPN、SOCK V5等幾種類型,本文就是借助MikroTik RouterOS這款路由操作系統搭建PPTP協議的VPN服務器。
為了簡化操作,此處只介紹用RouterOS搭建PPTP服務器的全過程,不涉及路由等問題,因此,安裝RouterOS的電腦只需要一塊網卡,并能連通互聯網。

圖1 網絡拓撲圖
下面先介紹一下本次實驗的拓撲結構圖,如圖1所示。
圖中的服務器代表某單位的內部應用,該單位的內部地址段為 :172.16.1.0/24,網 關 為172.16.1.254;
RouterOS是安裝在該單位某臺物理服務器上,該服務器局域網地址配置為172.16.1.73,外網映射地址為59.56.72.12。
為PPTP客戶端規劃的地址范圍為:172.16.1.48-172.16.1.240。
安裝好RouterOS后,為路由操作系統配置好IP地址,具體配置過程不在本文討論之列。在本例中,路由操作系統的IP地址/子網掩碼和網關分別是:172.16.1.73/255.255.2 55.0,172.16.1.254。
用WinBox連 接RouteOS路由器,連接方法很簡單,運行WinBox后, 在“Connext To” 文本框輸入路由器的IP地址:172.16.1.73,分 別 在“login”和“Password”文本框中輸入路由器的管理員賬戶名和密碼,如果是新安裝的路由操作系統,系統管理員賬號是“admin”,默認密碼為空。

圖2 Interface List窗口
注意:如果所安裝的路由操作系統版本較低,用高版本的WinBox連接路由器會報“could not fetch index”之類的錯誤。如果出現這個錯誤,可以選擇低一些版本的WinBox連接路由器。上只有一塊網卡,此時接口列表中只有一個名為“ether1”(此名可以更改)的以太網接口。我們要搭建PPTP服務器,首先應添加一個類型為“PPTP Server”的接口,單擊“Interface List”工具欄上的“+”圖標按鈕,在下拉菜單中“PPTP Server Binding”,如 圖2所示。
(3) 出 現“New Interface”(新 接 口)窗口后,默認的接口名稱是“pptp-in1”,本例就使用這個默認名稱,單擊“OK”按鈕創建新接口。
(1)登錄到路由器后,單擊左側菜單上的“Interfaces”(接口)。
(2) 彈 出“Interface List”窗口后,如果服務器
(1)依次單擊WinBox窗口左側“IP” 菜單→“Pool”(池)。
(2)出現“IP Pool”(IP池)窗口后,單擊窗口工具欄“+”圖標按鈕。
(3)出現“New IP Pool”窗 口 后,在“Name”文 本框中為地址池取一個名稱。本例為“vpntool”,在“Addresses”文本框輸入為PPTP客戶端分配的地址,此處的地址可以是地址范圍,如本例中的“172.16.1.50-172.16.1.240”,也可以是具體地址,如果要添加或刪除多個地址或多個地址段,單擊地址右側的“▼”(添加)或“▲”(刪除)或按鈕。
PPTP是一種點對點隧道協議,和PPP(點到點協議)一樣,位于OSI模型的第二層數據鏈路層。PPTP使用TCP連接的創建,維護,與終止隧道,并使用GRE將PPP幀封裝成隧道數據,被封裝后的PPP幀的有效載荷可以被加密或者壓縮或者同時被加密與壓縮。
在RouterOS路由器中,PPTP也是PPP點到點協議中的一種,因此,PPTP相關配置放在了RouterOS的PPP功能菜單上。
(1)單擊WinBox窗口左側“PPP” 菜單。

圖3 創建地址池
(2)出現“PPP”窗口后,單擊“Profile”(模板)選項卡,在“ProFile”選項卡下單擊“+”圖標按鈕,新建一個模板。
(3)出現“PPP Profile”窗口后,在“Name”文本框為新模板取一個名稱,本例 為“vpnprofile”。 在“Local Address”文本框輸入RouterOS路由器的地址,本例為“172.16.1.73”,單擊“Remote Address”右側下拉地址列表按鈕,選擇前面創建的地址池,本例前面創建的地址池是“vpnpool”,如圖3所示。
(4) PPTP客戶端操作系統無論是桌面Windows操作系統還是手機的Android操作系統,都要求VPN隧道是加密的,因此,需要將PPP模板中有關協議的配置更改為“需要加密”。在“PPP Profile”窗口單擊“Protocols”(協議)選項卡,將“Use Encryption”的單選按鈕中勾選“required”(需要),其他按默認值配置即可。
常見錯誤提示:有很多在Linux操作系統上連接PPTP服務器或用RouterOS自帶的PPTP客戶端(需要創建)直接連接PPTP服務器,都能成功連接,但在Windows上或在手機上不能連接PPTP服務器主要原因就是沒有勾選“Use Encryption”下 的“required”。
(1)在“PPP”窗口單擊“Secrets”選項卡,新建一個VPN賬戶。
(2) 出 現“New PPP Secret”窗 口 后,分 別 在“Name” 和“Password” 文本框中指定新賬戶的賬戶名稱和密碼,在本例中,新建VPN賬戶的用戶名為“vpntest01”,密 碼 是“123456”。在“Profile”下拉列表中選擇剛配置的PPP模板,在本例中,新建的模板文件是“vpnprofile”。如果只想讓該用戶登錄PPTP服務器,在“Service”下拉菜單中選擇“PPTP”即可,在本例中,允許該用戶訪問所有PPP服務,故使用默認值“any”。
(1) 在“PPP” 窗 口“Interface”下,單擊“PPTP Server”按鈕。
(2)勾選“Enabled”(允許)。開啟PPTP服務。
(3) 出現“PPTP Server”窗 口 后, 在“Default Profile”下拉菜單中選擇剛配置的PPP模板,在本例中,剛配置的模板是“vpnprofile”。
在“Authentication”(身份認證)勾選PPTP身份認證方式,“PAP”和“CHAP”是PPP支持的兩種授權認證方式,兩種方式都需要賬號和密碼,因此在配置PPTP客戶端時,也需要PPTP賬號和密碼。為了讓大家在創建VPN連接時對認證方式有更清晰的認識,少出錯,下面對RouterOS PPTP支持的4種認證方式做個簡要介紹。
PAP(密碼驗證協議)是兩次握手協議,認證過程非常簡單。PAP只在鏈路建立階段進行身份認證,一旦鏈路建立成功將不再進行認證檢測。PAP使用明文格式發送用戶名和密碼,發起方為PPTP客戶端,可以做無限次的嘗試(容易暴力破解),直到身份驗證過程結束。在實際應用中,如果應用環境對安全性要求不高,可以采用PAP認證建立PPP連接。
CHAP(詢問握手認證協議)通過三次握手周期性的校驗對端的身份。首先,PPTP客戶端發送挑戰信息,PPTP服務器接收到挑戰信息后,根據PPTP客戶端提供的用戶名到自己本地的數據庫中查找對應的密碼(如果沒有設密碼就用默認的密碼),查到密碼再結合PPTP客戶端發來的id和隨機數據,根據MD5算法算出一個Hash值。其次,PPTP客戶端回復認證請求,PPTP服務器處理挑戰的響應信息,根據PPTP客戶端發來的認證用戶名,PPTP服務器在本地數據庫中查找PPTP客戶端對應的密碼(口令)結合id找到先前保存的隨機數據和id根據MD5算法算出一個Hash值,與PPTP客戶端得到的Hash值做比較,若一致,則認證通過,如果不一致,則認證不通過。最后,PPTP服務器告知PPTP客戶端認證是否通過。
MSCHAP(微軟挑戰握手認證協議)認證過程與CHAP類似,微軟開發MSCHAP是為了對遠程Windows工作站進行身份驗證,它在響應時使用質詢響應機制和單向加密認證。MS-CHAP也是三次握手協議,除加密算法不同外,和CHAP相比,MSCHAP支持重傳機制。在PPTP客戶端認證失敗的情況下,如果PPTP服務器允許PPTP客戶端進行重傳,PPTP客戶端會將認證相關信息重新發回,PPTP服務器根據此信息重新對PPTP客戶端進行認證。PPTP服務器最多允許PPTP客戶端重傳3次。
MSCHAP2(微軟挑戰握手認證協議2)是MSCHAP的升級版本,除加密算法有變化外,還有其他兩個重要變化,一是MSCHAP2通過報文捎帶的方式實現了PPTP服務器和PPTP客戶端的雙向認證;二是MSCHAP2支持修改密碼機制。PPTP客戶端由于密碼過期導致認證失敗時,PPTP客戶端會將用戶輸入的新密碼信息發回PPTP服務器,PPTP服務器根據新密碼信息重新進行認證。

(4) 綜 上 所 述,在“PPTP Server”窗 口 設 置“Authentication”身份認證時,可視PPTP客戶端而定。Windows XP以上操作系統都支持上述4種認證方式,如果PPTP客戶端操作系統都是Windows操作系統,只勾選“mschap2”即可,如圖4所示。

圖4 窗口設置
很多單位(或個人)架設自己的VPN服務器后,在使用“VPN連接”連接到單位局域網后,經常出現無法上網(無法連接互聯網)的現象,這是因為通過VPN連接到單位網絡后,該電腦就成為單位內部的一臺電腦。包括PPTP服務器在內的,所有PPTP客戶端要共享一個IP地址上網,就必須進行網絡地址轉換。用RouteOS搭建PPTP服務器,可以通過IP偽裝來實現共享上網。下面是共享上網的實現過程:
(1)依次單擊WinBox窗 口 左 側“IP” 菜 單→“Firewall”(防火墻),添加防火墻規則。
(2)出現“Firewall”窗口后,單擊“NAT”(網絡地址轉換)選項卡,在“NAT”選項卡下單擊“+”圖標按鈕。
(3) 出 現“New NAT Rule”窗口后,在“Chain”(鏈路)下拉列表中選默認 的“srcnat”(源 地 址轉換),在“Src Address”(源地址)文本框輸入單位網絡的IP地址段。在本例中,某單位的IP地址段是“172.16.1.0/24”。在“Out.Interface”(輸出接口)下拉列表中選擇RouterOS路由器上連接外網的網絡接口。在本例中,安裝RouteOS路由器的服務器上只有一塊網卡,因此,除前面創建的接口“pptp-in1”外,只有“ether1”這樣一個網絡接口,故此處選“ether1”。
(4)在“New NAT Rule”窗口單擊“Action”選項卡,在“Action”下拉菜單中選擇“masquerade”(偽裝),即采用IP偽裝方式實現共享上網。
至此,在RouterOS路由器上的所有參數全部設置完成,下一步就是用一臺電腦嘗試創建VPN連接,以測試所搭建的PPTP服務器能否正常工作。
在Windows上創建VPN連接大致相同,本例是在Windows 10上創建 VPN,首先通過控制面板或其他方式進入“網絡和共享中心”,如果使用控制面板,具體路徑是“控制面板”→“網絡和internet” →“網絡和共享中心”。
1.進入“網絡和共享中心”后單擊“設置新的連接或網絡”。
2.出現“設置連接或網絡”窗口后,單擊“連接到工作區”。
3.出現“連接到工作區”窗口后,單擊“使用我的Internet連接(VPN)”。
4.出現“鍵入要連接的Internet地址”窗口后,在地址欄輸入映射RouterOS的外網地址。在本例中,RouterOS的內網地址配置是172.16.1.73,外網映射地址為59.56.72.12,此處輸入地址“59.56.71.12”。 在“目標名稱”文本框中為新建的VPN連接取一個名字。在本例中,使用的是“VPN連接”。

創建好VPN連接后,就可以在“控制面板”→“網絡和 Internet”→“網絡連接”找到新創建的VPN連接“VPN連接”。雙擊此連接即可將本地PC通過VPN隧道連接到單位的局域網,首次使用VPN連接,要求輸入用戶名和密碼。
在本例中,前面為已為PPP用戶創建了一個名為“vpntest01”的用戶,密碼是“123456”,用該賬號和密碼連接到單位的PPTP服務器后,就可以訪問單位內部的網絡和應用了。
1.驗證方式不一致引起的故障
筆者在創建VPN連接時,有連接失敗的經歷,筆者分別在Windows XP、Windows 7及Windows 10上都做過嘗試,經檢查,發現所創建VPN連接的身份驗證方式和PPTP服務器提供的身份驗證方式不一致,從而出現連接失敗的現象,解決方法如下:
(1) 通 過“控 制面 板” →“網 絡 和Interne”→“網絡連接”,打開網絡連接窗口。
(2)右擊新創建的VPN連接“VPN連接”,在右鍵菜單中選擇“屬性”。
(3)出現“VPN連接”屬性窗口后,單擊“安全”選項卡,在“身份驗證”攔勾選“允許使用這些協議”,然后勾選在配置PPTP Server時所提供的驗證方式,如mschap2。
2.在單位內部嘗試VPN連接引起的故障
筆者搭建好PPTP服務器后,在單位內找了一臺PC創建VPN連接,急于測試所搭建VPN服務器,結果出現連接不上VPN服務器的故障,如果用RouteOS自帶的PPTP客戶端連接VPN服務器,能連接成功。
如果要在單位測試所搭建的PPTP服務器是否成功,可以開啟手機熱點,當PC連上手機熱點后,再嘗試VPN連接。當然,在局域網內部也是可以使用VPN的,但需要做相應的設置。
3.防火墻禁止使用VPN引起的故障
如何判斷是防火墻還是VPN連接本身的故障,先開啟手機熱點,當PC連接到手機熱點后再進行VPN連接,或者在手機上嘗試VPN連接即可。