摘要:VPN技術提供了一種通過公用網絡安全地對內部專用網絡進行遠程訪問的連接方式,可以將企業分散在各地的網絡通過現有的公共網絡安全地連接起來,利用Linux可以為企業簡單、安全、高效的VPN連接,本文著重給出了服務器和客戶機之間VPN連接的具體配置方法。
關鍵詞:VPN;Linux;遠程訪問;服務器/客戶機配置
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)09-11622-06
Linux-based Remote Access VPN Implementation
LIU Geng-biao
(Guangdong Construction Vocational Technology Institute,Guangzhou 510450,China)
Abstract: VPN provides a way to get safely remote access to the special-purpose network through a kind of public network. It can unit safely the networks scattering in various parts through the present public network. Making use of Linux can establish simple, safe and high-efficient VPN for enterprises. This article mainly discusses the way to connect VPN between server and customers' computers.
Key words: VPN;Linux;remote access
1 引言
隨著企業規模不斷擴大,分支機構不斷擴展,移動辦公不斷增加,企業內部及企業間信息傳遞越來越多。如何以
最低的費用保障通信的高效性和安全性,是企業極其關注的問題。在此背景下,VPN技術的出現,以其低通信費、高靈活性和安全性的優勢贏得了越來越多的企業的青睞,是一種非常廉價、安全、靈活的遠程網絡接入解決方案。
市場研究公司InfoneticsResearch發表的題為“虛擬專用網和安全服務:年度市場規模與預測”的報告稱,2008年全球虛擬專用網服務的銷售總收入將超過300億美元。效率的提高、虛擬專用網提供的節省成本和整個機構范圍內應用虛擬專用網的復雜性是推動虛擬專用服務收入增長的主要因素。2008年,在虛擬專用網服務收入方面大多數增長將來自亞太地區。歐洲、中東和非洲地區也將大幅增長。
2 VPN的概述
VPN(Virtual Private Network)中文名為“虛擬專用網”。 是指依靠ISP(Internet服務提供商)和其它NSP(網絡服務提供商),在公用網絡中建立一個臨時的、安全的網絡連接,能實現對遠程網絡安全訪問的數據通信網絡技術。它通過特殊的加密通訊協議,在公用網絡中建立臨時的、安全的專用數據通信隧道,對內部專用網絡進行遠程訪問的技術。
對于一個企業的內部網與遠程分支機構的局域網來說,它們就可以通過Internet這一公用網絡,建立一條經過誰和加密的安全隧道實現互聯,使企業遠程用戶或移動用戶可以隨時隨地通過Internet連接到企業Intranet。
目前可以用硬件或軟件來實現VPN,如具有VPN連接功能的路由器、防火墻、交換機設備或Linux、Windows 2000/2003 Server等網絡操作系統。但是硬件設備配置較復雜,費用也相對較高,且需要額外的管理和安全維護,還可能出現不同廠家產品不兼容問題。利用Linux實現VPN,不需要昂貴的專用設備,節省了網絡建設成本,配置及維護都比較簡單,更很需要的是,Linux不需要太高的硬件成本也可以成為性能穩定、高效安全、造價低廉的VPN服務器。
3 Linux中的VPN技術
Linux不但可以充當VPN服務器,也可以作為VPN的客戶機,假設要配置一個遠程用戶各企業內部網之間的VPN連接,我們可以用一臺運行RedHat Linux 9.0或其它版本的Linux系統的計算機作為VPN服務器,VPN客戶機則可以使用運行Windows98或以上各版本的計算機,也可以是運行Linux系統的計算機。其配置主要包括兩個步驟:
(1)VPN服務器配置,使它能夠接受VPN遠程接入;
(2)VPN客戶端連接的配置,使之能夠撥出到VPN服務器上。
3.1 VPN服務器配置
建立基于PPTP的Linux VPN服務器配置,并根椐以下要求配置VPN服務器:
(1)VPN服務器硬件環境配備了兩塊網卡,分別為eth0 和eth1,其中eth0連接到Internet, IP地址為192.168.1.20; eth1連接到內部網絡,IP地址:192.168.2.254(手動添加)。
(2)VPN服務器本地的地址為192.168.0.254。
(3)分配給VPN 客戶機的地址段為192.168.2.1-254。
(4)建立一個名為gdcvi, 口令為gdcvi的VPN撥號賬戶。
具體步驟:
(1)訪問http://prdownloads.sourceforge.net/poptop/下載dkms-2.0.5-1.noarch.rpm、Kernel_ppp_mppe-0.0.5-2dkms.noarch.rpm、libpcap-0.7.2-1.i386.rpm、ppp-2.4.3-4.rhel3.i386.rpm和pptpd-1.2.3-1.i386.rpm(pptpd服務軟件)四個安裝包(假設將它們保存在/mnt/vpn 目錄下)。以root賬戶登錄系統,進入安裝目錄/mnt/vpn使用相關命令進行安裝和升級VPN。
(2)使用命令vi/etc/pptpd.conf打開PPTP服務器的主要配置文件,然后在文件末尾添加下列語句:
Localip 192.168.0.254#定義服務器上的IP(也就是連上后的ppp0的ip),服務器VPN虛擬接口將分配的IP地址
#不能是本地IP,不然會引起IP沖突,這里其實只要隨便設置一個不相沖突的IP,即
remoteip192.168.2.1-254#定義客戶端的IP,客戶端VPN連接成功后將分配的IP。
注意:為了安全性起見,localip和remoteip盡量不要同一個網段。您也可以單獨指定某個地址或者多段地址,用逗號隔開。
(3)使用命令vi/etc/ppp/chap-secrets打開賬號文件,然后在文件末尾添加下列語句(圖1)。

