VPN How-To

VPN 是 Virtual Private Network 的縮寫,意思是虛擬私有網路,也就是在公開的網路架構上,虛擬一個私有的網路。這個虛擬的網路架構具有和真正私有網路一樣的安全性、管理便利性及效能。VPN 的目的是用來取代原本專線式的私有廣域網路,以更符合成本效益的方式來達成相同的目的。

舉例而言,如果您有二個分公司位於不同的城市,每個分公司內部都有自己的私有內部網路,而二個公司的內部網路原本是無法連接使用,除非建立一條專線,以連接二個公司的網域。然而,若改用 VPN 的方式,我們可以使用現有的網際網路架構,在二個公司分別架設 VPN 伺服器,則二個不同城市的公司內部網路就可以連接起來。另外,我們也可以從家裡使用 Windows VPN 撥號連線到公司內部網路中。

和傳統的專線式私有網路相比,由於 VPN 使用現成低廉的網路架構,所以成本上便宜許多,而且日後不論是要進行線路變更或架構更動也比較容易。本文中,我們將介紹如何使用 FreeBSD 建立 VPN Server,讓使用者可以從 MS Windows 上使用 VPN 撥路連線到公司內部網路。

我們使用 mpd 這個軟體來建立 PPTP 的 VPN 連線,PPTP 是 Windows  所使用的 VPN。我們在 FreeBSD 上建立 VPN 之後,使用者可以自遠端使用 Windows 經由 Internet 使用 VPN 撥號連到公司的內部區網。

基本架構如下:

我們假設公司內部網路 IP 為 192.168.x.x,而 FreeBSD 這台 NAT Server 上,我們另外安裝了 mpd 這套 VPN 軟體。

步驟一:

請先確認在 Kernel 中有下列這行設定:

# 如果您使用的是 FreeBSD 4.x
pseudo-device	tun		# Packet tunnel.
# 如果您使用的是 FreeBSD 5.x 以後
device		tun		# Packet tunnel.

步驟二:

接著我們要在 FreeBSD 的 NAT server 上安裝 mpd5,請使用下列指令安裝:

# cd /usr/ports/net/mpd5
# make install clean

如果過程中有出現設定選單,使用預設值即可。

步驟三:

安裝完畢後,在 /usr/local/etc/mpd5 目錄中,新增一個 mpd.conf,並編輯內容如下:

startup:

# 預設使用 pptp_server 這個項目的設定
default:
	load pptp_server

pptp_server:
	# 設定一個 IP Pool 名為 LANPOOL,這個 IP Pool 就是要當 VPN client 連上來
	# 後,伺服器要分配給它的 IP。我們只允許 5 個 client 連接,所以只設了 5
	# 個 IP (56~60)。
	set ippool add LANPOOL 172.16.0.56 172.16.0.60
	
	# Create a bundle template named VPN
	create bundle template VPN 
	
	# Interface configuration 
	# On demand is only useful when we want to make an outgoing connection
	set iface disable on-demand
	set iface idle 0
	
	# Since we do not want to play routing tricks we'll proxy arp
	# to the LAN so traffic will find its way to the interace
	set iface enable proxy-arp
	set iface enable tcpmssfix
	
	# IP options
	# TCP header compression
	set ipcp yes vjcomp
	
	# VPN server 的 IP,當 VPN client 連上後,客戶端及伺服器端都會有一組新的 IP。
	set ipcp ranges 172.16.0.1/32 ippool LANPOOL
	
	# This is the resolver that is available on the local lan
	###set ipcp dns 10.15.22.155
	
	# Set the encryption on the VPN
	set bundle enable compression
	
	# Let this bundle use mppc 
	# Use 128 bit MMPE encryption
	set ccp yes mppc
	
	set mppc no e40
	set mppc yes e128
	# Less secure but fastre recovery from lost packets
	set mppc yes stateless
	
	
	#Create links
	create link template VPNLINK pptp
	
	# Set bundle template to use
	set link action bundle VPN
	
	# Multilink adds some overhead, but gives full 1500 MTU.
	set link enable multilink
	
	# Enable address and control field compression, and protocol
	# field compression
	set link yes acfcomp protocomp
	
	# Turn pap and chap type authentication off.
	set link no pap chap
	
	# Require CHAP authentication from the peer NB: Use enable The
	# use of enable and accept have slightly different meaning in
	# the context of PAP and CHAP.
	set link enable chap
	
	set link keep-alive 30 300
	
	# We reducing link mtu to avoid GRE packet fragmentation.
	set link mtu 1460
	
	# Configure PPTP 
	# the address to which you will have to connect using your vpn client
	# 設定 VPN 伺服器的對外 IP。 
	set pptp self 59.124.41.242
	
	# Allow to accept calls
	set link enable incoming

步驟四:

然後我們要新增一個文字檔 /usr/local/etc/mpd5/mpd.secret 存放使用者資料及密碼,其格式為 username password:

alex	Saophone
bill	Pwanuts
john	mypasswd

由於這個檔案內容包含了 password,所以我們必須將它設為只有 root 可以讀取:

# chmod 640 /usr/local/etc/mpd5/mpd.secret

步驟五:

接著我們要編輯 /etc/rc.conf 以在開機時啟動 mpd5。

mpd_flags="-b"
mpd_enable="YES"

現在我們可以啟動 VPN 服務了:

# /usr/local/etc/rc.d/mpd5 start

步驟六:

在 Windows 端的設定方面,請在控制台的網路連線中建立一個新的網路連線:

下圖中,我們選第二個選項,以建立 VPN 連線。

依照畫面中的指示,我們選擇建立一個虛擬私人網路連線:

請您為這個連線命名:

如果您使用 ADSL 或 modem,在使用 internet 之前必須先撥號連線,您可以在這裡選擇當使用 VPN 時先自動撥接,或者您可以可選擇不要撥接起始連線,只要您在使用 VPN 時先將電腦連上 Internet 即可。

接著請輸入 VPN 伺服器的對外 IP,您可以可以輸入 domain name。

完成後,會自動跳出一個撥號視窗,您也可以在控制台中的網路連線中找到您新增
的VPN 連線。在下圖出現時,請選擇內容:

接著請選擇[安全性] 的標籤,在安全性選項中,我們選擇[進階] -> [設定]:

進入進階設定後,請確認您的設定是否為下圖所示:

都設定好之後,請按確定回到下列畫面。接著輸入帳號及密碼後就可以進行撥號了。在開始使用VPN 撥號前,如果您使用的是撥接式的ADSL 或Modem,您必須先將建立ADSL 連線,才可以進入VPN 撥號喔。