歪歪猪作坊 编程是一门手艺

解决PPPoE拨号多个IP地址的问题

2013-05-14

我们的路由是一部FreeBSD的机器,用PPPoE拨号,虽然在ppp.linkdown里面,加入了delete MYADDR的语句,但是似乎不起作用,每次经过长时间运行后,ifconfig tun0总会返回下列的结果: tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492 inet 183.5.143.228 –> 183.5.142.1 netmask 0xffffffff inet 183.5.131.132 –> 183.5.128.1 netmask 0xffffffff inet 118.129.216.62 –> 118.129.216.1 netmask 0xffffffff Opened by PID 245

这个似乎会影响MLDonkey判断外网地址,估计因为不知道哪个是真正的外网地址,就选了第一个,但往往第一个其实不是真正的IP。如何判断哪个才是真正的IP呢,很简单,用默认网关,打入netstat -n -r|grep default,显示: default 118.129.216.1 UGS 0 16058987 tun0

所以最后的那条记录才是真正的外网IP。按照这个原理,写了下面的脚本并用crontab定期判断并删除那些不是真正IP的条目:

	#!/bin/sh
	
	default_gw=`netstat -r -n|grep default|awk '{print $2}'`
	echo "default gateway:"$default_gw
	
	ifconfig tun0 |sed -n "/inet/p"|awk '{ if ($4!=input) system("ifconfig tun0 inet delete "$2) }' input=$default_gw

评论

内容