FTP://ftp.xs4all.nl/pub/crypto/freeswan/binaries/RedHat-RPMs /2.4.20-8/freeswan-module-2.06_2.4.20_8-0.i386.rpmftp://ftp.xs4all.nl/pub/crypto/freeswan/binaries/RedHat-RPMs /2.4.20-8/freeswan-userland-2.06_2.4.20_8-0.i386.rpmrpm -ivh freeswan-userland-2.06_2.4.22_1.2179.nptl-0.i386.rpm配置Frees/wan用於支持雙網關通信。也就是兩個異地的子網通過一對ipsec的VPN網關進行交互訪問。第一種玩法是網絡對網絡的VPN,我們的 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) 並且 mkdir /etc/ipsec.d/cacerts 2.4 在你安裝的openssl目錄中找到CA.sh腳本。注意,應該是你當前運行的openssl版本的CA.sh 2.5 cd /var/sslca 進入到你剛才建立的目錄 2.6 比如你剛才找到的CA在/usr/share/ssl/misc,那麼就輸入 /usr/share/ssl/misc/CA –newca,接下來你會被問到一系列問題。問題和回答類似於下面的樣子。如果你確認哪些你有把握更改就改,比如公司名稱、郵件、密碼等。不能確定的就按照下面的樣子抄上即可。 ~/sslca# /usr/share/ssl/misc/CA -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:(輸入密碼) ----- 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. There are quite a few fields but you can leave some blank For some fields there will be a default value,If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:GB(enter) State or Province Name (full name) [Some-State]:State(enter) Locality Name (eg, city) []:City(enter) Organization Name (eg, company) [Internet Widgits Pty Ltd]:21vianet(enter) Organizational Unit Name (eg, section) []:(enter) Common Name (eg, YOUR name) []:CA(enter) Email Address []:[email protected](enter) ~/sslca# 2.7 下一步是給網關生成證書: 命令和要回答的問題如下: ~/sslca# /usr/share/ssl/misc/CA -newreq Using configuration from /usr/lib/ssl/openssl.cnf Generating a 2048 bit RSA private key ...................................+++ ...............................+++ writing new private key to 'newreq.pem' Enter PEM pass phrase:(輸入密碼) Verifying password - Enter PEM pass phrase: (輸入密碼) ----- 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. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:GB(enter) State or Province Name (full name) [Some-State]:State(enter) Locality Name (eg, city) []:City(enter) Organization Name (eg, company) [Internet Widgits Pty Ltd]:ExampleCo(enter) Organizational Unit Name (eg, section) []:(enter) Common Name (eg, YOUR name) []:vpnserver.rd.xxx.com(enter) Email Address []:[email protected](enter) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:(enter) An optional company name []:(enter) Request (and private key) is in newreq.pem 普通用戶 natecars@buzzword:~/sslca$ /usr/share/ssl/misc/CA -sign (輸入前面定的密碼) Using configuration from /usr/share/ssl/openssl.cnf Enter PEM pass phrase:(password you entered for the ca certificate) Check that the request matches the signatureSignature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'GB' stateOrProvinceName :PRINTABLE:'State' localityName :PRINTABLE:'City' organizationName :PRINTABLE:'21vianet' commonName :PRINTABLE:'vpnserver.rd.xxx.com' emailAddress :IA5STRING:'[email protected]' Certificate is to be certified until Feb 13 16:28:40 2012 GMT (3650 days) Sign the certificate? [y/n]:y(enter) 1 out of 1 certificate requests certified, commit? [y/n]y(enter) Write out database with 1 new entriesData Base Updated (certificate snipped) Signed certificate is in newcert.pem 在以上步驟中一定要記住你輸入的密碼。如果哪一不錯了,想重新來過的話,記住刪除/var/sslca目錄下面的所有子目錄即可。 2.8 把文件名字改為你需要的 ~/sslca# mv newcert.pem vpnserver.rd.xxx.com.pem ~/sslca# mv newreq.pem vpnserver.rd.xxx.com.key 2.9 編輯.key文件,刪除'-----BEGIN CERTIFICATE REQUEST-----'後面所有的東西,之後,這個文件應該從'-----BEGIN RSA PRIVATE KEY-----'至'-----END RSA PRIVATE KEY-----'結束。 2.10 如果正常的安裝了x.509補丁,你應該可以看到/etc/ipsec.d及其下面的目錄。如果沒有,你就自己建立。然後按照下面的位置復制合適的文件:(此時你仍然在/var/sslca目錄中) # cp vpnserver.rd.xxx.com.key /etc/ipsec.d/private # cp vpnserver.rd.xxx.com.pem /etc/ipsec.d # openssl x509 -in demoCA/cacert.pem -outform der -out rootca.der # cp rootca.der /etc/ipsec.d/cacerts/RootCA.der # openssl x509 -in vpnserver.rd.xxx.com.pem -outform der -out /etc/x509cert.der # openssl ca -gencrl -out crl.pem (輸入密碼) # cp crl.pem /etc/ipsec.d/crls 2.11在/etc/ipsec.secrets中加入一行:: RSA vpnserver.rd.xxx.com.key "password",然後刪除其他所有行。其中的password是你前面生成密要的時候回答問題輸入的密碼。 2.12編輯ipsec.conf文件類似下面的樣子:version 2.0config setupinterfaces=%defaultrouteklipsdebug=noneplutodebug=none#plutoload=%search#plutostart=%searchuniqueids=yesconn %defaultkeyingtries=1compress=yesdisablearrivalcheck=noauthby=rsasigleftrsasigkey=%certrightrsasigkey=%certleft=%defaultrouteleftcert=vpnserver.rd.xxx.com.pemauto=addpfs=yesconn roadwarriorright=%anyconn roadwarrior-netleftsubnet=192.168.1.0/255.255.255.0right=%anyconn net-netleftsubnet=192.168.1.0/255.255.255.0right=%anyrightsubnet=192.168.1..0/255.255.255.0conn world-netleftsubnet=*right=%anyrightsubnet=192.168.1.0/255.255.255.0 黑體字的部分是你需要根據你實際的環境更改的。我們用的兩端的子網是192.168.1.0/24和192.168.10.0/24。文件中 vpnserver.rd.xxx.com.pem是CA證書。這個配置是通用的,也就是說可以適用LAN-LAN方式的倆接和遠端客戶端兩種方式。 2.13 下面配置分支機構的網關。這個機器也要事先安裝完全freeswan等軟件。 重新執行上面的2.7-2.9步驟生成分支機構的證書,注意:在回答問題的過程中,關於主機名稱的部分的輸入改變為你分支機構的網關機器名稱,比如:vpncliet.rd.xxx.com。 2.14 復制下列生成的文件到分支機構網關上的相應位置(比如通過軟盤復制): cp vpnserver.rd.xxx.com.pem /etc/ipsec.d cp vpnclient.rd.xxx.com.key /etc/ipsec.d/private cp vpnclient.rd.xxx.com.pem /etc/ipsec.d 執行命令:openssl x509 –in vpnclient.rd.xxx.com.pem – outform der –out /etc/x509cert.de cp rootca.der /etc/ipsec.d/cacerts/RootCA.der cp crl.pem /etc/ipsec.d/crls 2.15 配置分支機構的/etc/ipsec.secrets 寫上一行: RSA vpnclient.rd.xxx.com.key "password"。 其他行刪除。Password就是前面回答問題的時候輸入的密碼。 2.16 配置/etc/ipsec.conf根據實際情況修改的。version 2.0config setupinterfaces=%defaultrouteklipsdebug=noneplutodebug=none#plutoload=%search#plutostart=%searchuniqueids=yesconn %defaultkeyingtries=0compress=yesdisablearrivalcheck=noauthby=rsasigrightrsasigkey=%certleftrsasigkey=%certright=%defaultrouterightcert=vpnclient.rd.xxx.com.pemauto=addpfs=yesconn roadwarriorleft=192.168.1.72leftcert=vpnserver.rd.xxx.com.pemconn roadwarrior-netleft=192.168.1.72leftcert=vpnserver.rd.xxx.com.pemleftsubnet=200.200.199.0/255.255.255.0conn net-netleft=192.168.1.72leftcert=vpnserver.rd.xxx.com.pemleftsubnet=200.200.199.0/255.255.255.0rightsubnet=200.200.199.0/255.255.255.0 2.17 首先啟動server端的ipsec:ipsec setup restart,然後同樣啟動客戶端的ipsec 2.18 建立通道:ipsec auto –up net-net然後在Server端可以用命令ipsec whack status應該可以看到新建立的幾個通道。此時,你在兩個子網中應該可以互相ping 通。 3、配置Frees.wan用於支持遠程客戶端訪問。也就是允許一個Windows客戶端,來通過VPN和公司內部的網絡進行通訊。 第2種VPN玩法其實就是把分支機構的LAN換成一個單獨的,地址不固定的機器。這樣的應用適合總經理出差的時候從外地ISP撥號上網連接到本部網絡的情況。期間,非但有認證,而且通過ISP和公網的數據全部是加密的。這種方式在服務器端的配置和上面完全一樣(記得嗎?我們在行面給出的配置已經是兼顧了兩種用法)。這裡需要做的是把總經理的筆記本配成VPN客戶端。他的筆記本應該是windows2000的並且升級到sp2。 3.1 首先重復2.7-2.9步驟生成證書,其中有關主機名的部分可以輸入你總經理的機器名。類似於:win.rd.xxx.com。當然,總經理的機器要是同名的。 3.2 在服務器端生成windows可以認的p12格式的密鑰。 openssl pkcs12 -eXPort -in win.rd.xxx.com.pem -inkey win.rd.xxx.com.key -certfile demoCA/cacert.pem -out win.rd.xxx.com.p12 3.3 用命令察看環境:最好把結果輸出到文件記住,以後用得到。 openssl x509 -in demoCA/cacert.pem -noout -subject 3.4 把上面生成的p12文件傳送到總經理的機器上,放在一個正規的地方(這個文件很重要)。 3.5 在總經理的機器上從http://vpn.ebootis.de站點下載:ipsec.exe 3.6 在總經理的機器上從: http://agent.microsoft.com/windows2000/techinfo/reskit/tools/existing/ipsecpolo.ASP站點下載windwos2000的ipsec資源工具。 3.7 安裝上述兩個軟件,並且把他們放在同一個目錄中。 3.8 建立一個ipsec的MMC:(希望你知道MMC是什麼) 依次進入Start/Run/MMC, File (or Console) - Add/Remove Snap-in 單擊 'Add' 選 'Certificates', 然後選 'Add' 選 'Computer Account', 然後點 'Next'. 選 'Local computer', 然後點 'Finish'. 選 'IP Security Policy Management', 然後點 'Add'. 選 'Local Computer', 然後點 'Finish' 選 'Close' 然後點 'OK' 3.9 增加一個證書 展開左側窗口中 'Certificates (Local Computer)' 右鍵 'Personal', 選 'All Tasks' 然後點 'Import' 點 Next 輸入哪個.p12 文件的路徑 (就是剛才你從服務器網關復制過來的,浏覽選擇也可), 然後點'Next' 輸入export password(密碼), 然後點Next 選'Automatically select the certificate store based on the type of certificate', 然後點Next 點Finish, 如果有任何提示窗口彈出都選yes 退出MMC, 保存當前配置到管理工具中,這樣就不用每次都重新來過了。以上所做就增加了一個證書到總經理的機器上。 3.10設置ipsec工具: 編輯總經理機器上的ipsec.conf文件,把rightca的=後面寫成剛才openssl x509 -in demoCA/cacert.pem -noout –subject命令生成的結果。類似下面這樣:conn roadwarriorleft=%anyright=遠端的iprightca="C=GB,S=State,L=City,O=21vianet, CN=CA,[email protected]"network=autoauto=startpfs=yesconn roadwarrior-netleft=%anyright=遠端的iprightsubnet=192.168.1.0/24rightca="C=GB,S=State,L=City,O=21vianet, CN=CA,[email protected]"network=autoauto=startpfs=yes 黑體部分要注意配置正確。 3.12運行ipsec.exe有下面輸出: C:ipsec>ipsec IPSec Version 2.1.4 ?? 2001,2002 Marcus Mueller Getting running Config ... Microsoft's Windows XP identified Host name is: (local_hostname) No RAS connections found. LAN IP address: (local_ip_address) Setting up IPSec ... Deactivating old policy... Removing old policy... Connection roadwarrior: MyTunnel : (local_ip_address) MyNet : (local_ip_address)/255.255.255.255 PartnerTunnel: (ip_of_remote_system) PartnerNet : (ip_of_remote_system)/255.255.255.255 CA (ID) : C=US,S=State,L=City,O=ExampleCo,... PFS : y Auto : start Auth.Mode : MD5 Rekeying : 3600S/50000K Activating policy... Connection roadwarrior-net: MyTunnel : (local_ip_address) MyNet : (local_ip_address)/255.255.255.255 PartnerTunnel: (ip_of_remote_system) PartnerNet : (remote_subnet)/(remote_netmask) CA (ID) : C=US,S=State,L=City,O=ExampleCo,... PFS : y Auto : start Auth.Mode : MD5 Rekeying : 3600S/50000K Activating policy... C:ipsec> 這時候你從客戶端ping服務器後面的內網得到幾個'Negotiating IP Security'之後就可以ping通了。這樣總經理帶著這台筆記本到有互聯網絡的地方就可以象在辦公室一樣連接到公司裡了。 值的注意的是,出於安全性的問題,我們建議你關閉VPN網關上面的所有其他服務,並仔細配置防火牆。通常的,如果你希望把所有的流量都發送給主站網關,在從站就不需要增加iptables策略。否則,需要增加這樣一條策略: iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE 在主站由於路由的原因,需要增加下面的策略: iptables –t nat –A POSTROUTING –o ipsec0 –s ! 192.168.10.0/255.255.255.0 – j SNAT –to 192,168.1.231 iptables –t nat –A POSTROUTING –o eth1 –s ! 192.168.10.0/255.255.255.0 – j SNAT –to 192,168.1.231 每行中前面的黑體是子網網段,後面的是本網關的內側出口。