openwrt中的dnsmasq包含有dhcp server和dns的功能,dnsmasq是动态启动的,当网络状态发送变化是会重新启动dnsmasq,启动脚本为/etc/hotpulg.d/iface/25-dnsmasq。dnsmasq脚本启动时会先生成dnsmasq的配置文件,当网络变化频繁时,可能会同时出现多个生成配置文件的过程,写同一个配置文件导致后面关于dhcp的配置丢失,从而导致dhcp server的功能不正常。
修正该问题的方法是配置package/network/services/dnsmasq/files/dnsmasq.hotplug,将启动方式由start改为restart,之后几乎未在出现类似问题。
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
/etc/init.d/dnsmasq enabled && /etc/init.d/dnsmasq restart