上面代碼中“gdcvi”是Client端的VPN用戶名;“server”對應的是VPN服務器的名字,該名字必須和/etc/ppp/options.pptpd文件中指明的一樣,或者設置成“*”號來表示自動識別服務器;“secret”對應的是登錄密碼;“IP addresses”對應的是可以撥入的客戶端IP地址,如果不需要做特別限制,可以將其設置為“*”號。
(4)使用命令查看pptpd服務進程、端口和接口,使用netstat命令檢查pptpd運行的端口,使用ifconfig命令查看ppp0接口(圖2)。

如果出現黑體字部分表示一切正常,那么Linux一個基本PPTP VPN服務器的設置就初步了,下面對其進行MPPE加密。
(5)編輯文件/etc/syslog.conf,增加一行:daemon.debug /var/log/pptpd.log,重新啟動syslogd。
(6)打開防火墻端口
將Linux服務器的1723端口和47端口打開,并打開GRE協議。
打開防火墻設置IP偽裝轉發設置了IP偽裝轉發,通過VPN連接上來的遠程計算機才能互相ping通,實現像局域網那樣的共享。用下面的命令進行設置:
#echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 47 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT
(7)啟動VPN服務并開啟路由的PPTP協議。找一臺windows的機器,IP為:192.168.1.13,新建一個VPN的連接,服務器為192.168.1.20,用戶名為:gdcvi,密碼為:gdcvi,可以成功連接了。在windows的cmd下運行ipconfig,如圖3。

看到多了一個網絡連接,IP為:192.168.2.1,正是前是配置文件里設置的遠程IP,這樣這臺windows的客戶端成功連上了這個VPN服務器。
注意:
(1)當VPN撥號失敗時,用戶應該檢查網絡連接是否通暢,客戶機是否已經連接到VPN 服務器上,用戶名、密碼是否正確。
(2)當VPN連接斷線時,再次進行撥號,出現錯誤提示時,用戶可稍等2~3分鐘再撥號,因為PPTPD VPN服務器有較長的反應處理時間(一個BUG)。
(3)如果個人電腦上有個人防火墻,必須開放端口1723、1788或關閉掉防火墻,停止保護功能,否則不能正常進行VPN撥號連接與訪問。
(4)VPN端口:1723,此外還有一個[color=red]GRE[/color],協議名稱非TCP、UDP、ICMP!這是VPN的主要傳輸協議,所以要配置防火墻,一定要開這個。
3.2 Linux VPN 的客戶機如何訪問Linux VPN的服務器
(1)安裝基礎軟件包libglade和libglade-devel
libglade和libglade-devel是一個用于GTK+/GNOME程序。從xxx.glade文件自動生成程序界面或界面中的一部分的庫。
(2)安裝DKMS 模塊軟件包
DKMS(Dynamic Kernel Module Support)動態內核模塊支持。旨在創建一個內核相關模塊源可駐留的框架,以便在升級內核時可以很容易地重建模塊。這將允許 Linux 供應商提供較低版本的驅動程序,而無需等待新內核版本發行,同時還可以省去嘗試重新編譯新內核模塊的客戶預期要完成的工作。DKMS工作原理見圖4。

