OpenVPN Access Server是知名的開源免費軟體,可為企業打造一條專屬的VPN通道,而不與現行的企業VPN網路混用,如此不僅達到網路流量的負載平衡,也能讓IT人員在外網維運vSphere時更加安全便利,本文將實戰講解如何將OpenVPN網路部署在vSphere的架構中。
對於虛擬私人網路(VPN)的使用,不僅一般資訊工作者有這樣的需求,其實對於IT部門的人員而言也是相當重要,因為許多時候他們得隨時透過家裡、手機或是任意熱點的網路,遠端連線進入公司的內網來協助處理各類與IT運行有關的問題,例如程式的更新、資料庫的修改、系統的故障排除等等。
面對IT部門自己的VPN網路需求,可以思考一下自己是否需要一個獨立專屬的VPN網路,還是要與一般用戶的VPN網路混合使用?
現今許多企業的各種應用程式、資料庫服務、檔案服務都是部署在以VMware vSphere為主的虛擬化平台架構下,IT管理人員必須隨時維持好所有ESXi主機、叢集、虛擬機器、容器、網路配置、資料存放區的正常運行,甚至於還得進一步監管一些重要應用服務的健康狀態,為此讓IT管理人員有一個專用的VPN通道,方便隨時透過遠端安全連入進行維運尤其重要。至於現行開放給一般用戶的VPN網路,則可以做為IT部門的VPN備援通道,相信會是不錯的規劃方式。
若要建立一個管理VMware vSphere專屬的VPN網路,建議選擇開源的OpenVPN,主要原因是它有知名的技術團隊持續維護與更新,在版本選擇上又有社群版本和商業版本可選,且即便是商業版本也提供了2個無限期的VPN連線授權。再者,它也是現今許多無線路由分享器選擇直接內建的一項VPN網路功能。接下來,就以實戰講解的方式依序介紹有關於OpenVPN在品牌網路設備的使用,以及如何部署商業版與社群版的關鍵技巧。
無線路由分享器的OpenVPN
現今許多品牌無線路由分享器中都會直接內建OpenVPN伺服器的功能,在此簡單介紹一款ASUS的無線路由分享器如何啟用OpenVPN功能,並且讓有被授權的用戶透過匯入設定檔案與輸入帳號密碼來進行VPN的安全連線。
如圖1所示,首先在「VPN伺服器-OpenVPN」頁面中,選擇「開啟OpenVPN伺服器」至「ON」設定。接著,在下方的「用戶名稱與密碼」區域中,完成設定每一位用戶的帳號及密碼。原則上,只要完成此二項簡單的啟用設定,即可讓用戶透過OpenVPN Connect進行連線。
但是,在某些情況下可能需要修改一下配置的細節,例如自訂VPN子網路。首先,在「VPN詳細設定」選單中選取「進階設定」。在如圖2所示的頁面中,除了可以自定義介面類型、通訊協定、伺服器通訊埠以及驗證模式等設定外,更重要的是可以設定「VPN子網路/子網路遮罩」,以及決定是否讓以VPN連入的用戶能夠存取LAN資源。
至於是否要啟用「僅使用者名稱/密碼驗證」,建議仍採用預設的「否」設定是最好,因為這裡必須採用OpenVPN完整的安全驗證機制才行。
在完成OpenVPN功能的啟用與伺服器進階設定後,就可以如圖3所示按下位於「匯出OpenVPN設定檔」的〔匯出〕按鈕,下載OpenVPN Connect用戶專用的設定檔案(例如client.ovpn),之後凡是被授予連線帳號權限的用戶,就可以使用自己的帳號密碼搭配這個設定檔案,經由OpenVPN Connect的桌面程式或行動裝置的App,連線及存取企業vSphere VPN網路。
商業版OpenVPN Access Server部署
雖然選擇部署的是商業版本,若想要獲得更多的VPN連線數量授權以及完整服務,需要額外支付商業版本的費用。但其實只要善用它所提供的2個無限期VPN連線授權,便可以讓vSphere管理人員免費使用OpenVPN網路的專屬連線,不僅連線方式既安全又快速,2個授權的連線限制其實也已足夠使用。
如圖4所示,到以下網址註冊下載即可,並且可以自由選擇下載選定作業系統的Software Packages,包括Ubuntu、Debian、Red Hat、CentOS、Amazon Linux 2等等,或是直接下載選定虛擬化平台的Virtual Appliances來使用,可省去繁雜的安裝設定步驟。接下來,將選擇下載VMware ESXi的Virtual Appliances當作部署示範。
‧商業版OpenVPN Access Server下載網址:https://openvpn.net/download-open-vpn/
首先,以管理員身分連線登入vSphere Client網站。開啟vCenter Server或ESXi主機節點的頁面,如圖5所示,然後點選「動作」選單中的【部署OVF範本】。
在「選取名稱和資料夾」頁面中,為這個OpenVPN的虛擬機器命名並選擇所在位置,然後按下〔下一頁〕按鈕。在「選取計算資源」頁面中,則選擇叢集或ESXi主機來做為運行此虛擬機器的主機。選取之後,只要「相容性」區域內顯示「相容性檢查成功」訊息,即可按下〔下一頁〕按鈕。
接著是「檢閱詳細資料」頁面,可以查看到此部署範本的檔案大小以及部署後所需的磁碟大小,其中精簡佈建為1.9GB,完整佈建則需要8GB的磁碟空間。按下〔下一頁〕按鈕,繼續進行設定。
如圖6所示,在「選取儲存區」頁面中,除了需要選取用來存放虛擬機器檔案的儲存區外,還必須根據所需的虛擬磁碟格式選擇「精簡佈建」或「完整佈建」,前者優點在於只需要很小的磁碟空間即可完成部署,不過必須隨著資料量的成長來計算磁碟擴增的空間大小,因此在運行性能上會較差。
至於後者恰好相反,初始雖然直接占用掉較大的磁碟空間,但由於不必再計算磁碟擴增的大小問題,因此性能的展現肯定會更好。若是在正式運行的環境中,建議採用此選項設定。待確認「相容性」區域中顯示出「相容性檢查成功」訊息後,即可按下〔下一頁〕按鈕。
在「選取網路」頁面中,指定好準備用來做為OpenVPN Server虛擬機器的網路,再按下〔下一頁〕按鈕。最後,在「即將完成」頁面中再次確認上述步驟的所有設定是否正確,確認無誤後按下〔完成〕按鈕。
完成部署OVF範本的操作後,就可以將此虛擬機器完成開機動作。在啟動過程中,首先會出現版權宣告的聲明確認並完成相關服務的啟動。緊接著,出現如圖7所示的初始設定確認,其中建議採用預設值的選項設定,包括管理員網站的連接埠、OpenVPN Daemon連接埠、用戶端預設透過VPN網路進行路由連線、用戶端DNS預設透過VPN網路進行路由連線、使用本機驗證來存取內部資料庫、內網可連線存取用戶端。
若有額外購買合法的授權金鑰,可以在最後的「Please specify your Activation key」提示訊息中輸入,若保持空白並按下〔Enter〕鍵,則可以等到後續再到OpenVPN的管理員網站中輸入。
完成上述的初始設定後,系統就會開始進行OpenVPN網站的基本配置。成功完成網站配置後,將開啟如圖8所示的相關訊息。在此除了能夠查看管理員網站以及用戶網站的連線位址與連接埠外,也可以得知預設管理員的帳號與密碼皆是「openvpn」,可執行「passwd openvpn」命令來修改密碼。
完成預設管理員帳號openvpn密碼的修改後,如圖9所示就可以透過同一網路中的其他電腦,以任一網頁瀏覽器輸入管理員網站的網址,進行首次的連線登入。
成功登入管理員網站後,如圖10所示可以隨時到「Configuration」→「Activation」頁面中輸入產品金鑰。當然,也可以不用輸入產品金鑰,繼續維持2個VPN連線數量的使用授權。
在「Status」→「Status Overview」頁面中,如圖11所示,則可以檢視到目前伺服器的運行狀態資訊,包括版本資訊、伺服器名稱、允許連線的用戶數量、目前以連線的用戶數量、用戶採用的驗證方式、接受VPN用戶連線的本機IP位址、開放VPN連線的連接埠、採用的OSI層級、用戶存取內網所使用的連線方式。值得注意的是,也可以在此頁面中隨時按下〔Stop VPN services〕按鈕,暫時停止VPN網路服務的執行,以便進行系統維護任務。
進一步若想要查看目前有哪些用戶正在使用VPN網路,可以點選至「Status」→「Current Users」頁面中查詢。若需要查看完整的系統運行紀錄,則點選至「Status」→「Log Reports」頁面。
VPN用戶管理
針對哪一些用戶才能夠連線OpenVPN網路,以及登入後有哪一些存取限制,都可以到「User Management」→「User Permissions」頁面中進行管理。如圖12所示,在此可以隨時修改任一用戶帳號的密碼,並決定是否允許透過用戶網站(CWS)來變更密碼,若要強制要求密碼的複雜度,將「Enable password strength checking in CWS」選項設定成「Yes」即可。
接著,在VPN用戶端的IP位址配置部分,可以決定使用預設的動態IP配置方式,還是要特別輸入選定的靜態IP位址。在存取控制設定部分,可以選擇網路連線方式採用NAT還是Routing,以及手動加入允許VPN用戶端存取的網路。本頁面最後,還可以決定是否要設定VPN的閘道以及DMZ的IP位址,預設狀態下這兩項設定皆為「No」。
VPN網路配置
關於OpenVPN的基本配置,除了需要注意前面所介紹的用戶管理設定外,還必須注意VPN相關的IP網路配置。首先是「Configuration」→「Network Settings」頁面中,關於用以提供連接的本機IP位址,當主機有配置多個網卡與IP位址時,可以考慮是否啟用所有網卡都允許VPN的連接。
緊接著,在「Multi-Daemon Mode」區域中,決定TCP Daemons與UDP Daemons所要使用的連接埠,預設分別是443和1194。在網站的IP位址與連接埠的配置部分,如圖13所示,預設管理員網站是使用預設網卡IP位址,以及綁定943連接埠。用戶端網站預設則是比照管理員網站的配置,若想要分開配置,只要先將「Use a different IP address or port」選項設定成「Yes」,再手動設定所要綁定的IP位址與連接埠即可。
進一步開啟「Configuration」→「VPN Settings」頁面,在此決定VPN網路所使用的IP網段,包括動態IP位址網路、靜態IP位址網路以及群組IP位址網路,其中動態IP位址網路是必要的設定。必須注意的是,這裡的網路位址設定必須配合前面所介紹過的用戶帳號權限設定。
最後,在此頁面的下方還可進一步設定「Routing」與「DNS Settings」兩項配置。如圖14所示,在「Routing」部分,可讓管理員輸入多個允許VPN Client連線存取的網路位址,並且能夠決定是否允許透過VPN路由連線至Internet,以及經由VPN閘道IP位址來存取網路服務。
在「DNS Settings」設定部分,可決定如何配置VPN Client的DNS位址配置,預設狀態下將使用與VPN Server相同的DNS設定。也可以根據實際需求,設定不允許修改VPN Client的DNS配置,或是強制設定另外配置的DNS位址。
整合Google雙因子認證
單純透過OpenVPN所提供的用戶端設定檔案搭配帳號密碼的驗證,可能還會覺得驗證機制的安全性不夠,或是無法滿足企業IT在資訊安全方面的要求。不管原因為何,此時可以考慮進一步整合同樣是免費的Google雙因子驗證服務,讓登入者的身分確認多一道必要的臨時安全驗證碼。
想要在OpenVPN商業版本的架構中,使用這項安全機制相當容易,因為它早已內建於安全驗證功能的設定中。只要在「Authentication」→「General」頁面中,找到「Enable Google Authenticator MFA」選項,將它設定成「Yes」即可。
接下來,所有已被授權連線存取OpenVPN網路的用戶,就可以在自己的手機上安裝Google Authenticator App,然後如圖15所示掃描OpenVPN Access Server網站上的QR Code,即可將這台VPN連線的登入加入至Google的安全驗證機制中,並完成與這台手機綁定的操作。
一旦VPN用戶完成了Google Authenticator App的設定,未來無論透過電腦還是各類行動裝置的連線方式來登入公司的OpenVPN網路,皆必須通過第一道用戶自身的密碼,以及第二道Google Authenticator App所產生的動態碼輸入,才能完成OpenVPN網路的連線與登入。如圖16所示,便是透過OpenVPN Connect匯入完成設定檔案後,當要進行連線時首先出現的第一道密碼驗證提示。
在通過了第一道密碼驗之後,緊接著會出現如圖17所示的「Multi-factor authentication」提示訊息,而這個提示訊息僅有針對已啟用「Enable Google Authenticator MFA」選項的OpenVPN網路才會出現。
此時,開啟手機中的Google Authenticator App,如圖18所示便會看到針對OpenVPN所動態產生的一組認證碼,用戶必須在此認證碼過期之前在OpenVPN Connect中完成輸入,並按下〔SEND〕按鈕,否則將發生驗證失敗的提示訊息。萬一發生來不及輸入現行的動態認證碼,只要稍待一會兒再查看下一回的動態認證碼即可。
如圖19所示,便是成功以OpenVPN Connect連線登入OpenVPN網路的狀態頁面。在此便可以檢視到目前即時的連線速率,包括連入、連出的網路流量以及連線時間。用戶可以根據實際需要,添加更多的OpenVPN連線設定。
如果用戶是從Windows版本的OpenVPN Connect進行連線,在完成連線登入後,將可以如圖20所示透過桌面右下方工作列的圖示,按下滑鼠右鍵來執行各項設定,包括VPN協定、連線逾時、軟體更新、佈景主題、進階設定等等。此外,也可以隨時選擇中斷連線、匯入新設定檔案、添加Proxy等設定。
社群版OpenVPN部署
如果想要快速完成OpenVPN的部署,並且能夠接受僅開放兩個連線授權的限制,或者同意支付額外的授權費用來取得更多的連線授權與服務,那麼商業版肯定是最佳的選擇。然而,若是進階的IT管理人員並且不想要受到連線授權的數量限制以及額外的授權費用支出,那麼接下來的社群版本部署教學,同樣可以創建屬於自家IT環境的OpenVPN網路。
首先,連結至以下官方網站來下載不同作業系統類型的OpenVPN Server安裝程式,如圖21所示,其中Windows 64-bit MSI installer是這裡所要講解的安裝程式。
‧OpenVPN Server Community下載網址:https://openvpn.net/community-downloads/
以安裝在Windows Server 2019為例,在執行安裝程式後,會出現如圖22所示的安裝類型頁面。若按下預設的〔Install Now〕按鈕可以立即完成基本安裝,但此時必須按下〔Customize〕按鈕,進行OpenVPN Server的自定義安裝設定。
在「Custom Installation」頁面中,如圖23所示,點選「OpenVPN Service」選項後,再點選【Entire feature will be installed on local hard drive】,這表示要完整安裝這項功能至本機硬碟中。另外,也將「OpenSSL Utilities」選項一併選取,完整安裝至本機硬碟。
在安裝過程中,可能會出現分別安裝「TAP-Windows Provider V9 網路介面卡」以及「WireGuard LLC網路介面卡」的訊息提示,皆按下〔安裝〕按鈕即可。成功完成安裝後,開啟Windows的「服務」管理介面,將會查看到一個新增加的「OpenVPN Interactive Service」服務,它目前已在「啟動」狀態並且設定為「自動」的啟動類型。
在網路方面,則可以發現在「控制台」→「網路和網際網路」→「網路連線」頁面中,如圖24所示分別增加了「OpenVPN TAP-Windows6」與「OpenVPN Wintun」兩個網路,後續在VPN網路的相關配置設定中將會使用到。
安裝與設定OpenSSL Toolkit
接下來必須完成OpenSSL Toolkit的安裝與基本設定,可以連到以下網址下載Windows的版本。在執行安裝程式後,應該會出現需要加裝Visual C++ Redistributable的提示訊息,可以按下〔是〕按鈕直接完成下載與安裝,或是預先到以下的Microsoft官網手動下載安裝。
‧OpenSSL Installer for Windows下載網址:https://slproweb.com/products/Win32OpenSSL.html
‧Visual C++ Redistributable下載網址:https://docs.microsoft.com/en-GB/cpp/windows/latest-supported-vc-redist?view=msvc-170
關於OpenSSL Toolkit的安裝,首先必須依序設定安裝路徑、程式捷徑以及如圖25所示的OpenSSL DLL存放路徑,建議選擇預設的「The Windows system directory」選項即可,然後按下〔Next〕按鈕。之後,在「Ready to Install」頁面中按下〔Install〕按鈕,就會開始安裝。
安裝OpenSSL Toolkit之後,緊接著必須編輯Windows的系統變數,以便讓後續有關於OpenSSL的命令能夠正常執行。開啟Windows的「系統內容」頁面,然後按下〔環境變數〕按鈕。在「環境變數」頁面中,首先選取「系統變數」清單中的「Path」並按下〔編輯〕按鈕,開啟「編輯系統變數」頁面,如圖26所示,在「變數值」欄位中以分號(;)相隔並輸入OpenSSL程式的完整路徑,預設路徑為「C:\Program Files\OpenSSL-Win64\bin」,最後按下〔確定〕按鈕。
接著,還必須新增並編輯一個名為OPENSSK_CONF的系統變數,在「編輯系統變數」頁面中的「變數值」欄位中輸入「C:\Program Files\OpenSSL-Win64\bin\openssl.cfg」即可,然後按下〔確定〕按鈕。
完成OpenSSL系統變數的設定後,接下來開啟命令提示字元視窗,然後如圖27所示執行「openssl version -a」命令,看看是否能夠成功取得關於OpenSSL版本的完整資訊,包括版本編號、發行日、相容的作業平台、程式安裝路徑、引擎程式存放路徑、模組檔案存放路徑、CPU資訊等等。
緊接著,開啟至OpenSSL程式的安裝路徑(預設為C:\Progrma Files\OpenSSL-Win64\bin),然後新增一個名為「demoCA」的資料夾,並在其資料夾下再分別新增一個「Certs」與一個「NewCerts」子資料夾。完成資料夾的新增後,以Notepad程式開啟位於「bin」資料夾中的openssl.cfg。最後,修改如圖28所示的dir設定,完整輸入demoCA資料夾的路徑,並且需要以雙斜線(\\)的輸入方式,做為每一階層路徑的表示法。
關於OpenSSL Toolkit的安裝與執行,如果忘了預先安裝Visual C++ Redistributable,將會出現如圖29所示的錯誤訊息,此時只要再臨時完成下載與安裝即可解決。
配置CA憑證
在完成OpenSSL Toolkit的基本安裝與設定後,接下來必須進一步透過它所提供的命令工具,完成一連串有關於OpenVPN憑證的建立與配置。
首先,透過以下命令參數來完成CA憑證與金鑰檔案的建立。在此除了可以設定憑證的期限與版本,以及新憑證與金鑰檔案存放路徑外,還必須指定OpenSSL設定文件的存放路徑,必須正確設定才能夠成功執行:
openssl req -days 3650 -nodes -new -x509 -extensions v3_ca -keyout certs\ca.key -out certs\ca.crt -config "C:\Program Files\OpenSSL-Win64\bin\openssl.cfg" openssl x509 -noout -text -in certs\ ca.crt
接著,透過以下命令參數完成伺服器金鑰與憑證的要求,並完成相關憑證檔案的建立。其中憑證與金鑰的要求設定中,同樣必須正確指定OpenSSL設定文件的存放路徑:
openssl req -days 3650 -nodes -new -keyout certs\server.key -out certs\ server.csr -config "C:\Program Files\ OpenSSL-Win64\bin\openssl.cfg" openssl ca -days 3650 -extensions usr_cert -cert certs\ca.crt -keyfile certs\ca.key -out server.crt -infiles certs\server.csr openssl x509 -text -noout -in server.crt
完成CA憑證與伺服器憑證的建立後,在命令提示列中切換到憑證檔案的存放路徑(例如demoCA),然後如圖30所示執行以下命令參數來檢查伺服器憑證檔案(server.crt)的狀態。若檢查結果顯示為OK,即表示此憑證檔案沒有問題:
openssl verify -CAfile certs\ca.crt server.crt
完成建立OpenVPN伺服器所需要的憑證後,接著還欠缺的就是用戶端所需要的金鑰與憑證檔案。執行以下的命令參數分別完成用戶端金鑰、憑證檔案的要求與建立,過程中同樣必須正確指定OpenSSL設定文件的存放路徑:
openssl req -days 3650 -nodes -new -keyout certs\client1.key -out certs\client1.csr -config "C:\Program Files\OpenSSL-Win64\ bin\openssl.cfg" openssl ca -days 3650 -extensions usr_cert -cert certs\ca.crt -keyfile certs\ca.key -out client1.crt -infiles certs\client1.csr openssl dhparam -out certs\dh4096.pem 4096
待完成建立用戶端金鑰與憑證檔案後,就可以來產生當OpenVPN用戶端連線伺服器時,所需要使用到的TLS驗證金鑰。可透過以下命令參數完成建立:
openvpn --genkey tls-auth "C:\Program Files\OpenSSL-Win64\bin\demoCA\ certs\ta.key"
終於完成了CA憑證、伺服器憑證、用戶端憑證以及TLS驗證金鑰的準備。關於這部分所有檔案,若是依據本文講解中所使用的系統預設路徑,便可以在「C:\Progrma Files\OpenSSL-Win64\bin\demoCA\Certs」路徑中找到這些檔案。
啟用NAT於OpenVPN Server
完成OpenVPN伺服器安裝與憑證配置後,基本上就可以開始正常運行了,不過為了讓來自Internet的用戶端可以連線,除了必須開通企業的Edge Firewall外,對於Windows Server本身的防火牆相關連接埠同樣也必須開通,並且還得完成NAT(Network Address Translation)設定。
首先是伺服器防火牆的配置,開啟Windows PowerShell命令視窗,然後透過以下命令參數來完成允許UDP 1194埠口的連入,此埠口便是OpenVPN伺服器的預設埠口。若在前面部署的配置文件中有修改過此設定,記得在此的設定也必須做同樣的變更:
New-NetFirewallRule -DisplayName "OpenVPN" -Direction inbound -Profile Any -Action Allow -LocalPort 1194 -Protocol UDP
完成OpenVPN伺服器防火牆的基本設定後,接下來要進行的是NAT網路位址的轉譯設定。先確認已完成安裝「路由及遠端存取」的伺服器功能,然後開啟其管理介面,並且在本機伺服器節點的右鍵選單中點選【設定和啟用路由及遠端存取】選項,來開啟如圖31所示的「設定」頁面,選取「網路位址轉譯(NAT)」並按下〔下一步〕按鈕。
來到「NAT網際網路連線」頁面後,正確選取用以連線到網際網路的區域連線介面,並按下〔下一步〕按鈕。如圖32所示,在「網路選取項目」頁面中選取將會有Internet共用存取權的網路,在此便需要選擇「OpenVPN TAP-Windows6」網路介面,然後按下〔下一步〕按鈕繼續。
在最後完成設定的頁面中,系統會提示使用NAT時必須依賴外部DNS和DHCP伺服器的配置才能運行,因此必須確認這兩項服務已經在網路中正常運行,這樣Internet用戶端才能夠通過連線來取得VPN的網路IP位址,最後按下〔完成〕按鈕。
還記得在前面的步驟中,已選取用以連線到網際網路的區域連線介面,接下來便需要針對這個區域連線介面,開啟「內容」頁面。如圖33所示,在「NAT」子頁面中確認已選取「連線到網際網路的公用介面」,並勾選「在這個介面上啟用NAT」兩項設定。此外,在「服務和連接埠」子頁面中,記得將其中的「遠端桌面」開啟,管理人員才能夠隨時透過遠端桌面連線的方式進行管理。
完成部署社群版本的OpenVPN Server後,一樣可以使用各種平台的OpenVPN Connect進行連線測試,包括iOS、Android的行動裝置皆有支援,且連線登入的方式與商業版本相同。
<本文作者:顧武雄, Microsoft MVP 2004-2016、MCITP與MCTS認證專家、台灣微軟Technet、TechDays、Webcast、MVA特約資深顧問講師、VMware vExpert 2016-217、IBM Unified Communications/Notes/Domino/Connections Certified。>