VPN架設 〔固定IP對浮動IP〕

来源:百度文库 编辑:神马文学网 时间:2024/10/06 17:52:42
Linux Solution – VPN架設 〔固定IP對浮動IP〕
檔案位於:飛狐Linux文件
-flyfox @ 6:33 am
Linux Solution – VPN架設 〔固定IP對浮動IP〕
作者:衡山飛狐
出處:HappyLinux,Just for fun!

本 著作 係採用Creative Commons 授權條款授權.
一:【前言】
VPN〔Virtual Private Network〕虛擬私有網路,乃指在公眾網路架構上所建立的私有網路;一般說來,VPN分硬體式VPN系統,軟體式VPN系統以及與防火牆相結合的VPN系統,本篇則介紹在Linux以軟體架設VPN系統,其優點為成本低,不需硬體設備及專線需求,透過一些技巧,浮動式IP亦可架設專屬VPN,而本文為固定IP對浮動IP之VPN做一實作。
二:【軟體】
vpnd-1.1.0.tar.gz:http://sunsite.dk/vpnd/archive/vpnd-1.1.0.tar.gz
三:【環境】
1.Linux Server X2 [VPN Server & VPN Client]
2.固接ADSL X1(virtualage) ;計時制ADSL X 1(flyfox)
3.雙邊皆有對內即對外固定IP(兩張網卡)〔對內:虛擬固定IP,對外:真實固定IP及浮動IP〕
四:【安裝】
1.下載vpnd-1.1.0.tar.gz。
2.tar zxvf vpnd-1.1.0.tar.gz。
3.以下為安裝步驟:
[root@virtualage vpn]# tar zxvf vpnd-1.1.0.tar.gz
[root@virtualage vpn]# cd vpnd
[root@virtualage vpnd]# ./configure
[root@virtualage vpnd]# make
[root@virtualage vpnd]# cp vpnd /usr/sbin
[root@virtualage vpnd]# chmod +x /usr/sbin/vpnd
[root@virtualage vpnd]# cp vpnd.conf vpnd.chat /etc
[root@virtualage vpnd]# chmod 644 /etc/vpnd.conf /etc/vpnd.chat
[root@virtualage vpnd]# chown root.root /etc/vpnd.conf /etc/vpnd.chat
[root@virtualage vpnd]# ./vpnd -m
[root@virtualage vpnd]# chmod 400 /etc/vpnd.key
[root@virtualage vpnd]# mkdir vpnd_client
[root@virtualage vpnd]# cp -a /etc/vpnd.* vpnd_client
[root@virtualage vpnd]# cp -a /usr/local/sbin/vpnd vpnd_client
[root@virtualage vpnd]# tar zcvf vpnd_client.tgz vpnd_client
〔說明〕
(1)vpnd -m 是為產生/etc/vpnd.key 檔。
(2)vpnd_client.tgz修改後供client端使用。
4.假設Server端為virtualage電腦,其真實固定IP為61.59.208.118;對應VPN IP為192.168.0.1,Client端為flyfox電腦,因為是浮動IP,故必須以shell script來解決每次IP不固定之問題;但其對應VPN IP為192.168.1.2(虛擬IP)。
5.將vpnd_client.tgz傳至Client端flyfox電腦,並將之解壓。
6.將解壓過的檔案位置放置與Server端位置相同的目錄。
7.因為要解決Client端浮動IP的問題;所以有幾個地方要思考解決。
(1)Client端每次IP變動立即改寫/etc/vpnd.conf,並重跑Client端的vpnd。
(2)Server端亦要取得最新的Client端IP,並改寫/etc/vpnd.conf後重跑Client端的vpnd,如此雙邊的Tunnel才能重新建立。
〔說明〕
由於Client端為浮動IP,但Server端的vpnd.conf內容必須取得Client的真實IP,故我們必須藉助動態DNS來取得Client的IP(Client端必須於IP更改後自動更改動態DNS的IP資料),然後改寫/etc/vpnd.conf。
host flyfox.homeip.net
flyfox=`host flyfox.homeip.net | sed -e ‘s/flyfox.homeip.net has address //g‘`
echo "mode server" > /etc/vpnd.conf
echo "client $flyfox 10001" >> /etc/vpnd.conf
echo "server 61.59.208.118 10001" >> /etc/vpnd.conf
echo "local 192.168.0.1" >> /etc/vpnd.conf
echo "remote 192.168.1.2" >> /etc/vpnd.conf
echo "keyfile /etc/vpnd.key" >> /etc/vpnd.conf
echo "route1 192.168.1.0 255.255.255.0 192.168.1.2" >> /etc/vpnd.conf
echo "nocompress" >> /etc/vpnd.conf
echo "autoroute" >> /etc/vpnd.conf
killall vpnd
/usr/sbin/vpnd -f /etc/vpnd.conf
將Server端的vpnhost用crontab每小時Run一次。
Client亦有對應shell script改寫 /etc/vpnd.conf 。
host flyfox.homeip.net
flyfox=`host flyfox.homeip.net | sed -e ‘s/flyfox.homeip.net has address //g‘`
echo "mode server" > /etc/vpnd.conf
echo "client $flyfox 10001" >> /etc/vpnd.conf
echo "server 61.59.208.118 10001" >> /etc/vpnd.conf
echo "local 192.168.0.1" >> /etc/vpnd.conf
echo "remote 192.168.1.2" >> /etc/vpnd.conf
echo "keyfile /etc/vpnd.key" >> /etc/vpnd.conf
echo "route1 192.168.1.0 255.255.255.0 192.168.1.2" >> /etc/vpnd.conf
echo "nocompress" >> /etc/vpnd.conf
echo "autoroute" >> /etc/vpnd.conf
killall vpnd
/usr/sbin/vpnd -f /etc/vpnd.conf
8.Server和Client端都有了vpnhost這隻shell script用來改寫 /etc/vpnd.conf,可將vpnhost寫入/etc/rc.d/rc.local使雙邊一開機即可建立彼此的Tunnel。
9.Client端浮動IP若IP更改的解決方法:
解決方式:改寫Client端vpnhost,命名為adslmon
#!/bin/sh
#檔名:adslmon
#程式簡介:檢查ADSL斷線重新連線後IP是否改變,若改變則更新動態DNS之資料
# ,產生新VPND Config檔,並發一封E-MAIL通知IP已變且紀錄IP位址歷史。
#程式作者:[d]flyfox@virtualage.homelinux.net[/d]
#網站:[d]http://virtualage.homelinux.net/[/d]
#檢查是否恢復連線
connect=0
while [ true ] ; do
connect=`ifconfig ppp0 | grep inet | wc -l`
if [ $connect -eq 0 ] ; then
sleep 3
else
adslipold=$adslip
adslip=`ifconfig ppp0 | grep inet | sed -e ‘s/inet addr://g‘ | sed -e ‘s/P-t-P://g‘ | gawk ‘{print $1}‘`
if [ "$adslip" != "${adslipold}" ] ; then
newip=`ifconfig ppp0 | grep inet | sed -e ‘s/inet addr://g‘ | sed -e ‘s/P-t-P://g‘ | gawk ‘{print $1}‘`
#連線後取得新IP後更改動態DNS資料
#ddclient為更改www.dyndns.org之程式
/root/bin/ddclient -ip $newip -host flyfox.homeip.net > /root/adsl_ppp0
ifconfig ppp0 >> /root/adsl_ppp0
#通知列在adslmaillist名單上的e-mail
echo "IP History:`date +%m/%d/%Y` [`date +%T]`;IP Address:[$newip]" >> /root/ip_history
mail `cat /root/adslmaillist` -s "ADSL IP Update at `date +%m/%d/%Y` [`date +%T]`" < /root/adsl_ppp0
########VPN Client Config Change (/etc/vpnd.conf)#######
echo "mode client" > /etc/vpnd.conf
echo "client $newip 10001" >> /etc/vpnd.conf
echo "server 61.59.208.118 10001" >> /etc/vpnd.conf
echo "local 192.168.1.2" >> /etc/vpnd.conf
echo "remote 192.168.0.1" >> /etc/vpnd.conf
echo "keyfile /etc/vpnd.key" >> /etc/vpnd.conf
echo "route1 192.168.0.0 255.255.255.0 192.168.0.1" >> /etc/vpnd.conf
echo "nocompress" >> /etc/vpnd.conf
echo "autoroute" >> /etc/vpnd.conf
killall vpnd
/usr/local/sbin/vpnd -f /etc/vpnd.conf
########END VPN Client Config Change ###################
fi
sleep 180
fi
done
將adslmon寫入 /etc/rc.d/rc.local 。
五:【後記】
其實本站提供的VPN解決方案不僅為兩邊VPN Tunnel的建立而已,透過實作,三邊、四邊…….都可以,兩邊都是浮動IP也沒有問題,方法僅僅是如法泡製(只是更改/etc/vpnd.conf的 port設定 1001 1002 1003 ……..)。
寄件者:衡山飛狐 (flyfox@bbs.openfind.com.tw)
主旨:Linux Solution – VPN架設 〔固定IP對浮動IP〕
View: Original Format
網上論壇:tw.bbs.comp.linux
日期:2003-09-07 06:33:24 PST
作者:衡山飛狐 flyfox@gen2.homeip.net
迴響 (0)
迴響
RSS feed for comments on this post.
The URI to TrackBack this entry is: http://www.happylinux.tw/modules/wordpress/wp-trackback.php/14