通过hosts文件屏蔽YouTube失效问题排查及Linux系统级网站屏蔽方案咨询
通过hosts文件屏蔽YouTube失效问题排查及Linux系统级网站屏蔽方案咨询
我来帮你拆解下YouTube屏蔽失效的问题,再给你几个靠谱的系统级网站屏蔽替代方案~
一、hosts文件屏蔽YouTube失效的排查步骤
1. 先清缓存!大概率是缓存搞的鬼
浏览器和系统DNS缓存都可能残留旧的解析结果,导致hosts修改不生效:
- 浏览器缓存:打开浏览器设置,找到清除缓存的选项(优先选“缓存文件”和“DNS缓存”相关项),或者直接按
Ctrl+Shift+Del快速调出清除界面。 - 系统DNS缓存:根据你的Linux发行版执行对应刷新命令:
- 用systemd-resolved的发行版(如Ubuntu、Fedora):
sudo resolvectl flush-caches # 或者重启服务确保生效 sudo systemctl restart systemd-resolved - 用dnsmasq的发行版:
sudo systemctl restart dnsmasq
- 用systemd-resolved的发行版(如Ubuntu、Fedora):
- 验证效果:执行
nslookup youtube.com,如果输出IP是0.0.0.0或::0,说明hosts已生效;如果还是YouTube真实IP,继续往下排查。
2. YouTube的子域名没屏蔽!这是常见坑
YouTube的访问依赖大量子域名(比如www.youtube.com、m.youtube.com、googlevideo.com),只屏蔽主域名的话,浏览器可能自动跳转到子域名,导致屏蔽失效。把这些相关域名也加到hosts里:
0.0.0.0 youtube.com www.youtube.com m.youtube.com ::0 youtube.com www.youtube.com m.youtube.com 0.0.0.0 youtube.de www.youtube.de m.youtube.de ::0 youtube.de www.youtube.de m.youtube.de 0.0.0.0 googlevideo.com www.googlevideo.com ::0 googlevideo.com www.googlevideo.com
3. 检查系统域名解析优先级配置
Linux系统通过/etc/nsswitch.conf决定域名解析顺序,要确保hosts文件优先级高于DNS:
打开文件查看:
cat /etc/nsswitch.conf
找到hosts:开头的行,确保files(代表hosts文件)在dns前面,比如:
hosts: files dns myhostname
如果顺序是dns files,修改成files dns,保存后重启相关服务(如systemd-resolved)。
4. 浏览器的DNS over HTTPS(DoH)在搞事情
现在很多浏览器默认开启DoH,会绕过系统DNS解析(包括hosts文件),直接用浏览器自带的DNS服务器访问网站。需要关闭这个功能:
- Firefox:设置 → 网络设置 → 设置 → 取消勾选“启用DNS over HTTPS”
- Chrome:设置 → 隐私和安全 → 安全 → 关闭“使用安全DNS”
二、其他Linux系统级网站屏蔽方案
如果hosts文件方式不够稳定,试试这些替代方案:
1. 使用iptables/firewalld屏蔽IP段
直接屏蔽YouTube的IP地址段,注意YouTube的IP段会定期更新,需要偶尔调整:
- iptables命令示例:
# 屏蔽Google/YouTube的常见IP段 sudo iptables -A OUTPUT -d 172.217.0.0/16 -j DROP sudo iptables -A OUTPUT -d 142.250.0.0/16 -j DROP - 如果用firewalld,添加富规则:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" destination address="172.217.0.0/16" drop' sudo firewall-cmd --reload
2. 用dnsmasq做本地DNS屏蔽
dnsmasq是轻量DNS服务器,可方便配置域名重定向:
- 安装dnsmasq:
sudo apt install dnsmasq(Debian/Ubuntu)或sudo dnf install dnsmasq(Fedora) - 编辑配置文件
/etc/dnsmasq.conf,添加屏蔽规则:address=/youtube.com/0.0.0.0 address=/youtube.de/0.0.0.0 address=/googlevideo.com/0.0.0.0 - 重启服务:
sudo systemctl restart dnsmasq - 将系统DNS设置为127.0.0.1,确保优先用dnsmasq解析。
3. 本地安装Pi-hole
Pi-hole原本是网络级广告屏蔽工具,也可在本地安装作为系统级域名屏蔽工具:
- 安装命令:
curl -sSL https://install.pi-hole.net | bash - 安装完成后配置本地DNS,在Pi-hole后台可视化添加要屏蔽的域名即可,操作简单直观。
备注:内容来源于stack exchange,提问作者Kaligule




