想必大家使用Ubuntu或其他版本Linux系统上网的时候,常常遇到这样一种情况,如果电脑同时连着有线网络跟无线(Wifi)网络,系统会默认(优先)使用有线网络,即使用有线网络的网关作为默认路由。这种情况下,如果无线(Wifi)能上外网,而有线却只能上内网,则系统因为默认走有线路由而无法上外网,唯一便捷的解决办法便是断开有线。然而在某些情况下,我们既需要连接无法上外网的有线(如与有线局域网内的他人共享文件),又需要通过无线(Wifi)上外网,这样就需要更改系统的默认路由了。
因为本人经常遇到这种情况,有线IP地址192.168.200.69,无线IP地址:192.168.18.127,所以特意写了一个Shell脚本来解决这个问题,当无线网卡跟有线网卡同时启用时,优先使用无线路由器的网关。脚本代码如下:
#!/bin/sh
# /home/trevor/cpplive/WifiGateway.sh
wifi=`iwconfig | head -1 | awk '{print $1}'`
echo "Wifi interface: $wifi"
gw=`ip addr show $wifi | head -3 | tail -1 | awk '{print $2}'`
echo "Wifi IP: "$gw
gw=`echo $gw | awk -F. '{printf("%s.%s.%s.1",$1,$2,$3)}'`
echo "Wifi gateway: "$gw
echo "Set the Wifi gateway as the default gw now"
route delete default
route add default gw $gw
echo "Set the Wifi gateway as the default gw end"
该脚本先利用iwconfig命令结合管道跟head、awk命令找到无线网络设备接口名存入变量wifi中,然后依照设备接口名结合ip命令获取无线网络的主机IP地主,然后假设无线路由器的网关地址为该IP段的第一个IP地址,即xxx.xxx.xxx.1(如果本机无线IP地址为192.168.1.127,则猜测无线路由器的网关地址为192.168.1.1(通常的路由器都遵循这个规律,暂时没有找到更好的解决办法)),存入变量gw中,最后删除默认路由(即有线路由器的网关地址),将无线网络的网关作为默认路由。
由于该脚本要用到route命令,所以需要管理员(root)权限执行,在本人笔记本上的输出结果如下:
Wifi interface: wlan0
Wifi IP: 192.168.18.127
Wifi gateway: 192.168.18.1
Set the Wifi gateway as the default gw now
Set the Wifi gateway as the default gw end
https://blog.csdn.net/vivian_wanjin/article/details/81569730