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

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


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

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

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

 

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

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

FROM alpine:3.3
MAINTAINER Philip Miglinci "p.miglinci@gmail.com"
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开发环境,这种办法既方便又省钱,可谓是一举多得。

目录
相关文章
|
6月前
|
网络协议
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
|
8月前
|
人工智能 安全 Linux
Alpine Linux设定指定的软件包安装源
以上就是如何为Alpine Linux设置特定的软件包的安装源的全部流程。这个过程非常简洁、明了,希望你在使用过程中能够找到乐趣。这个过程不仅可以提供你需要的软件,还可以根据你的网络条件和地域性需求进行调整,使你的Alpine Linux系统达到最佳性能。
878 24
|
8月前
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
2230 0
|
10月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
12月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
613 11
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
397 6
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
550 24
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
262 4
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
监控 网络协议 安全
DNS服务器故障不容小觑,从应急视角谈DNS架构
DNS服务器故障不容小觑,从应急视角谈DNS架构
323 4

相关产品

  • 云解析DNS