Raspberry Pi 樹莓派 VPN 遠端連線

試玩AWS一年免費試用方案 彈指間架好VPN伺服器

建置雲端虛擬私有網路 行動門號互連方便安全(上)

2020-10-14
本文將示範如何透過Amazon Web Services來建立VPN伺服器,然後以手機和Raspberry Pi當作客戶端,連接至該伺服器來建立VPN連線,接著讓Raspberry Pi後端電腦可透過VPN與遠端設備進行連線,同時遠端行動裝置也能夠連入RPI後端的伺服器。

 

筆者曾撰文介紹如何使用Raspberry Pi結合行動門號來建立VPN連線。當時一直覺得遺憾,原因是行動網路取得的IP均為私有IP,無法作為VPN Server使用,故兩個行動門號無法直接建立VPN,必須透過其他具有公網IP的設備方能互相連線。

時至今日,雲端服務已非常成熟,可以在雲端建立VPN Server,並把兩個以上的行動網路設備連入該VPN Server,從而建立VPN網路。

在本文中,將示範如何使用AWS建立VPN伺服器,並使用手機與Raspberry Pi作為客戶端連接至該伺服器建立VPN連線,而且讓Raspberry Pi後端電腦可透過VPN與遠端設備進行連線,同時遠端行動裝置亦可連入RPI後端的伺服器。

測試架構說明

此次測試使用的架構圖如圖1所示,於AWS建置OpenVPN Server,在左邊的手機上安裝OpenVPN Connector,右側則使用4G分享器分享Wi-Fi給RPI使用,並在RPI上安裝OpenVPN Client及進行NAT等相關設定,使得後端的電腦可以連線至VPN並與遠端的手機進行連線,也讓遠端的手機可以連入架構圖右方RPI後端的伺服器。

圖1  測試架構圖。

建立AWS OpenVPN Server

接著,設定OpenVPN Server。登入AWS主控台後(網路上有許多AWS帳號申請的教學,就不再贅述),在此所要使用的是已經安裝及設定好的OpenVPN_AS(OpenVPN Access Server),因此要先進入Marketplace的頁面尋找適當的服務,如圖2所示。先進入AWS管理控制台的頁面,在尋找服務的部分,輸入「marketplace」,AWS Marketplace Subscriptions會自動浮現,然後點選它。

圖2  尋找AWS Marketplace Subscriptions。

Marketplace是一個軟體(伺服器)的市集,可以找尋別人做好的產品。由於目前還沒有訂閱其他軟體,因此需要先點選〔管理訂閱〕來新增訂閱,如圖3所示。

圖3  管理訂閱。

隨後,如圖4所示,在管理訂閱的視窗中點選「造訪『探索產品』」連結。

圖4  探索產品。

網頁右方將會出現搜尋視窗,在此輸入「openvpn」,輸入完成後按下〔Enter〕,才會送出查詢字串,如圖5所示。此處會有多筆輸出,其差異處在於可支援的設備數量,從5部、10部、25部,一直到最多的500部都有。由於此次只是測試用途,所以選擇第一筆,也就是能支援兩台設備的OpenVPN Access Server。

圖5  選擇OpenVPN Access Server。

網頁右上角會出現訂閱的確認按鈕,在此先不需考慮費用的問題(原因後述),直接勇敢地點選〔Continue to Subscribe〕,如圖6所示。

圖6  訂閱OpenVPN Access Server。

接著是使用規範,點選〔Accept Terms〕往下進行,如圖7所示。

圖7  同意使用規範。

然後,需要確認生效日期(Effective date)和失效日期(Expiration date),在此需要稍做等待,狀態會從Pending變成今天的日期,Expiration date會是N/A,日期出現後才可繼續下一步驟,如圖8所示。

圖8  確認使用期限。

在生效日期確認後,開始進行相關設定。點選同頁面右上角的〔Continue to Configuration〕,如圖9所示,開始設定VPN Server。

圖9  設定VPN Server。

終於要開始進入正題了。首先是選擇硬體的部分,由於這裡選擇的是最低階版本,因此硬體的部分無法選擇。軟體的部分,使用預設的2.8.5版本即可。步驟中最重要是Region的選擇,筆者試過幾個區域,其中以Asia Pacific(Tokyo)的回應時間最短(RTT小於150ms),因此就選擇Tokyo,如圖10所示。

圖10  選擇軟硬體及區域。

接著,點選右上角的〔Continue to Launch〕,進行軟體設定,如圖11所示。

圖11  進行軟體設定。

接著是重點中的重點,若很介意費用的部分,請務必小心不要選錯。在EC2 Instance Type的時候,請務必記得要修改成t2.micro!因為目前EC2的t2.micro有一年免費的優惠,可以先測試連線速度和品質是否滿意,如果不滿意就能夠停用它,減少一筆開銷,設定頁面如圖12所示。

