背景
带自己的笔记本到公司,同时上内外网,内网插的网线连接192.168.x.x,网关192.168.93.1,DNS解析服务器为:192.168.1.8;外网用的是华为的5GWiFi 盒子,网段也是192.168.x.x,网关192.168.222.1。最近发现访问外网比如www.baidu.com很慢,但是还是能访问。
排查
- 直接把网线拔掉,目的就是测试只用WiFi上外网,看看是否还是这么慢,结果发现只用外网,访问百度网速快了好多。
- 插上网线,设置好内外网同时上网的路由,nslookup www.baidu.com,结果如下
$ nslookup www.baidu.com
Server: 192.168.1.8
Address: 192.168.1.8#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 14.215.177.38
Name: www.a.shifen.com
Address: 14.215.177.39
这个结果没有经验的小伙伴可能看着一脸懵逼,解释一下:Server: 192.168.1.8 说明,www.baidu.com这个域名是通过192.168.1.8去解析的,而前面说了,这个DNS是我们公司内网的DNS,虽然也可以解析外网,但是走内网解析要绕几个弯,当然慢了。
结论
打开网页慢的原因是DNS解析的问题,访问www.baidu.com,需要用外网默认网关192.168.222.1解析,然而我之前配置的192.168都走内网,192.168.222.1(因为是192.168开头)导致DNS解析走了内网,电脑又访问192.168.1.8(我公司内网默认的NDS解析),然鹅我们的内网DNS及其之慢,所以打开网页就很慢。
解决方法
让所有的DNS解析都走外网,然后把自己需要访问的内网域名全部配置在hosts。这里就需要我们指定192.168.222.x都走外网。所以在以前的基础上加上新的路由
设置hosts:
添加新的路由:
route add -net 192.168.222.0/24 wlp2s0
route add -net 192.168.222.0/24 gw 192.168.222.1
加完以后如下:
#!/bin/bash
##删除老的路由表
OLDIFS=$IFS
IFS=$'\n'
ROUTES=`route -n |awk 'NR>2 {print $1,$3}'`
if [[ -n $ROUTES ]]
then
for route in $ROUTES
do
route del -net `echo $route|awk -F " " '{print $1}'` netmask `echo $route|awk -F " " '{print $2}'`
done
fi
IFS=$OLDIFS
###添加新的路由表
#外网
route add -net 0.0.0.0/0 wlp2s0
route add -net 0.0.0.0/0 gw 192.168.222.1
#192.168.222.x让它走外网(wlp2s0代表我的无线网卡,即外网)
route add -net 192.168.222.0/24 wlp2s0
route add -net 192.168.222.0/24 gw 192.168.222.1
#内网
route add -net 192.168.0.0/16 enp3s0f1
route add -net 192.168.0.0/16 gw 192.168.93.1
把上面脚本保存到SetNetwork.sh,每次开机后运行一下上边的脚本,如果不想每次手动运行,把他写入开机自动运行。
sudo sh SetNetwork.sh