openvpn Ubuntu PPTP VPN

在Ubuntu快速架設VPN伺服器

2011-09-05
許多公司會採用VPN技術讓員工從外部網路連回公司,並將該電腦直接加入公司的本地網路,以方便業務的正常運作,因此VPN技術已經成為資訊人員必修的技能。本文先說明VPN的特色、VPN伺服器的種類,最後示範如何在Ubuntu系統安裝與設定PPTP套件,以便架好VPN伺服器。
近日,世界各地的新聞媒體紛紛報導全球資訊網已經發明二十年的新聞,並且強調全球資訊網對於人類生活的改變。

二十年前由任職於歐洲核子研究組織(CERN)的柏納李(Tim Berners-Lee's)所發明的全球資訊網,由於使用上相當方便,加上多年來技術上不斷的更新與演變,讓許多人誤以為全球資訊網便等於網際網路。

在網際網路應用上,屬於較晚開始發展的全球資訊網都已經有二十年的歷史,並且成為大多數人主要使用的網路技術之一。由此可以想見,網際網路相關技術的發展都已經相當成熟,而且是大多數人工作或生活中不可或缺的工具。

網際網路的便利性,自然也帶來許多革命性的變化。以往只要一部電話機加上一部傳真機便能開始營運一家公司,現在至少需要再加上網際網路等相關服務,例如電子郵件或是公司網站等等。而員工在處理公司相關的業務時,也需要大量使用網路所提供的功能,才能有效率的完成工作。

雖然網路的方便性為人類帶來不少幫助,但隨之而來則是安全性的相關問題。

為了阻擋不必要的連線存取要求,許多網路主機或軟體系統一般都會架設在公司的內部網路內,而且只允許員工在公司內部使用。

這樣的設定雖然可以滿足資訊安全的需求,但也造成員工無法在辦公室以外的地方存取公司內部網路所提供的資訊。

當員工回到家中但又必須連接公司內部伺服器,或是出差海外急須使用公司內部資訊時,這樣的安全性措施反而會造成負面影響,造成工作處理上的不便。

為了解決這樣的問題,許多公司會採用「虛擬私人網路」(Virtual Private Network,VPN)技術,讓員工可以從外部網路連回公司,並且將該電腦直接加入公司的本地網路中。

如此一來,雖然員工實際使用的是外部網路線路,但因為該部電腦會被視為公司本地網路的一份子,因此也能夠直接存取公司內部的各種主機或網路服務。

之所以能夠利用VPN達到這種額外的應用模式,主要是因為VPN本身便是一種計算機網路的特殊應用技術。VPN基本上都是在公開網路上使用,並且允許使用者與遠端網路中的主機進行私密資料的交換。

VPN特色說明

VPN除了可以讓使用者從遠端環境連接至公司的內部網路外,也能夠讓公司行號使用VPN作為各地分公司彼此之間的溝通管道。這些管道可以用來分享私有資料,也能作為機密檔案的傳輸途徑,或是共用網路上的各種資源。

除了這些用途外,使用者也能將VPN當作突破網路存取限制的手段。例如,內部網路對外有防火牆機制,以避免內部使用者存取特定網站或網址,或者使用網頁過濾技術禁止內部使用者存取特定網站的網頁,都能利用VPN進行掩護,以通道技術存取這些已經被禁止存取的網站或網路服務。

而原先只允許在內部網路進行存取的主機或資料,一旦開放使用者從外部網路進行存取,是否意味著外人有機會可以使用竊聽與截取的手段,直接取得機密資料?或者更進一步登入內部網路而取得合法使用者的身分?關於這樣的安全議題,VPN也已經有防範措施。以使用者身分為例,唯有擁有正確帳號與密碼的使用者,才能通過VPN伺服器的認證,並將自己的電腦加入內部網路中。

此外,為了避免本地電腦與遠端主機在進行資料交換期間,發生網路封包遭人竊聽並取得機密資料的問題發生,VPN本身採用資料加密技術,將所有進行傳輸的資料先行編碼,且只有取得授權的使用者才能加以解密。換言之,VPN提供了相當安全的資料交換機制,並可用來傳送各種不同的網路封包。

但在使用VPN技術時,必須特別注意編碼機制是否啟用的問題,因為VPN允許使用者在不啟用資料加密機制的情況下進行資料交換與傳輸的工作。如果在使用VPN時,並未同時啟用資料加密機制,則所有的網路封包都將以明碼進行傳送,自然也就失去資料保密的功能。

一般來說,因為VPN都是用來存取一些只適合在內部網路傳輸的資料,所以這些資料多半都具有一定程度的機密性。如果要避免這些資料經由VPN傳輸的過程外流至他人手中,最好在使用VPN時確認資料已經經過加密,才不至於使用明碼方式進行資料傳輸。

若以技術觀點來看,VPN所使用的通訊協定會將網路傳輸資料進行封裝,同時針對這些資料進行加密與編碼的工作,即使這些網路裝置並未在相同的私有網路內,也能夠讓這些資料在眾多網路裝置中安全地進行傳送。

在傳輸過程中,使用者並不會意識到這些資料的傳送過程有任何相異之處,反而會覺得自己的電腦似乎正處於指定的私人網路內。

由於存取的是私人網路,加上使用的是虛擬技術,讓遠端網路以為此電腦也在該私人網路中,也因此這樣的網路技術,才會命名為虛擬私人網路。

選擇合適的VPN伺服器

由於VPN可以帶來許多網路使用上的便利性,因此要架設一部VPN伺服器並不困難,甚至也有相當容易取得的解決方案。例如目前已經廣為流行的無線網路AP,即可在許多機種中直接找到VPN伺服器的支援功能。

但是這樣的解法方案也有其缺點,例如在稍具規模的公司中可能會有許多人共同使用VPN的需求產生。此時,如果無線網路AP本身的CPU處理速度不夠快,很可能會發生當機或存取速度下降的情況發生。另外,某些公司內部並沒有使用無線網路的需求,為了提供VPN的功能而採購無線AP,就可能造成不必要的金錢浪費。

另一個自行架設VPN伺服器的方法,則是使用現有的主機進行設定。目前大多數主流的作業系統都能進行VPN伺服器的架設,例如Windows與Linux都提供相關的功能支援,只是可能需要另行下載與安裝相關的軟體或套件。除了作業系統有不同的選擇外,VPN伺服器的軟體也有許多選擇。

以Linux為例,常見的VPN伺服器選擇便有PPTP、Open VPN等不同的軟體。各種不同的作業系統或VPN伺服器軟體都有其優缺點,使用時只須挑選個人慣用的系統或軟體套件,不一定要使用特定的軟體。

接下來,將介紹如何使用Ubuntu系統安裝與設定PPTP套件,以便提供VPN伺服器的功能。選用PPTP套件最主要的原因,是因為安裝完成後只須修改幾個設定檔,就可以開始使用VPN功能,在安裝與設定上較為簡單。

以Ubuntu安裝PPTP伺服器

PPTP的套件已經被列入APT套件管理系統中,所以只須執行「sudo apt-get install pptpd」指令,即可自動完成此套件的安裝作業。PPTP套件安裝完成後,只須修改三個設定檔,即可完成整個VPN伺服器的安裝與設定工作。這三個設定檔分別是「/etc/pptpd.conf」、「/etc/ppp/pptpd-options」以及「/etc/ppp/chap-secrets」。

▲在Ubuntu系統中只需要一個指令即可完成安裝VPN伺服器。

修改/etc/pptpd.conf

在此設定檔中,需要修改的項目只有設定檔路徑、紀錄檔功能是否啟用、本地端(指VPN伺服器本身)使用的IP位址,以及VPN客戶端連線後可以使用的IP位址。當VPN客戶端連線成功後,VPN伺服器會依照設定從此範圍的IP位址中指派一個IP給對方。

設定檔路徑的預設值為「option /etc/ppp/pptpd-options」,通常並不需要更改此設定。如果有在此設定檔中指定「logwtmp」項目,則會記錄每一個客戶端連線的開始與結束時間。倘若不想記錄這些資訊,在「logwtmp」前面加上註解符號「#」即可。

「localip」指定了VPN伺服器所使用的IP位址,一般只要指定正確的位址,便不會有任何的錯誤發生。「remoteip」則是指定客戶端連線可以使用的IP位址範圍,可用「remoteip 192.168.0.234-238,192.168.0.245」這種格式加以指定,表示192.168.0.234到192.168.0.245這十二個IP位址,都可以指派成為客戶端連線時所使用的IP位址。

只要此範圍內的所有IP位址與本地網路中已被使用的位址沒有衝突,就能作為客戶端可以使用的IP位址範圍。此處指派的位址都是私有位址(Private IP Address),因為大多數的內部網路會使用私有位址。

▲「/etc/pptpd.conf」設定檔中最重要的項目為localip與remoteip。

設定/etc/ppp/pptpd-options

在「/etc/ppp/pptpd-options」設定檔中,只須注意「name」與「ms-dns」兩個設定項目。「name」欄位表示此VPN伺服器所使用的名稱,直接使用預設值「pptpd」,或是自行指定新名稱皆可。

要注意的是,此名稱稍後在「/etc/ppp/chap-secrets」設定檔中會被使用,因此務必指定正確的名稱才能成功完成VPN連線。

如果客戶端使用的是Windows版本的VPN連接程式,可以由VPN伺服器決定該連線所須使用的DNS伺服器位址。此時只須指定此設定檔中的「ms-dns」欄位,並在後方加上正確的DNS伺服器位址即可。

「ms-dns」欄位可以同時設定二組,第一組會被設定為Windows客戶端的主要DNS伺服器,第二組則是次要DNS伺服器。但此欄位最多只能設定二組,超過二組的部分將不會被使用,例如:


▲「/etc/ppp/pptpd-options」設定檔通常只需要修改名稱與DNS設定。

設定/etc/ppp/chap-secrets

「/etc/ppp/chap-secrets」便是用來設定VPN使用者帳號與密碼的檔案,由於採用的是普通文字檔格式,因此務必確認此檔案的擁有者與群組都是「root」,且存取權限設定為「-rw-------」,也就是只有root才能讀取與寫入此檔案,其他帳號都不能存取此檔案的內容。

確認過設定檔的存取權限設定正確後,接下來使用編輯器開啟此檔案進行設定。此設定檔每一行代表一個帳號的設定,各有四個欄位,並以空白鍵區隔。此四個欄位由左至右的名稱與定義如下:

Client:使用者帳號,可以指定任意字串,例如「vpn_user」。
Server:此VPN伺服器的名稱,也就是「/etc/ppp/pptpd-options」檔案中的「name」欄位所指定的設定值,預設為「pptpd」。如果剛才有修改「name」欄位的設定,則需要在此處指定相同的名稱。
Secret:此欄位即使用者登入時所使用的密碼,使用的是明碼字串(這也是為什麼此設定檔要設定成只有root可以存取的原因)。例如此欄位設定為「password」,便表示使用者要輸入「password」字串作為密碼,才可以成功登入VPN伺服器。
IP Address:此帳號登入後,VPN伺服器所指派的IP位址。此IP位址應該要在先前「/etc/pptpd.conf」設定檔中「remoteip」欄位所指派的IP位址範圍內,否則會產生錯誤。

▲「/etc/ppp/chap-secrets」設定檔指定了使用者帳號與密碼,此檔案的存取權限要特別注意。

完成上述設定檔的修改與設定後,在終端機畫面中輸入指令「sudo /etc/init.d/pptpd start」即可啟動VPN伺服器。

但因為此時系統上可能執行防火牆,因此會阻擋外部來的VPN連線要求,所以應該先開放VPN伺服器所使用的1723埠,讓外部網路的機器可以存取此通訊埠。

此外,也要輸入下列防火牆指令,以便讓來自VPN客戶端的封包,可以經由VPN伺服器轉送出去:

其中的「192.168.0.0/24」表示只要封包來源是192.168.0.1?192.168.0.254位址中的其中一員,其封包被會經由「eth0」網路介面轉送出。

如果VPN客戶端使用的IP位址範圍並非此處所指定的範圍,只要依照實際使用情況加以修改即可。對外網路介面如果不是「eth0」,也可以直接修改成正確的網路介面代號。

由於iptables防火牆可能會在重新開機後將防火牆規則全數清除,所以上述相關的防火牆指令在開機時必須再自動執行一次。

這時候可以利用「iptables-save」指令,先將防火牆的設定值備份下來,在開機時再以「iptables-restore」指令進行恢復。

結語

完成所有設定後,直接以Windows或其他作業系統所提供的VPN連線程式設定一個新連線,再連接VPN伺服器,即可讓一部原先不在私有網路中的電腦,直接存取該網路中的各種資源。

以Windows XP為例,只要執行控制台中的「網路連線」→「網路連線精靈」,即可建立一個VPN客戶端的連線,並在需要使用VPN功能時直接執行此連線,就能夠讓Windows網路連線改由VPN伺服器進行處理。但要注意的是,由於VPN連線本身有經過加密與解密的過程,因此實際使用時速度會比較慢。


追蹤我們Featrue us

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

我知道了!