通过Docker、Alpine Linux和Unbound实现DNS服务器托管

  试想一下,假如我们要搭建一个移动app,同时又没有充足的预算去购买软硬件资源的话,该怎么办呢?比方说,如果我们要在现有的基础设施上运行这个app,偏偏我们手头上只有一些老旧的低性能机器的话,有什么办法可以实现移动app的部署和运行?

  对于一些公司来说,他们的应用本身用户量不算多,固定用户大概也就几百人。这种情况下花大量的经费去购买资源肯定是不合算的,何况公司的团队也很小,难以维护大量的设施。公司没有足够的经费,但是又的确需要搭建专门的开发运维环境,这种例子在现实中比比皆是。

  条件稍微好点的创业型公司可以购买AWS的实例,也有的会买一些IP地址分配给服务器,但是也有一些小团队无法提供这些条件。据我所知,有的团队直接用的家用电脑来做服务器,IP地址也只有1个,只能靠搭建子网,用代理服务器来实现流量的重定向。在这种情况下就需要自定义DNS规则,将服务器主机名与内网IP一一匹配。

通过Docker, AlpineUnbound快速创建微型DNS服务器

  Docker问世之后,这种尴尬的局面即将结束,现在我们可以通过Docker,Alpine和Unbound快速实现DNS服务器托管了。首先,我们需要调用下面的Dockerfile脚本:

