路由器wan重拨后,ipv6 dns解析直连运营商dns导致设备离线

设备在获取了ipv6地址后,如果wan口重拨更换了ipv6地址,路由器后面的设备dns分别有不同的问题,比如:ipv6更新后ssh会连不上,需要重启dropbear,原因是设备的dns地址已经通过dhcp自动获取,但是路由器ipv6变更后,dns服务器应该也会变更,但是设备这时是不知道的,还是用着变更前的dns地址,导致出现这种问题。

路由器wan重拨后,ipv6 dns解析直连运营商dns导致设备离线

我已知的情况:
苹果手机:暂时没有发现有影响
安卓手机:dns解析不再经过路由器53端口
电脑有线:dns解析不再优先使用ipv6,基本全部都是ipv4进行dns解析。
基于以上情况,写了一个脚本:

wan_check.sh

[ "$(cat /proc/uptime | awk '{print $1}' | sed "s/...$//g")" -le 100 ] && exit
ipv4=`ifconfig pppoe-wan | grep P-t-P | grep -oE [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} | head -n1`
ipv6=`ifconfig pppoe-wan | grep Global | grep -oE [0-9a-z]{1,4}:[0-9a-z]{1,4}:[0-9a-z]{1,4}:[0-9a-z]{1,4}:[0-9a-z]{1,4}:[0-9a-z]{1,4}:[0-9a-z]{1,4}:[0-9a-z]{1,4}`
updateIPFile(){
	echo IPv4=$ipv4 > var/ip
	echo IPv6=$ipv6 >> var/ip
}
[ -z "$ipv4" ] && ifup wan || [ -f /var/ip ] && source /var/ip
[ -n "$ipv4" -a "$IPv4" != "$ipv4" ] && {
	updateIPFile
}
[ -n "$ipv6" -a "$IPv6" != "$ipv6" ] && {
	updateIPFile
	interface=`uci get network.lan.ifname`
	for ifname in $interface lan;do
		ubus call network.interface down "{ \"interface\" : \"${ifname}\" }"
	done
	sleep 1
	for ifname in $interface lan;do
		ubus call network.interface up "{ \"interface\" : \"${ifname}\" }"
	done
	sleep 10
	wlist=`cat /etc/config/wireless | grep ifname | awk '{print $3}' | sed "s/'//g"`
	for wl in $wlist;do
		macs=`iwinfo $wl assoclist | grep ..:..:..:..:..:.. | grep dBm | awk '{print $1}'`
		for mac in $macs;do
			iwpriv $wl kickmac $mac
		done
	done
}

若检测到ipv6地址更换,将所有wifi设备踢出,强制断开lan网口(模拟物理拔网线),此时路由器下的设备就可以通过dhcp重新获取地址来解决上述情况了。


链接: https://pan.baidu.com/s/1Z7iJtuSBqYfKQdSQ109Ygw?pwd=luyw

提取码: luyw


下载解压将里面的脚本放到/data文件夹,然后控制台输入命令即可:

chmod 755 data/wan_check.sh && sed -i '$a\*/1 * * * * /data/wan_check.sh' etc/crontabs/root && etc/init.d/cron restart

发表回复

登录后才能评论