mihomo在实现tun全局代理后,默认能够与docker bridge网络很好的结合。使用docker bridge网络的容器可以直接通过tun网络的代理。但是安装并启用ufw后会导致docker bridge网络中的容器能够被dns劫持,却无法访问tun代理的网络(无论direct还是proxy)。

这是因为ufw阻止了docker0网络与tun网络之间的互联。需要在ufw中添加以下的规则:

1
2
3
4
sudo ufw allow in on docker0 to any
sudo ufw allow out on tun0 from any
sudo ufw route allow in on docker0 to any out on tun0
sudo ufw route allow out on tun0 from any in on docker0

该规则可能有点太广泛,但是可以让docker bridge网络中的容器访问tun代理的网络。如果还有其他的docker bridge网络,记得替换docker0为对应的网卡名称。