Docker部署Pi-hole后网站子网免重定向功能异常排查求助
Docker部署Pi-hole后网站子网免重定向功能异常排查求助
大家好,最近我正在把一堆跑着简单服务的VM迁移到容器化环境,其中就包括我们的Pi-hole DNS服务器。原本一切都挺顺利,直到收到反馈说我们的某个网站重定向出问题了——按照供应商要求,外部流量要跳转到登录页,但我们子网内的员工和公共PC应该直接访问目标页面,可现在子网内的设备反而被错误重定向了。
我的Apache2 web服务器还在VM里,配置完全没改过,这个重定向规则已经正常运行一年多了。只要关掉Pi-hole容器、换回原来的Pi-hole VM,重定向就立刻恢复正常,所以我肯定问题出在Docker的网络处理上。
先给大家说下环境背景:
- 物理局域网网段:
10.0.0.0/24 - 因为公司要求,Pi-hole容器用的是macvlan模式,直接接入物理网络,不是用Docker主机的IP
- Pi-hole VM和容器的配置完全一致,我核对了三遍还找同事帮忙检查过,没有差异
下面是我创建Docker macvlan网络的命令:
sudo docker network create --config-only --subnet 10.0.0.0/24 --gateway 10.0.0.1 -o parent=eth0 --ip-range 10.0.0.0/26 --aux-address 'host=10.0.0.10' my_macvlan_config sudo docker network create -d macvlan --config-from my_macvlan_config --attachable my_macvlan_network sudo ip link add macvlan_shim link eth0 type macvlan mode bridge sudo ip addr add 10.0.0.10/32 dev macvlan_shim sudo ip link set macvlan_shim up sudo ip route add 10.0.0.0/26 dev macvlan_shim
各设备的IP地址:
- Docker主机:
10.0.0.7 - Pi-hole容器:
10.0.0.3 - Apache2 web服务器:
10.0.0.2
附上Apache的重定向规则(敏感信息已打码):
RewriteEngine On RewriteCond %{REMOTE_ADDR} !^10\.0\. RewriteCond %{REMOTE_ADDR} !^[REDACTED] RewriteCond %{REMOTE_ADDR} !^[REDACTED] RewriteCond %{REMOTE_ADDR} !^[REDACTED] RewriteRule [REDACTED]\.html$ https://[REDACTED]
我试过把自己的IP直接加到重定向排除列表里,但还是没用。一开始我完全没想到是容器的问题,以为只有Apache配置会影响HTTP重定向,折腾了好久才定位到是Pi-hole容器导致的异常。
现在Pi-hole的DNS解析、广告拦截功能都正常,唯独这个子网免重定向的规则在容器模式下失效。有没有懂Docker网络的朋友能指点下,是不是macvlan的什么特性导致了这个问题?谢谢大家!
备注:内容来源于stack exchange,提问作者Tayotoka