#rpm -ivh dkms-2.0.5-1.noarch.rpm
(3)安裝ppp內核模塊:#rpm-ivh kernel_ppp_mppe-0.0.5-2dkms.noarch.rpm。
(4)升級ppp軟件包:#rpm –Uvh ppp-2.4.3-4.rhel3.i386.rpm。
(5)安裝pptpd:#rpm –ivh pptpd-1.2.3-1.i386.rpm。
(6)安裝客戶端軟件pptpconfig和圖形前端。
(7)配置與使用和啟動圖形前端pptonfig。
如果正常安裝后,請su到root用戶,然后運行pptpconfig.php。
注意:運行之前請確保/usb/sbin與/sbin在系統路徑下,否則會出現沒發現ip與pptp命令的錯誤。
解決辦法:[root@eadd-lyb lyb]# export PATH=$PATH:/usr/sbin/:/sbin/
在命令行下使用命令“pptpconfig”即可啟動啟動圖形前端。Server選項標簽依次填上本地連接名,服務器名或IP,域(可選),用戶名和密碼。
Routing 標簽用來設置路由信息。可用\"xxx.xxx.xxx.xxx/xx\"的形式增加新的路由。增加了一條到192.168.3.0/24的路由,以訪問該網段。routing style選All to Tunnel,可改變本機的缺省路由,使本機的所有的網絡流量都通過該通道,如圖5。
DNS選項:DNS標簽用來設置建立pptp連接后如何進行名稱解析。不啟用自動配置,將使用手工輸入的DNS服務器代替/etc/resolv.conf里的名稱服務器進行名稱解析。啟用自動配置,將會用拔號自動獲得的DNS服務器替代/etc/resolv.conf里的DNS服務器,兩種方式/etc/resolv文件都會被pptpconfig自動備份。連接斷開后,pptpconfig會自動恢復舊有/etc/resovl.conf文件。
DNS選項卡通常十分簡單;它是自動的,或者我們需要輸入一些基本的DNS信息及可能需要包含的選項,如圖6。
Encryption(加密)選項如圖7。Encryption標簽用于設置加密信息。



這里我們選擇需要微軟點對點加密。
多出一個選項即:Refuse to Authenticate with EAP(refuse-eap)拒絕EAP認證。Linux下要用VPN會用到ppp,但似乎很難與Windows作為服務器的VPN服務器溝通:先看看如何顯示調試信息,這對找出問題的出處很有幫助。
在/etc/ppp/options.pptp里加入debug dump logfd 2 nodetach,如果有“Unsupported protocol rcvd [proto=xxxx]”這樣的錯誤,那么需要在options.pptp里加入這一句refuse-eap。
Miscellaneous(雜項)選項:Miscellaneous標簽可配置一些調試信息和連接狀態。
選項卡是我們的最后一個選項卡。如圖8。
說明:
Start tunnel when this program starts:自動啟動VPN隧道。
Enable contion debugging facilities:顯示連接信息。
Reconnect if disconnected:自動重復連接。
(8)所有選項完成后點擊“Add”按鈕,系統會自動連接PPTP VPN。此時屏幕會出現一個連接狀態界面如圖9。




其中ppp0是Linux客戶端連接PPTP VPN服務器的接口。
下面我們使用連接狀態界面的Ping按鈕測試連接狀況,如圖11。
(9)連接成功后就可與服務器通信了,但如果要有其它子網通信,就要增加路由信息。本例中如要和192.168.2.0子網通信可這樣寫:
# route add -net 192.168.2.0 netmask 255.255.255.0 dev ppp0
(10)訪問內部資源。由于在VPN服務器上使用了命令“echo \"1\" >/proc/sys/net/ipv4/ip_forward”打開了Linux內核的路由功能,因此客戶端可以像在內部網絡里一樣直接訪問各種資源。操作方法和普通局域網完全一樣,相互之間可以通過“網上鄰居”,或者直接在窗口地址欄中輸入“\\\\對方IP地址”等式邏輯方式來訪問共享的軟硬資源。
4 結束語
VPN技術有很多優勢,應用前景廣闊,具體實施也并不困難,利用Linux構造VPN網絡,更是一個穩定、安全、高效和廉價的方案,非常適合正在發展中的中小企業和大公司在各地的分支機構,隨著隨著國家信息化進程的加快,特別是電子政務、電子商務的日益推廣,VPN技術將會被越來越多的人所接受。
參考文獻
[1] 陳國浪. VPN在Windows 2000中的實現[J]. 溫州職業技術學院學報.
[2] 王達. 虛擬專用網(VPN)精解[M]. 清華大學出版社.
[3] http://tech.sina.com.cn/i/w/2004-08-06/0824399306.shtml. 調查:08年全球VPN市場規模將達300億美元.