.....
(13)構建基於Linux的VPN網絡
構建VPN幾乎是Linux的最高級應用之一了,學會了這項技術,是足以使你自豪的資本。VPN的主要用途就是建立一個加密的通信機制,然後通過把所有的你的子網的信息按照特定的方式加密傳輸,構成一個邏輯上的虛擬的網絡。簡單的說,就是一個Linux系統的IP層加密解決方案。這裡面需要用到不少組件,下面一一介紹。
1、准備工作和安裝
1.1 從http://www.kernel.org下載2.4.X的內核,除了2.4.15版本(該版本有一個致命錯誤)。然後把該內核放置到:/usr/src中。(這裡我們使用Linux-2.4.18.tar.gz),然後釋放:tar zxvf linux-2.4.18.tar.gz
1.2 刪除原來的連接rm linux
1.3 ln –s linux-2.4.18.tar.gz linux
1.4 檢查當前的網卡和SCSI的型號(參見內核升級一章)
1.5 cd linux (進入linux-2.4.18目錄)
1.6 make menugonfig
1.7 make dep
1.8 make bzImage
1.9 編譯工作做到這裡就打住!
1.10 從http://www.swox.com/gmp 下載gmp庫的最新版本到/usr/local/src。
1.11 tar zxvf gmp-4.0.1.tar.gz
1.12 cd gmp-4.0.1
1.13 ./configure
1.14 make
1.15 make install
1.16 從http://www.freeswan.org下載freeswan-1.97.tar.gz(我們這裡使用的版本)到/usr/local/src
1.17 tar zxvf freeswan-1.97.tar.gz
1.18 從http://www.strongsec.com/freeswan/ 下載x509patch-0.9.11-freeswan-1.97.tar.gz ,這個是補丁文件。釋放,進入x509補丁目錄,復制freeswan.diff到外面的freeswan源目錄,然後回到freeswan源目錄中運行:patch –p1 < freswan.diff
1.19 從http://www.openssl.org下載openssl-0.9.6b版本到/usr/local/src,釋放,進入目錄
1.20 ./config (如果原來系統中有openssl需要先uninstall再安裝,不過一般情況下你可能uninstall不下來8-)。如果無法uninstall,找到他們的路徑,在這裡通過—prefix=參數指定路徑覆蓋舊版本的文件。這裡嚴重建議:如果你沒有把握確定路徑,最好這樣做:到你用的發行包的開發商的FTP站點(如果你用turbolinux就去ftp.turbolinux.com用redhat就去ftp.redhat.com),用anonymous用戶和隨便一個電子郵件作為密碼登陸,找到你用的發行包版本的生機目錄,然後下載相應的RPM包,注意:這裡的包至少應該是0.9.6b1以上的i386版本。下載完畢後用rpm –Uvh更新。這樣做完了很干淨。
1.21 make (如果你用rpm包升級就不用這個步驟了)
1.22 make test (如果你用rpm包升級就不用這個步驟了)
1.23 make install (如果你用rpm包升級就不用這個步驟了)安裝完了以後執行openssl命令,輸入version看看是不是你剛剛安裝的版本。如果不是,可能沒有覆蓋原來安裝的舊版本。從1.20重新來過
1.24 然後回到freeswan的源目錄,運行:make menugo,在networking options中選擇關於iptables和ipsec相關的所有選項。其中ipsec是freeswan加上的,最好把前面括號中M(模塊方式)換成*(編譯進內核)。下列內核選項應該選上:
進入:Networking Options至少選擇上:
[*] Network packet filtering (replaces ipchains)
[*] Network packet filtering debugging (NEW)
進入:IP: Netfilter Configuration --->
<*> Connection tracking (required for masq/NAT) (NEW)
FTP protocol support (NEW)
IRC protocol support (NEW)
注意:如果你需要使用DHCP功能,需要增加Pachet Socket mmapped IO和Socket Filtering兩個選項,參見DHCP一章。
等等……
把下面的選項全部標記<*>
返回上一層菜單後,把列表選項最下面的凡是IPSEC相關的選項全部選為<*>。另外的,如果你打算使用撥號連接請在網絡設備支持菜單選擇ppp支持(注意,你用的ppp程序一定要2.4版本以上的)
1.25 然後檢查網卡和硬盤選項是否正確,如果沒有問題就逐層退出,然後保存配置。
1.26 退出後將自動編譯內核,等待……
1.27 編譯完成後,來到/usr/src/linux目錄,運行:make modules;make modules_install
1.28 cp System..map /boot/System.map-2.4.18-vpn
1.29 cd arch/i386/boot
1.30 cp bzImage /boot/vmlinuz-2.4.18-vpn
1.31 cd /boot
1.32 rm System.map
1.33 ln –s System.map-2.4.18-vpn System.map
1.34 vi /etc/lilo.conf
增加一段:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
lba32
default=linux-vpn
image=/boot/vmlinuz
label=linux
initrd=/boot/initrd
read-only
root=/dev/sda5
image=/boot/vmlinuz-2.4.18-vpn
label=linux-vpn
initrd=/boot/initrd
read-only
root=/dev/sda5
1.35 運行lilo更新數據
1.36 reboot
1.37 啟動後,運行:ipsec setup restart 應該不報任何錯誤而正常出現freeswan的版本。
注意:還有一些必要的內核參數配置,這些配置可以在rc.local中實現。他們是:
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 1 > /proc/sys/net/ipv4/ip_forward
如果你把下面兩項編譯成模塊(前面擴號是M而不是*):
FTP protocol support (NEW)
IRC protocol support (NEW)
你需要在rc.local中加上:
modprobe ip_nat_ftp
安裝完了,接下來我們將說明幾種VPN的玩法。
2、配置Frees/wan用於支持雙網關通信。也就是兩個異地的子網通過一對ipsec的VPN網關進行交互訪問。第一種玩法是網絡對網絡的VPN。一般的,某企業在甲乙兩地(距離相當遠)各有一個辦公室,每個辦公室各有一套LAN,他們分別通過專線連接到internet網絡上。甲LAN上是企業的管理中心,運行著企業的管理系統。而乙LAN上的用戶也需要使用該管理系統,盡管乙LAN可以通過internet(公網)連接過去,但是企業的老板說不行!我們的數據不能暴露在公網上,必須加密!好了,我們的VPN網絡就可以應用於該企業的這種需求。首先在甲乙兩個LAN的出口各放置一台我們的Linux服務器,他們都安裝好了ipsec(前面說的安裝步驟一個都不少),兩個LAN的數據分別通過各自的這台機器(ipsec gateway)進入公網,凡是經過該網關的數據全部都是加密的。在效果上,兩個LAN的用戶可以互相ping到對方的機器,盡管他們可能一個是192.168.1.0/24網段,另一個是192.168.10.0/24網段的。他們好像在同一個局域網中工作,沒有界限。公共網絡的加密部分對他們來說也是透明的。而兩個LAN在公共網絡上交換的數據是密文的。這就是虛擬專用網VPN。
但願你已經按照前面的步驟順利的安裝好了兩台機器,下面我告訴你怎樣配置成網對網的環境。
2.1 我們先配置甲網的ipsec網關(該網關有兩個網卡,我們配置他們的地址分別為eth1:192.168.1.231和eth0:21.9.22.22)。安裝完成後,我們首先要做的事情是生成CA證書。(用到剛才安裝的openssl)
2.2 找到openssl.cnf文件,一般在/etc/ssl/中,也可能在/var/ssl中或/usr/ssl中(實在不行你就find / -name “openssl.cnf”找找嘛!),要是有好幾個,你要搞清楚哪個是你安裝的版本。改動其中的default_bits選項的值從1024到2048,然後改動default_days的值到3650。讓期限為10年!保存退出。
2.3 在/var/中建立一個目錄:/var/sslca,改變該目錄的權限為700(chmod 700 /var/sslca)
2.4 在你安裝的openssl目錄中找到CA.sh腳本。注意,應該是你當前運行的openssl版本的CA.sh
2.5 cd /var/sslca 進入到你剛才建立的目錄
2.6 比如你剛才找到的CA.sh在/usr/lib/ssl/misc/,那麼就輸入/usr/lib/ssl/misc/CA.sh –newca,接下來你會被問到一系列問題。問題和回答類似於下面的樣子。如果你確認哪些你有把握更改就改,比如公司名稱、郵件、密碼等。不能確定的就按照下面的樣子抄上即可。
~/sslca#/usr/lib/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)
(enter)
Making CA certificate ...
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 2048 bit RSA private key
........................................+++
........................................+++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:(enter password)
Verifying password - Enter PEM pass phrase:(enter same password again)
-----
You are about to be asked to enter
information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.