博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

阿友博客

网络技术与信息安全精华资料站点
jiangdaoyou.cublog.cn


利用ADSL组建VPN网络

利用ADSL组建VPN网络

(姜道友 2005-09-17

 

前言:

    很多公司总部采用专线上网,而子公司或办事处采用ADSL上网,因分公司或办事处需要访问公司总部的应用服务器,所以需要组建VPN网络。但分公司或办事处很难承担专线的费用,这时我们可以利用ADSL组建VPN网络。具体方案为:我们可以在公司总部安装一台专门连接远程ADSL站点的VPN服务器,采用固定IP地址。而分公司或办事处采用宽带VPN路由器,并使用DDNS(动态域名,如花生壳)。

 

办事处宽带路由器配置:

       办事处可以购买一款VPN路由器,要求支持动态域名,如:3322.org。然后配置到总公司VPN服务器的Net to NetVPN

 

总部的vpn服务器配置:

       总部的VPN服务器可以安装一台Linux,并配置openswanVPN服务,最简单的方法是安装一台ipcop主机,其上已经集成了防火墙和VPN服务。然后编写一个VPN自动刷新程序,功能是:当远程站点的ADSL重拨而导致获取的公网IP地址发生改变,远程站点的宽带VPN路由器上会自动更新DDNS,利用此程序来实时检测远程动态域名DDNS解析的IP地址,一旦发生改变,将刷新VPN通道。下面是本人编写的VPN自动刷新程序如下:

 

 

echo -e "\t\t\n\n"

echo -e "\033[1;031m \n"

echo "######################################################################"

echo "#                DDNS VPN auto flush system 3.0                          #"

echo "#                  E-mail:jdaoyou@sohu.com                             #"

echo "######################################################################"

echo -e "\033[m \n"

echo ""

echo ""

 

 

############ dns nameserver ###################

nameserver=(61.177.95.125 61.132.94.158 .......... .......) 定义DNS服务器

 

############ DDNS name var###################

ddnsname=(xxxx.3322.org yyyy.3322.org ............) 定义远程站点的DDNS

 

############ VPN Tunnel name var###################

tunnelname=(xxxx yyyy .............)          定义VPN隧道名称

 

############ get changed IP program ###################

getchangeip(){  此函数主要检测DDNS解析的IP地址是否有变化

 

directory="/home/jiangvpn"

ipinf_file=`/bin/date |awk '{print $6""$2""$3"_"$4}'|awk -F: '{print $1""$2""$3}'`

 

/usr/bin/nslookup xxxx.3322.org 61.177.95.125|grep "Add"|grep -v "${nameserver[0]}"|grep -v "${nameserver[1]}"|grep -v "${nameserver[2]}"|grep -v "${nameserver[3]}"|grep -v "127.0.0.1"|awk '{printf "%-20s\t%-20s\n",$2"\t","xxxx.3322.org"}' > $directory/$ipinf_file

/usr/bin/nslookup yyyy.3322.org 61.177.95.125|grep "Add"|grep -v "${nameserver[0]}"|grep -v "${nameserver[1]}"|grep -v "${nameserver[2]}"|grep -v "${nameserver[3]}"|grep -v "127.0.0.1"|awk '{printf "%-20s\t%-20s\n",$2"\t","yyyy.3322.org"}' >> $directory/$ipinf_file

 

……….

 

 

if [ -e $directory/ipoldinfo ];then  这部分为检测DDNS对应的IP是否有改变

   /usr/bin/diff $directory/$ipinf_file $directory/ipoldinfo |grep -v ">" > $directory/changeip

   /bin/mv $directory/$ipinf_file $directory/ipoldinfo

   else

   /bin/cp $directory/$ipinf_file $directory/ipoldinfo

   getchangeip

fi

}

 

#################### Log  ########################

 

updatelog(){

 

if [ -e $directory/ddnsupdatelog ];then

     .......... 这部分主要功能是当远程DDNS有变化时记录日志

fi

 

}

 

############ flush route list  ###################

changeroute(){

 

        这部分为如果需要改变路由,可以在刷新通道前设置路由表  注:这部分主要是双线路考虑的

}

 

############ VPN flush program ###################

 

flushddnsvpn(){ 此函数功能为:刷新已经改变peer IPVPN通道

 

NEWIP=`/bin/cat /home/jiangvpn/ipoldinfo|grep $1|awk '{print $1}'`

OLDIP=`/bin/cat /etc/hosts|grep $1|awk '{print $1}'`

 

if [ "$NEWIP" != "$OLDIP" ] ; then

 

        echo -e "\033[1;032m$1 tunnel is flushing ...........\n"

 

        updatelog $1

        /usr/sbin/ipsec auto --delete $1

 

        #/bin/cat /home/jiangvpn/ipoldinfo >> /etc/hosts

        vim -e -s -c ":%s/$OLDIP/$NEWIP/g" -c ":wq" /etc/hosts

        #sed 's/$OLDIP/$NEWIP/g' /etc/hosts|tee /etc/hosts

 

        /usr/sbin/ipsec auto --add $1

        /usr/sbin/ipsec auto --route $1

 

        #/usr/sbin/ipsec auto --rereadsecrets

        #/usr/sbin/ipsec auto --rereadcacerts

        #/usr/sbin/ipsec auto --rereadmycert

 

        /usr/sbin/ipsec auto --rereadall

        /usr/sbin/ipsec auto --asynchronous --up $1

  

 

fi

 

}

 

############ Main program ###################

这部分是最难编写的。

while :

do

 

checkpid=`/bin/ps -ax|grep "/home/jiangvpn/flushddnsvpn"|grep -v "Warning"|grep -v "grep"|awk '{print $1}'`

vpnstatus=`/etc/rc.d/ipsec --status|grep "IPsec"|awk '{print $2}'`

 

 if [ "$checkpid" = "" ] ; then

 

     if [ "$vpnstatus" = "running" ] ; then

 

         #echo "ipsec services is running..............."

 

         getchangeip

 

         while read changeddnsname

 

           do

 

#*************************************************************

#                                                            #

#                  Flush Zombie Tunnel                       #

#                                                            #

#*************************************************************

 

   case $changeddnsname in

      *${ddnsname[0]}*)

             changeroute ${tunnelname[0]}

             flushddnsvpn ${tunnelname[0]}

                ;;

      *${ddnsname[1]}*)

             flushddnsvpn ${tunnelname[1]};;

      *${ddnsname[2]}*)

             flushddnsvpn ${tunnelname[2]};;

      *${ddnsname[3]}*)

 

 

 

 

     ...........

 

 

 

 

             flushddnsvpn ${tunnelname[13]};;

      *${ddnsname[14]}*)

             flushddnsvpn ${tunnelname[14]};;

      *${ddnsname[15]}*)

             flushddnsvpn ${tunnelname[15]};;

      *${ddnsname[16]}*)

             flushddnsvpn ${tunnelname[16]};;

      *${ddnsname[17]}*)

             flushddnsvpn ${tunnelname[17]};;

 

       ..........

 

 

   esac

    done < $directory/changeip

 

     else

       echo "ipsec services is down..............."

       /etc/rc.d/ipsec --restart

     fi

 fi

 sleep 10 10秒刷新一次

