[英]Run multiple DNS servers with pi-hole and docker
我有一个设置了多个 Wifi 网络的 Unifi 家庭设置和一个带有 Arch 的 RaspberryPi 来处理 DNS 过滤。
我想在 Raspberry Pi 上运行多个 DNS 服务器并将不同的 Wifi 引导到不同的 DNS。 为此,我需要为不同的 DNS 容器提供不同的 IP 地址。
在尝试了 systemd 和几个不同的 docker 解决方案之后,我决定将 Pi-Hole 与 cloudflared 结合使用。
使用 docker-compose 运行多个 pi 孔不是问题,但我对正确的(docker)网络知之甚少,无法弄清楚如何为不同的容器获取不同的、网络可访问的 ip 地址。
这是一组 cloudflare + pi-hole 的 docker-compose 文件:
version: "3.5"
services:
cloudflared_workday:
container_name: cloudflared_workday
image: crazymax/cloudflared:latest
ports:
- "5053:5053/udp"
- "49312:49312/tcp"
environment:
- "TZ=Europe/Berlin"
- "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query"
restart: always
pihole_workday:
container_name: pihole_workday
image: pihole/pihole:latest
depends_on:
- cloudflared_workday
network_mode: host
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'password'
DNS1: '127.0.0.1#5053'
DNS2: 'no'
ServerIP: '192.168.2.10'
# Volumes store your data between container upgrades
volumes:
- './pihole_workday/pihole/etc-pihole/:/etc/pihole/'
- './pihole_workday/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/'
restart: always
其中 192.168.2.10 是给树莓派的 ip。
我只能在我的路由器中为 DNS 指定 IP,而不是我可以为容器重新映射的不同端口。
PS.:我知道密码不理想,但这是另一天的问题:D
如何在同一台机器上运行此设置的副本,而不会让两个 DNS 相互干扰,以及如何使用不同的 IP 到达单独的 pi 孔?
我发现 docker 中有一个叫做macvlan的东西,将 docker 容器直接链接到网络。 这似乎也适用于 pi-hole ( macvlan + pi-hole ),只是我还没有成功。 有没有人看到这种方法的概念问题?
这里的第一个计时器和糟糕的英语。
我为此苦苦挣扎了整整两周,但最终设法使用 docker 和 macvlan 运行多个 Pi-hole 实例。
我的测试硬件 Orange pi PC 512mb,16gb sd 卡。 操作系统:Armbian 21.02.2 Buster 与 Linux 5.10.16-sunxi
我在单独的 vlan 上运行 docker。
创建 docker VLAN:
docker network create -d macvlan \
--subnet=10.0.10.0/24 \
--ip-range=10.0.10.128/25 \
--gateway=10.0.10.1 \
-o macvlan_mode=bridge \
-o parent=eth0.10 macvlan10
-o macvlan_mode=bridge \
如果容器需要访问互联网,这部分非常重要,让我白发苍苍,但如果容器不需要互联网,则不需要互联网,适用于 LANtoLAN。 --ip-range=10.0.10.128/25 \
不是必需的。
下一个:
创建文件夹:/home/pihole/ - 或您选择的文件夹。 在文件夹内创建文件: sudo nano docker-compose.yml 插入: - 它只是我的工作示例,您可以使用您的。
version: "3.6"
services:
pihole:
container_name: Pi-Hole
hostname: pihole
privileged: true
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
- "443:443/tcp"
environment:
ServerIP: '10.0.10.11'
TZ: 'Europe/London'
WEBPASSWORD: '1234'
PIHOLE_DNS_: '10.0.0.1'
WEBTHEME: 'default-dark2'
SKIPGRAVITYONBOOT: 0
volumes:
- './etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
cap_add:
- NET_ADMIN
restart: unless-stopped
networks:
macvlan10:
ipv4_address: 10.0.10.11
networks:
macvlan10:
external:
name: macvlan10
在文件夹“pihole”中运行sudo docker-compose up -d
。 应该有什么错误
如果您在 Pihole GUI 中有一些数据库写入错误。 运行sudo chown -R www-data:pihole /home/pihole
,不在容器中。
如果您需要另一个实例...创建文件夹/home/piholeGuest
或/home/piholeIOT
或具有任何名称的文件夹并复制 previuos docker-compose.yml
文件。 更改Container_name, ServerIP, ipv4_address and password
,保留端口不变,因为使用不同的 IP 容器名称,所以没有 PORT 冲突。
就像使用自己的 IP 运行裸机实例一样:)
正如我所读到的,每个 LAN 端口的 mac 地址有一些限制,但我不确定如何,我在 Rock64 2gb 上运行 4 个实例,工作正常且快速。
您不会在路由器/FW 中看到 IP,但防火墙规则和其他东西可以正常工作,您只需要记住 IP,我有 pfSense。
如果升级 docker 容器,文件将被保留。
我不运行 Pihole 裸机,全部在 docker 容器中。
对我有用,我的方法:)
我不是专业人士,只是分享我的经验。
对不起,我很困惑,我不擅长解释。
希望我的一些信息能帮助你完成你的目标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.