FROM alpine:3.3
MAINTAINER Philip Miglinci "[email protected]"
RUN apk add --update unbound ; \
    rm -rf /var/cache/apk/* ;
COPY unbound.conf /etc/unbound/unbound.conf
COPY root.hints /var/unbound/etc/root.hints
COPY root.key /var/unbound/etc/root.key
RUN unbound-checkconf
CMD ["unbound"]

大家可以戳这里下载上面的root.hints文件。

root.key表示的是上面我们下载的顶层DNS服务器:

. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5

在 unbnound.conf 文件里,大家可以创建自定义的DNS Entry,比如下面这段配置脚本就设置了A-record的记录值:

server:
  interface: 0.0.0.0
  verbosity: 1
  do-daemonize: no
  access-control: 0.0.0.0/0 allow
  do-ip4: yes
  do-ip6: no
  do-udp: yes
  do-tcp: no
  hide-identity: yes
  hide-version: yes
  harden-glue: yes
  harden-dnssec-stripped: yes
  use-caps-for-id: yes
  cache-min-ttl: 3600
  cache-max-ttl: 86400
  prefetch: yes
  num-threads: 4
  msg-cache-slabs: 8
  rrset-cache-slabs: 8
  infra-cache-slabs: 8
  key-cache-slabs: 8
  rrset-cache-size: 256m
  msg-cache-size: 128m
  so-rcvbuf: 1m
  private-address: 192.168.1.0/16
  unwanted-reply-threshold: 10000
  do-not-query-localhost: no
  val-clean-additional: yes
 
  local-zone: "pmig.at." static
  local-data: "pmig.at.  IN A 192.168.1.201"
 
forward-zone:
  name: "."
  forward-addr: 195.34.133.10
  forward-addr: 213.33.99.70
  forward-addr: 8.8.8.8
  forward-addr: 8.8.4.4

  我们还可以在文件里定义local-zone并设置A record的值,如果当前主机地址不在local zone里面,系统就会向其他DNS服务器发送请求,本例中我用的是当前ISP服务商的DNS,如果ISP无法提供DNS服务,系统就会启用Google DNS。

  另外说一句,大家如果要采用这种方式来实现DNS托管,还需要开放docker宿主机的UDP 53号端口,并在内网路由器中进行设置。

  上述配置完成后,我们的内网环境就建好了,大家可以不受限制地在局域网中搭建docker开发环境,这种办法既方便又省钱,可谓是一举多得。

时间: 2024-08-11 16:22:21

通过Docker、Alpine Linux和Unbound实现DNS服务器托管的相关文章

Docker inside Docker 基于 Alpine Linux

Study From https://hub.docker.com/_/docker/ 感慨一句 这些人真牛B .. 简单测试 拉取镜像 docker pull docker:dind 运行镜像 docker run -it --privileged --name dind -d docker:dind 查看镜像 [[email protected] ~]# docker exec -it some-docker sh / # docker version Client: Version: 18

docker --Docker微容器Alpine Linux

Alpine Linux的官网: http://www.alpinelinux.org/    #官方 https://pkgs.alpinelinux.org/packages  #官方提供的安装包查询 使用Docker创建容器时,基础镜像通常选择Ubuntu或Centos,不管哪个镜像的大小都在100MB以上. Alpine Linux是一个面向安全的轻型的Linux发行版. Alpine Linux采用了 musl libc 和 busybox以减小系统的体积和运行时资源消耗. 在保持瘦身

Alpine Linux

Alpine Linux Docker镜像基于Alpine Linux操作系统,后者是一个面向安全的轻型Linux发行版.不同于通常Linux发行版,Alpine Linux采用了musl libc和busybox以减小系统的体积和运行时资源消耗.在保持瘦身的同时,Alpine Linux还提供了自己的包管理工具apk,可以在其网站上查询,或者直接通过apk命令查询和安装.

Alpine Linux 本地源搭建

好吧,这个真不是事,因为最近在弄k8s+docker,一直想写博文记下来,一直没空弄,今天开始弄到alpine,那就从这个开始写把. 这里的alpine本地源搭建主要基于 http://www.w2bc.com/article/134015 alpine linux: 适合用来做Docker镜像.路由器.防火墙.VPNs.VoIP 盒子 以及服务器的操作系统,基于 uClibc 和 Busybox. 实验环境:centos 7 # yum install -y git nodejs # git 

Alpine Linux添加Let‘s Encrypt CA证书或者自签CA证书

Alpine Linux添加Let's Encrypt CA证书或者自签CA证书 [toc] 1. 用docker进行查看 进入容器,docker run -it alpine:latest /bin/sh 安装curl,apk --no-cache add curl 对比发现curl依赖ca-certificates, 网上查到update-ca-certificates命令为更新系统ca证书, 2. 添加CA证书 经过操作总结,发现有2种方式添加ca证书至系统内,以下示例: 2.1 放至目录

更新Alpine Linux源 sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories apk add xxx

更新Alpine Linux源 国内镜像源 清华TUNA镜像源:https://mirror.tuna.tsinghua.edu.cn/alpine/中科大镜像源:http://mirrors.ustc.edu.cn/alpine/阿里云镜像源:http://mirrors.aliyun.com/alpine/ 如何配置软件源 可以使用如下命令: sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositori

Alpine Linux 使用简介

目录 一:Alpine Linux开启SSH远程登陆 1.简介: 2.配置 3.配置命令 4.重启服务 二:Alpine Linux源管理 1.简介 2.国内源简介: 3.配置: 3.我的配置: 三:Alpine Linux 包管理 1.简介 2.apk update 3.apk search 4.apk add 5.apk info 6.apk upgrade 7.apk del 四:Alpine Linux服务管理 1.简介 2.rc-update 3.rc-status 4.rc-serv

Alpine Linux 常用命令

一:Alpine Linux开启SSH远程登陆 1.简介: 最重要的一个服务了,远程登陆需要用它,文件传输需要用它,必备功能.不管你是在实体机上跑,虚拟机上跑,docker里面跑,这个都是必须的. 2.配置 配置文件位置:/etc/ssh/sshd_config 配置文件选项:#PermitRootLogin prohibit-password 修改为:PermitRootLogin yes 3.配置命令 看不懂上面的,直接用下面这句. sed -i "s/#PermitRootLogin.*/

DOCKER 无法获取使用宿主机DNS 的原因,解决方法

今天在公司服务器上部署项目,遇到一个大坑.接口怎么请求都不同,宿主机DNS已经改了.宿主可以请求,找了半天,原来是DOCKER 没有获取到主机的DNS 进去DOCKER解析不了域名 指定DNS 启动也有警告 [[email protected] ~]# docker run -itd -p 8050:8060 --dns 8.8.8.8 --dns 114.114.114.114 39d515903295 WARNING: IPv4 forwarding is disabled. Network