LinuxMint 18.3中dnsmasq与以太网冲突,需兼顾WiFi Django服务与联网
解决dnsmasq运行时台式机无法上网的问题
我来帮你搞定这个问题——核心原因是dnsmasq默认会监听所有网络接口,甚至会接管系统的DNS配置,导致以太网的互联网DNS解析被干扰。下面是一步步的解决方案,既能让WiFi热点正常提供Django站点服务,又不影响台式机通过以太网访问互联网:
1. 调整dnsmasq配置,让它只专注于WiFi接口
编辑你的dnsmasq.conf文件,添加以下关键配置,确保dnsmasq只在WiFi网卡上工作,不碰以太网的网络设置:
# 指定dnsmasq只监听WiFi接口(把wlan0换成你的WiFi网卡名称,可用ip addr查看) interface=wlan0 # 强制dnsmasq只绑定指定接口,不抢占系统全局的DNS端口(53) bind-interfaces # 给WiFi客户端分配IP的范围和租期 dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h # 把你的Django站点域名(比如django.local)指向台式机的WiFi静态IP(这里假设是192.168.4.1) address=/django.local/192.168.4.1
bind-interfaces是关键,它能防止dnsmasq干扰以太网的DNS解析流程,让系统继续用以太网提供的DNS服务器访问互联网。
2. 固定台式机的DNS配置,避免被篡改
LinuxMint默认用NetworkManager管理网络,可能会自动覆盖/etc/resolv.conf。我们可以手动锁定DNS设置:
- 先备份原文件:
sudo cp /etc/resolv.conf /etc/resolv.conf.backup - 编辑
/etc/resolv.conf,填入以太网的DNS服务器(比如你的路由器IP,或者公共DNS如8.8.8.8):nameserver 192.168.1.1 # 替换成你的以太网网关/路由器IP nameserver 8.8.8.8 - 让NetworkManager不再自动修改DNS:编辑
/etc/NetworkManager/NetworkManager.conf,修改[main]段:[main] dns=none - 重启NetworkManager生效:
sudo systemctl restart NetworkManager
3. 确保WiFi接口和hostapd配置正确
- 先给WiFi网卡设置静态IP(和dnsmasq里的网段对应):
sudo ip addr add 192.168.4.1/24 dev wlan0 sudo ip link set wlan0 up - 检查hostapd的配置(
/etc/hostapd/hostapd.conf),确保它只绑定WiFi接口:interface=wlan0 driver=nl80211 ssid=你的热点名称 hw_mode=g channel=6 wpa=2 wpa_passphrase=你的热点密码 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP - 让hostapd加载这个配置:编辑
/etc/default/hostapd,设置:DAEMON_CONF="/etc/hostapd/hostapd.conf"
4. 启动服务并验证
- 先启动hostapd:
sudo systemctl start hostapd - 再启动dnsmasq:
sudo systemctl start dnsmasq - 验证台式机互联网访问:
ping google.com,应该能正常解析和连通。 - 验证WiFi客户端访问Django:连接热点后,访问
http://django.local:8000(记得Django要绑定到0.0.0.0:python manage.py runserver 0.0.0.0:8000)。
额外注意事项
- 防火墙要允许WiFi接口的DHCP和DNS流量:
sudo ufw allow in on wlan0 from 192.168.4.0/24 to any port 53 sudo ufw allow in on wlan0 from 192.168.4.0/24 to any port 67 - 如果需要开机自动启动服务,执行:
sudo systemctl enable hostapd sudo systemctl enable dnsmasq
内容的提问来源于stack exchange,提问作者paul portocarrero
相关产品推荐
相关产品推荐

