Ubuntu下的NetworkManager 0.70(网络管理器小程序)使用中遇到个问题:无线网络和有线网络同时启用时,系统默认优先使用有线网络--即默认路由使用的是有线网络的。
写了一个脚本解决这个问题,无线网卡和有线网卡同时启用时,优先使用无线路由器的网关。脚本如下:
------------------------------------
#!/bin/bash
# /etc/dhcp3/dhclient-exit-hooks.d/wireless-gw
# /etc/network/if-up.d/wireless-gw
IF_DEV=`iwconfig 2>/dev/null | awk 'NR==1 {print $1}'`
[ -z "${IF_DEV}" ] && exit 0
IF_ADDR=`ip -4 addr show dev ${IF_DEV} | grep "inet " | awk 'NR==1 {print $2}'`
[ `echo ${IF_ADDR} | awk -F. '{print NF}'` -ne 4 ] && exit 1
ROUTE=`ip -4 route | grep ^default | grep "\<${IF_DEV}\>" | head -1`
if [ -z "${ROUTE}" ]
then
IF_GW=`echo ${IF_ADDR} | awk -F. '{printf("%s.%s.%s.1",$1,$2,$3);}'`
ROUTE="default via ${IF_GW} dev ${IF_DEV}"
fi
while [ 1 ]
do
ip route delete default 2>/dev/null
[ $? -ne 0 ] && break
done
eval "ip route add ${ROUTE}"
[ $? -ne 0 ] && exit 1
echo nameserver 8.8.8.8 > /etc/resolv.conf
echo nameserver 208.67.222.222 >> /etc/resolv.conf
------------------------------------
脚本先取到无线网络设备名,依照设备名取到IP地址,然后滤取路由信息,如果路由取不到则假设无线路由地址是该IP段的第一个IP号,即xxx.xxx.xxx.1(通常无线AP都这样用的),最后删除错误的默认路由,将无线网络的网关当作默认路由。
最后是修正DNS,如果DNS工作正常,可以去掉。
写好后放到/etc/network/if-up.d/ 和 /etc/dhcp3/dhclient-exit-hooks.d/下各一份,命名为wireless-gw,赋执行权限。
(Ubuntu8.10下使用正常,其它发行版安放目录可能会有差异)
难道ubuntu里面就没有考虑这个问题?很奇怪!
---------------------------------
google talk
sha...@gmail.com---------------------------------