|script| Linux环境下无线与有线网络并存时路由修改

70 views
Skip to first unread message

邵志雄

unread,
Dec 14, 2009, 3:00:57 AM12/14/09
to 二进制生存
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
---------------------------------

邵志雄

unread,
Dec 14, 2009, 3:39:48 AM12/14/09
to 二进制生存
附件 wireless-gw.sh
wireless-gw
Reply all
Reply to author
Forward
0 new messages