为什么在我通过 launchd 添加阻止的站点后 /etc/hosts 没有阻止域?

为什么在我通过 launchd 添加阻止的站点后 /etc/hosts 没有阻止域?

我一直在尝试设置 Launchd 以在周一至周五上午 9 点至下午 3 点之间阻止 osX 10.12.2 上 Chrome 的多个网站

我将 launchd 设置为 cp /etc/hosts_BLOCKED_sites.txt /etc/hosts

Launchd 似乎正在正确复制文件。

$ ls -la /etc/hosts

-rw-------  1 root  wheel  619 Dec 29 09:00 /etc/hosts  

$ sudo cat /etc/hosts

##  
# Host Database  
#  
# localhost is used to configure the loopback interface  
# when the system is booting.  Do not change this entry.  
##   
127.0.0.1   localhost   
255.255.255.255 broadcasthost  
::1             localhost   


# Blocked sites redirected to 0.0.0.0  
127.0.0.1 reddit.com  
127.0.0.1 www.reddit.com  
127.0.0.1 facebook.com  
127.0.0.1 www.facebook.com   

# Block Facebook IPv6
fe80::1%lo0 facebook.com
fe80::1%lo0 reddit.com
::1 facebook.com
::1 www.facebook.com
::1 www.reddit.com  
::1 reddit.com  

但是,在 /etc/hosts 设置为阻止访问后,我仍然可以在 Chrome 浏览器中打开被阻止的网站。

关于为什么 /etc/hosts 不阻止对站点的访问有什么建议吗?

编辑:我尝试过但未能阻止 Chrome 上的网站:
sudo Killall -HUP mDNSResponder从命令行
我尝试通过 chrome://net-internals/#dns 刷新 Chrome DNS 缓存
我尝试刷新 Chrome 套接字 chrome://netinternals/#sockets

我还添加了 IPv6 格式。
这没有什么区别。所有被阻止的网站仍然可以通过 Chrome v55.0.2883.95 访问。

答案1

应用程序不是必需的来咨询/etc/hosts。要获得所需的效果,请安装并配置dnsmasq。请参阅下面dnsmasq.conf与目标相关的片段。

# Add domains which you want to force to an IP address here.
# The example below send any host in double-click.net to a local
# web-server.
address=/local/0.0.0.0
address=/double-click.net/0.0.0.0
address=/google.com/0.0.0.0
address=/reddit.com/0.0.0.0  
address=/www.reddit.com/0.0.0.0
address=/facebook.com/0.0.0.0
address=/www.facebook.com/0.0.0.0

然后进行/etc/resolv.conf如下配置。

nameserver 127.0.0.1

另外,重定向到0.0.0.0not 127.0.0.1。速度快多了。 Unbound软件也能达到同样的效果。它们都提供了对 DNS 和 DHCP 的更多控制。

相关内容