圖12  選擇EC2 Instance Type。

如果是從已訂閱的OpenVPN頁面新增Instance,在選擇平台時就可以看到t2.micro有一年免費的方案,如圖13所示。t2.micro目前是Free tier eligible,簡單來說,可以免費使用12個月(在每個月750小時的使用量之內),如果只使用一部Instance,最多就是31 × 24 = 744小時,在免費的範圍中。

圖13  t2.micro一年免費的證明。

緊接著,繼續往下設定,Security Groups Settings不能用預設的default,否則之後會無法建立VPN連線,此處按下〔Create New Based On Seller Settings〕,如圖14所示。

圖14  選擇Security Group Settings。

點選後,在此項次下方會出現設定頁面,先看一下其內容,可以發現此規則開啟的Port包含TCP 22及TCP 443供管理之用,並開啟TCP 943、945及UDP 1194讓VPN連線使用。在視窗內的「Name your security Group」和「Description」部分,本次都輸入OpenVPN Server,接著按下〔Save〕按鈕。完成後的畫面,將如圖15所示。

圖15  設定Security Group。

最後,設定Key Pair Settings。此處的Key用途是為了可以SSH方式登入OpenVPN Server做一些基礎設定,此時點選圖16中的「Create a key pair in EC2」。

圖16  設定登入金鑰。

隨後,瀏覽器會自動開啟新頁籤。接著,在新頁面找尋並點選〔Create Key Pair〕,此處兩個按鈕擇一點選均可,如圖17所示。

圖17  建立金鑰。

然後,輸入金鑰的名稱,並按下〔Create〕。本例輸入的是mypassword,如圖18所示。在此要補充說明一下,經過幾次測試後發現,此頁面顯示有時英文有時中文,有時介面也長得不太一樣,但操作都滿直覺的,讀者應該可以自行克服。

圖18  輸入金鑰名稱。

接下來,瀏覽器會自動下載此金鑰,此例出現的檔名是mypassword.ppk,可用於PuTTY登入該伺服器,如圖19所示。

圖19  產生金鑰並自動下載。

再回到設定OpenVPN Server的主頁面,點選重新整理的圖示,此時應該會自動選擇「mypassword」,最後按下〔Launch〕按鈕,完成相關設定,如圖20所示。

圖20  設定Key Pair Setting並啟動機器。

設定AWS OpenVPN Server

接著要回到EC2的Dashboard,可以看到目前有一個Running Instances,稍做等待,等Instance State成為running之後,先把它的IP記錄下來,此例中為13.115.217.175,如圖21所示。之後,將使用PuTTY登入此IP進行OpenVPN Server相關設定。

圖21  取得實體IP。

緊接著,使用先前建立的金鑰登入伺服器。在此以PuTTY為例,在Host Name和Saved Sessions均輸入13.115.217.175,並按下〔Save〕按鈕,如圖22所示。

圖22  設定PuTTY。

然後,找到左側選單的Connection -> SSH -> Auth,並按下右側的〔Bowser〕按鈕,選擇剛剛下載的mypassword.ppk,如圖23所示。

圖23  讀取mypassword.ppk。

最後按下〔Open〕按鈕,就可以連線至該伺服器。初次連線時會有PuTTY Security Alert,按下〔是〕即可,如圖24所示。

圖24  將server host key加入registry。

另外補充說明一下,後續測試兩三次,下載的檔名有時是pem。如果是pem檔的話,須使用PuTTYgen轉換成ppk檔。讀取pem檔後,在另存新檔的Type of the key請選擇SSH-1(RSA),另存為ppk檔後再使用PuTTY進行連線,或者在Linux的機器上,執行下列指令進行連線:

chmod 400 mypassword.pem ssh -i mypassword.pem openvpnas@ 13.115.217.175

登入帳號請使用「openvpnas」,如圖25所示。

圖25  使用openvpnas帳號登入。

接著開始會有一連串的問題,它採取引導式一筆一筆詢問,基本上都按下〔Enter〕,使用預設值即可。比較重要選項如下:

Should client traffic be routed by default through the VPN? > Press ENTER for default [no]:

是否讓Client所有的流量都透過此VPN連出?此項問題端賴各公司的需求,有公司希望在連線至VPN的時候不讓用戶直接連外(可透過調整OpenVPN Server設定讓用戶無法連線至Internet),主要是避免資料外洩以及考量資訊安全,而其餘的部分,請用戶依自己的需求調整。

之後的示範是以預設值進行測試,若有調整的話(例如Port和網段),請依實況調整。

在完成openvpnas的初始設定後,最後要設定VPN使用者的帳號和密碼,先修改openvpn這個網頁管理者的帳號密碼:

sudo passwd openvpn

這個密碼請務必妥善保存,之後登入Web GUI進行管理及連線VPN時都會使用得到。

新增AWS OpenVPN Server使用者