#  break

done

 

 

注:以上只是程序的架构,其中部分程序省略了,如果需要的朋友,可以留言或发邮件给我。多谢支持。

发表于: 2007-03-03 ,修改于: 2007-03-03 09:34,已浏览3017次,有评论27条 推荐 投诉


网友评论
内容:
自卑ING
本站网友评论于:2007-03-10 15:12:40 (221.232.151.★)
内容:
好的代码好读

DX写得不错,像我这外行一看也理解思路了
本站网友评论于:2007-03-19 16:27:07 (121.35.116.★)
内容:
大哥,你好给我也发一份吧。先谢谢!!kanmm8@hotmail.com
本站网友评论于:2007-03-25 13:26:11 (61.178.22.★)
内容:
您好!可以請您給我一下詳細資料嗎?  謝謝囉^^
我是linux新手  不過需要架VPN  正好在煩惱呢!
mail:  femasnowle@yahoo.com.tw
fema 评论于:2007-03-28 00:36:24 (61.225.204.★)
内容:

   写的好
本站网友评论于:2007-04-11 16:52:52 (58.63.38.★)
内容:
代理请发给我一份baiducc@yahoo.com.cn谢谢了!!
本站网友评论于:2007-04-14 18:23:49 (222.90.211.★)
内容:
我也需要,请发给我一份
本站网友评论于:2007-04-23 10:09:35 (219.157.101.★)
内容:
晕,忘了写邮箱了,qimao@126.com
本站网友评论于:2007-04-23 10:10:24 (219.157.101.★)
内容:
hao_darling@163.com......谢谢先
本站网友评论于:2007-04-28 14:36:24 (59.41.39.★)
内容:
http://www.ofvpn.com/viewthread.php?tid=22&extra=page%3D1   MF WOW 魔兽世界燃烧远征帐号升级注册教程
本站网友评论于:2007-04-30 13:33:08 (221.231.115.★)
内容:
我正在做基于VPN技术的一个设计,我需要一份,谢谢wolfsc728@sina.com
tete920 评论于:2007-05-10 21:41:46 (221.237.173.★)
内容:
大哥的真是好东西啊!我正在试验一个DDNS服务器,对VPN不了解,但看到有个OpenVPN,也想弄一下OpenVPN,大哥可否发一份完整的代码给俺呢?先谢了 !!
7788ns@163.com
cjc108 评论于:2007-05-24 09:06:17 (202.103.251.★)
内容:
顶.....支持....能发给我一份吗?jinyou8327@126.com
本站网友评论于:2007-05-26 00:03:25 (202.105.26.★)
内容:
急需,望给一份.
MY EMAIL:zhuzhengju20@163.com
谢谢~
本站网友评论于:2007-07-02 19:47:50 (60.170.249.★)
内容:
太好了,最近正在研究这个呢,兄弟也给小弟发一份吧,不胜感激呀!
我的邮箱:ideal.shen@global-choice.net
本站网友评论于:2007-07-07 16:49:44 (222.67.30.★)
内容:
麻烦给我一份,谢谢哦 
gsvian@hotmail.com
本站网友评论于:2007-07-09 13:44:52 (222.70.75.★)
内容:
好东西,麻烦也发一份给我,谢谢
yangjie623 评论于:2007-08-21 23:21:40 (222.244.176.★)
内容:
真是太好了,兄弟给我也发一份吧,多谢了
manyue_123@hotmail.com
manyue_123456789 评论于:2007-08-30 13:29:21 (116.58.142.★)
内容:
真是太好了,兄弟给我也发一份吧,多谢了
manyue_123@hotmail.com
manyue_123456789 评论于:2007-08-30 13:29:25 (116.58.142.★)
内容:
您好!可以請您給我一下詳細資料嗎?  谢谢^^
我是linux新手  不過需要架VPN  正好在煩惱呢!
mail:  gzh830913@126.com
本站网友评论于:2007-09-05 15:12:56 (221.216.155.★)
内容:
哈哈,真是太好了,能给我也发一份吧,多谢了!szsuun@yahoo.com.cn
本站网友评论于:2007-09-07 08:02:01 (219.133.125.★)
内容:
哈哈,真是太好了,能给我也发一份吧,nymz@163.com
本站网友评论于:2007-09-19 16:46:03 (125.93.116.★)
内容:
公司正在用VPN,老烦大哥发份资料,不胜感激!
cumhb@yahoo.com.cn
本站网友评论于:2007-09-27 01:10:23 (116.24.93.★)
内容:
你好朋友,我家里有一台电脑连接ADSL上网,希望能获取您的帮助建立VPN,本人实分感激,如果成功,我想支付一点报酬,只是为了感激,没有办的意思.这是我的邮件:zixinmg@163.com请给我发一份资料,留您的电话,方便我与您联系!QQ308430138
本站网友评论于:2007-11-25 06:10:58 (218.58.65.★)
内容:
您好,我正在完成一篇论文,您的这篇文章对我来说意义很大,麻烦您给我邮箱发一份,谢谢!!!
我的邮箱:nuannuanbeibei@163.com
另:我把您的这个网页保存了,以后会经常来看的,希望您继续写文章。
本站网友评论于:2007-12-07 23:05:11 (222.38.152.★)
内容:
如果两端都是ADSL,也可以用此程序吗? 请给我一份: wangye318@163.com
本站网友评论于:2008-05-02 20:26:00 (116.18.192.★)
内容:
兄弟,给我也发一份啊!  24037082@qq.com
本站网友评论于:2008-08-25 16:51:12 (222.178.10.★)

发表评论