KINGJENSEN 2010-02-13
大名鼎鼎的vpnc我就不用介绍了,虽然cisco有提供mac版本的客户端,但是在Linux下我就没装成功过。
现在分享一下我在Mac下使用vpnc连接CsicoVPN的心得,希望能对各个Mac用户的工作有所帮助。
操作系统的版本是:MacOSX10.6.2
需要安装的软件
MacPorts
http://www.macports.org/
tuntaposx
http://tuntaposx.sourceforge.net/
1.安装macports
2.使用macports安装vpnc,命令:portinstallvpnc
3.安装tuntaposx
现在你就可以使用vpnc连接VPN了,具体的vpnc配置参数可以参考这篇博文http://blog.chinaunix.net/u/14220/showart_340223.html。
现在说说如何解决连接上了vpn之后会断网的问题。其实网络并没有真正断开,只是默认网关指向了tun0,也就是所有的网络全部指向了vpn所在的虚拟网卡上了,所以造成了我们无法一边登陆生产系统一边Google查资料解决问题。解决方法也很简单,只需重设这个路由:将默认网关还原为公网网关,再将生产网段的路由指定到vpnc得到网关,这样即可同时vpn和上公网了。下边贴下为Mac写的脚本,可以解决这个问题:#!/bin/ksh # # MacOS使用VPNC脚本同时连接生产和互联网 # # 作者:vlinux # 邮箱:[email protected] # 参数: # $1 : 配置文件 # # 例子: # sh vpnmac.sh home.properties # sh vpnmac.sh office 10.0.0.0/24,10.0.1.0/24,10.0.2.0/24 # sh vpnmac.sh # # 打印错误信息函数 # 参数描述 # $1 : msg错误信息 function errmsg # { local msg=$1 echo "错误信息:$1" } # # 连接函数 function connect # 参数描述 # $1 : conf_file 配置文件 # $2 : internet_gw 公网网关地址 # $3 : vpn_ip VPN内部地址 { local conf_file=$1 local internet_gw=$2 local vpn_ip=$3 #这里检查参数是否齐全 #检查是否装有vpnc if [ -x vpnc ]; then errmsg "尚未安装vpnc" exit -3 fi #检查是否装有tuntaposx ls /dev/tun* > /dev/null 2>&1 if [ ! $? -eq 0 ]; then errmsg "在/dev下找不到虚拟网卡tun ,尚未安装tuntaposx" exit -3 fi #执行连接命令 echo "正在进行VPN连接,请稍后..." local tmp_vpnmac="/tmp/vpnmac.$$" sudo vpnc $conf_file > $tmp_vpnmac if [ ! $? -eq 0 ]; then errmsg "执行vpnc命令失败" exit -3 fi #得到VPN连接后的网关地址 local vpn_gw=`grep "add net default: gateway" $tmp_vpnmac | sed 's/.*gateway *//g'` rm $tmp_vpnmac #连接完成 echo "成功建立VPN连接,准备配置路由..." #删除默认路由 sudo route delete default #添加公网路由 sudo route add default $internet_gw #添加VPN路由 for p in `echo $vpn_ip | sed 's/,/ /g'` do sudo route add $p $vpn_gw done echo "路由配置完毕" } # # 取得参数配置 global_getProRetVal="" function getPro # 参数描述 # $1 : pro_file 参数配置文件 # $2 : pro_name 参数名称 { local pro_file=$1 local pro_name=$2 if [ ! -e $pro_file ]; then errmsg "配置文件 $pro_file 无法找到!" exit -4 fi #取得配置值 local pro_val=`grep -E "^$pro_name=" $pro_file | awk -F '=' '{print $2}' | tail -1` #echo "\t$pro_name=$pro_val" global_getProRetVal=$pro_val } # # 主函数 function main { if [ $# -eq 0 ]; then #关闭VPNC sudo vpnc-disconnect else #连接VPN #得到默认网关,默认网关地址将会被设置为VPN之后得公网出口地址 echo "正在取得当前默认网关地址..." local internet_gw=`netstat -r | grep default | awk -F ' ' '{print $2}'` if [ -z $internet_gw ]; then errmsg "无法找到默认网关" exit -1 fi echo "当前默认网关为:$internet_gw" if [ $# -eq 1 ]; then #打开VPNC 采用配置文件方式 getPro $1 "vpnc_conf" local conf_file=$global_getProRetVal getPro $1 "vpn_ip" local vpn_ip=$global_getProRetVal connect $conf_file $internet_gw $vpn_ip else #打开VPNC 采用参数方式 connect $1 $internet_gw $2 fi fi } main $@
如果选用的是调用配置文件的方式,则你需要一个配置文件
#vpnmac.sh配置文件模板 #vpnc_conf=vpnc配置文件名 #vpn_ip=需要路由的ip地址,你也可以在这里强行指定能访问的主机,例如: # 为了避免误操作,我只允许自己拨上vpn之后只能访问172.16.0.5,6,7这三台主机,此时可以这样配置 # vpn_ip=172.16.0.5/32,172.16.0.6/32,172.16.0.7/32 # 又比如拨号到vpn之后有多个网段:10.8.0.0/24和172.16.0.0/24,也可以这样配置 # vpn_ip=10.8.0.0/24,172.16.0.0/24 # 总之用逗号隔开就是了 vpnc_conf=gxmcc vpn_ip=172.16.0.0/24
配置文件的说明:
vpnc_conf是vpnc的配置文件,default对应的是default.conf
vpn_ip则是需要指定路由的生产ip地址
配置文件保存为default.properties
脚本文件保存为vpnmac.sh你也可以采用命令参数方式:
$1 vpnc的配置文件名称,说明同vpn_conf
$2 生产的ip地址,说明同vpn_ip
脚本命令说明
连接VPN(配置文件方式):sh vpnmac.sh default.properties连接VPN(命令参数方式):sh vpnmac.sh default 10.0.0.0/24,10.0.1.0/24
断开VPN:sh vpnmac.shsh vpnmac
1.网络采用网线直连,网络连接方式采用“网络地址转换”,与方法一不同,无需对虚拟机的IP和默认网关进行设置,但需要配置“端口转发”,协议选择“TCP”,主机端口和子系统端口均填写1521,IP均不填;