作者 主題: [轉貼] Linux Solution -- VPN架設 〔固定IP對浮動IP〕  (閱讀 10257 次)

0 會員 與 1 訪客 正在閱讀本文。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17446
    • 檢視個人資料
    • http://www.study-area.org
"衡山飛狐" <flyfox@bbs.openfind.com.tw> 撰寫於郵件 news:0BJF9OQ$0001JRA$1@bbs.openfind.com.tw...
> Linux Solution -- VPN架設 〔固定IP對浮動IP〕 VADOC:03073002
> 作者:衡山飛狐 flyfox@virtualage.homelinux.net
>
> 一:【前言】
> VPN〔Virtual Private Network〕虛擬私有網路,乃指在公眾網路架構上所建立的私有網路;一般說來,VPN分硬體式VPN系統,軟體式VPN系統以及與防火牆相結合的VPN系統,本篇則介紹在Linux以軟體架設VPN系統,其優點為成本低,不需硬體設備及專線需求,透過一些技巧,浮動式IP亦可架設專屬VPN,而本文為固定IP對浮動IP之VPN做一實作。
>
> 二:【軟體】
> vpnd-1.1.0.tar.gz:http://virtualage.homelinux.net/DownLoad/Linux/vpn/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。
>
> ----------begin Server vpnhost shell script--------------------------
>
> 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
>
> ----------end Server vpnhost shell script--------------------------
> 將Server端的vpnhost用crontab每小時Run一次。
> Client亦有對應shell script改寫 /etc/vpnd.conf 。
>
> ----------begin Client vpnhost shell script--------------------------
>
> 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
>
> ----------end Client vpnhost shell script--------------------------
> 8.Server和Client端都有了vpnhost這隻shell script用來改寫 /etc/vpnd.conf,可將vpnhost寫入/etc/rc.d/rc.local使雙邊一開機即可建立彼此的Tunnel。
> 9.Client端浮動IP若IP更改的解決方法:
> 解決方式:改寫Client端vpnhost,命名為adslmon
>
> ----------begin Client adslmon shell script--------------------------
>
> #!/bin/sh
> #檔名:adslmon
> #程式簡介:檢查ADSL斷線重新連線後IP是否改變,若改變則更新動態DNS之資料
> # ,產生新VPND Config檔,並發一封E-MAIL通知IP已變且紀錄IP位址歷史。
> #程式作者:flyfox@virtualage.homelinux.net
> #網站:http://virtualage.homelinux.net/
> #檢查是否恢復連線
> 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
>
> ----------end Client adslmon shell script--------------------------
> 將adslmon寫入 /etc/rc.d/rc.local 。
>
> 五:【後記】
> 其實本站提供的VPN解決方案不僅為兩邊VPN Tunnel的建立而已,透過實作,三邊、四邊.......都可以,兩邊都是浮動IP也沒有問題,方法僅僅是如法泡製(只是更改/etc/vpnd.conf的 port設定 1001 1002 1003 ........)。
>
> 文章出處:http://virtualage.homelinux.net/
>
> --
> ---
> 虛擬年代工作室
> http://virtualage.homelinux.net/
> Hot!!!免費email申請中!!!!
>