MacOS 使用vpnc连接Cisco VPN

大名鼎鼎的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

相关推荐