首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pi-hole和docker运行多个DNS服务器

使用pi-hole和docker运行多个DNS服务器
EN

Stack Overflow用户
提问于 2021-01-29 00:50:39
回答 1查看 1.4K关注 0票数 1

设置

我有一个Unifi Home设置与多个Wifi网络设置和一个RaspberryPi与拱门,以照顾域名系统的过滤。

目标

我想在树莓派上运行多个DNS服务器,并将不同的Wifi定向到不同的DNS。为此,我需要为不同的DNS容器提供不同的IP地址。

到目前为止,我所做的

在尝试了systemd和几种不同的docker解决方案后,我决定将Pi-Hole与cloudflared结合使用。

运行多个pi-hole并不是docker-compose的问题,但我对合适的(docker)网络了解太少,无法弄清楚如何将不同的、网络可达的ip地址获取到不同的容器。

下面是一组cloudflare +pi-hole的docker-compose文件:

代码语言:javascript
复制
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是分配给RaspberryPi的ip。

我只能为路由器中的DNS指定IP,而不能为容器重新映射不同的端口。

附言:我知道密码不是很理想,但这是改天的问题:

问题

如何在同一台计算机上运行此设置的副本而不使两个do相互干扰,以及如何到达具有不同IP的单独的pi-hole?

编辑1

我发现在docker中有一种叫做macvlan的东西,它将docker容器直接链接到网络。这似乎也适用于pi-hole (macvlan + pi-hole),只是我还没有成功。有没有人看到这种方法在概念上的问题?

EN

回答 1

Stack Overflow用户

发布于 2021-03-02 05:03:36

新手来了,英语也不好。

我为此挣扎了整整两个星期,但最终还是成功地用docker和macvlan运行了多个Pi-hole实例。

我的测试硬件橙色pi PC 512mb,16 PC SD卡。操作系统: Armbian 21.02.2 Buster with Linux 5.10.16-sunxi

我在不同的vlan上运行dockers。

创建docker VLAN:

代码语言:javascript
复制
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 insert:-这只是我的工作样本,你可以使用你的。

代码语言:javascript
复制
  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或任何名称的文件夹,并复制以前的docker-compose.yml文件。更改Container_name, ServerIP, ipv4_address and password,保持端口不变,因为正在使用不同的IP和容器名称,所以没有端口冲突。

这就像是用自己的IP运行裸机实例:)

正如我读到的,每个局域网端口的mac地址有一些限制,但我不确定如何,我在2 2gb的Rock64上运行了4个实例,工作得又好又快。

你不会在你的路由器/防火墙中看到IP,但防火墙规则和其他东西会工作得很好,你只需要记住IP,我有pfSense。

如果升级docker container,则会保留文件。

我不运行Pihole裸机,全部在码头容器中运行。

对我很有效,我的方法:)

我不是专业人士,只是分享一下我的经验。

对不起,让我困惑了,我不擅长解释。

希望我的一些信息能帮助你实现你的目标。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65941599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档