接下來,將使用網頁瀏覽器開啟「https://13.115.217.175:943/admin」,進行使用者帳號及網路連通的設定。

登入時會有告警,點選〔進階〕按鈕,再點選繼續前往13.115.217.175網站(不安全),如圖26所示。

圖26  登入OpenVPN管理頁面。

然後,輸入帳號openvpn及登入密碼,接著點選〔Agree〕同意其License Agreement,即可登入。

登入之後,只須設定兩個部分,第一個是使用者。先點選左邊選單之「USER MANAGEMENT」裡面的「User Permissions」,然後如圖27所示在「Username」欄位輸入使用的名稱,此例中為「klting」,並按下More Settings的圖示按鈕來設定使用者密碼。

圖27  新增使用者並設定密碼。

緊接著,如圖28所示,在「Password」欄位輸入密碼,並拉至網頁最下方點選〔Save Settings〕。

圖28  設定使用者密碼。

第二個部分是要設定VPN Client彼此間可以互相連線。先點選選單中「CONFIGURATION」裡面的「Advanced VPN」,接著在右邊的網頁中找到「Inter-Client Communication」,並按下〔No〕按鈕,將之切換為「Yes」,如圖29所示,然後同樣拉至網頁最下方,按下〔Save Settings〕。完成VPN Client互連的設定之後,如圖30所示,回到「STATUS」裡面的「Status Overview」,按下〔Stop VPN services〕將它關閉,之後再啟動,讓它重新讀取設定檔。

圖29  設定VPN Client可互連。
圖30  重新套用設定檔重啟VPN Server。

手機連線至VPN Server

接下來,將示範如何從手機連線至OpenVPN Server並讓兩台手機互連。

理論上,iOS手機的操作方式應該與Android手機相去不遠,在此以iOS手機進行示範。

先在App Store搜尋並安裝OpenVPN Connect,下載安裝完成後將之開啟。如圖31所示,先在URL部分輸入「https://13.115.217.175(VPN Server的Public IP)」,然後點選「NEXT」,開始在手機上新增一筆Profile(設定檔)。

圖31  輸入VPN網址。

由於此App會登入網頁抓取必要資訊,因此會出現是否接受非正式憑證的詢問,點選「Accept」,如圖32所示。

圖32  接受非正式憑證。

App會登入OpenVPN頁面下載此用戶專屬的設定檔並匯入設備中,如圖33所示,在「Username」輸入剛才OpenVPN Server新增的「klting」,而「Password」輸入剛設定的密碼,隨後再點選「IMPORT」。

圖33  匯入設定檔。

接著會詢問是否將「OpenVPN」納管至手機的VPN設定,點選「允許」,如圖34所示。

圖34  將OpenVPN加入手機VPN設定。

然後,將詢問手機密碼,輸入密碼將之加入VPN設定,接下來在「Password」欄位輸入先前在OpenVPN Server設定之帳號klting的密碼,然後點選「OK」,操作過程如圖35所示。

圖35  設定連線密碼。

在連線建立後,可以看到相關連線資訊,比較重要的是「YOUR PRIVATE IP」,如果之後有連線至此設備的需求,這個就是要被連線的IP,其他資訊可參考圖36,包含使用的協定TCP或UDP,所使用的Port為443或1194等。

圖36  連線相關資訊。

然後,再找一支Android手機連線至VPN Server,帳號必須與先前登入的不同,此處使用「openvpn」這個帳號,建立連線之後,回到Web UI,點選「STATUS」裡面的「Status Overview」來查看目前狀態,如圖37所示,可以發現目前已有兩個使用者在連線中,由於當初訂閱時選擇的是預設支援兩部分裝置的伺服器,因此目前僅能容許兩個使用者連線,如圖37右下角所示。

圖37  查看目前連線設備數量。

接著點選「STATUS」裡面的「Current Users」,將可查看到目前用戶取得的IP,如圖38所示。從中可以發現,klting(iOS)手機取得的內部IP為172.27.232.3,而openvpn(Android)手機取得的內部IP是172.27.232.2。

圖38  查看目前連線設備內部IP。

接下來,從iOS手機去ping Android手機,以驗證兩者之間可透過VPN Server進行VPN連線,測試結果如圖39所示,兩者可正常連線。

圖39  確認終端設備可透過VPN連線。

結語

限於篇幅,本文分成上下兩集,下集文章將接著介紹如何透過RPI建立VPN連線,並將後端的設備也一併拉入VPN中,同時也會示範如何讓遠端的手機透過VPN連線,連至RPI後端的伺服器,開啟內部服務。

<本文作者:丁光立,在ISP工作多年。對於Cisco設備較熟悉,除此之外也研究Linux,這幾年慢慢把觸角伸到資安的領域,並會在自己的blog(http://tiserle.blogspot.com/)分享一些實務上的經驗和測試心得。>

 


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!