通过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 "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开发环境,这种办法既方便又省钱,可谓是一举多得。

时间: 2024-09-13 01:40:05

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

在 Ubuntu 中用 Docker 管理 Linux Container 容器

在 Ubuntu 中用 Docker 管理 Linux Container 容器 当前,完全硬件虚拟化技术(KVM.Xen.Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等.有时候对用户来说,完全的硬件虚拟化并不是最好的选择. 一种替代方案是使用轻量级虚拟化技术 -- 所谓的 LinuX Container 容器 (LXC),它提供的是系统级虚拟化.与跑虚拟机相比,LXC 可以在一个轻量级沙箱容器里面跑多个 Linux

Alpine Linux:从漏洞发现到代码执行

本文讲的是Alpine Linux:从漏洞发现到代码执行, 我最近在Alpine Linux的软件包管理器中发现了两个关键的漏洞,分别是CVE-2017-9669和CVE-2017-9671,如果你正在使用Alpine Linux,这两个漏洞可能会导致攻击者在你的计算机上执行恶意代码. Alpine Linux是一个面向安全应用的轻量级Linux发行版.它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk.Alpine Linux的内核都

Alpine Linux 之漏洞利用(二):软件包管理器漏洞分析

本文讲的是Alpine Linux 之漏洞利用(二):软件包管理器漏洞分析, 在Alpine Linux 漏洞利用的第一部分<Alpine Linux:从漏洞发现到代码执行>,我对Alpine Linux的软件包管理器中的两个关键漏洞, CVE-2017-9669和CVE-2017-9671做了深入的分析. 今天这部分,我会对这两个漏洞的发现过程进行详细描述,并演示如何实现远程执行代码. 第一步是把部署环境中导致 漏洞的所有内容都进行复制,由于这是一个可用性测试(sanity check),所

Alpine Linux 3.6.1 发布,轻量级 Linux 发行版

Alpine Linux 3.6.1 已发布.Alpine Linux 是由社区开发的操作系统,它面向 x86 路由器.防火墙.虚拟专用网.IP电话盒及服务器而设计.它在设计时就贯彻了安全的理念,包含了一些主动安全特性如 PaX 和 SSP ,它们能防止软件中的漏洞被敌手加以利用.该系统采用的 C 语言库是 musl ,基础工具则都在 BusyBox 中.它们在嵌入式系统中很常见,它们比 GNU/Linux 系统中的工具要小. 此次更新进行了大量 Bug 修复,相关内容: Bug #6668:

域名解析方法及在Linux系统上架设DNS服务器

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;  DNS是域名系统Domain Name System的缩写,是一种组织域层次结构的计算机和网络服务命名系统,当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与此名称相关的IP地址信息.今天,我就给大家介绍一下目前常见的域名解析方法以及如何在Linux系统上架设DNS服务器,希望能够给各位朋友的DNS学习带来一些帮助. 一.域名解析的方法 1.最早的

Alpine Linux 3.4.4 发布,轻量级发行版

Alpine Linux 3.4.4 发布了. Alpine Linux是由社区开发的操作系统,它面向x86路由器.防火墙.虚拟专用网.IP电话盒及服务器而设计.它在设计时就贯彻了安全的理念,包含了一些主动 安全特性如PaX和SSP,它们能防止软件中的漏洞被敌手加以利用.该系统采用的C语言库是musl,基础工具则都在BusyBox中.它们在嵌入式系统 中很常见,它们比GNU/Linux系统中的工具要小. 改进内容: This is a bugfix release of the v3.4 mus

Docker alpine构建nginx环境的教程

Docker alpine构建nginx 1,pull一个基础镜像 至于如何pull自己的镜像和构建镜像可以参考Docker Hub简单使用也可以pull本章中的docker hub的镜像 [root@gitlab conf]# docker pull marksugar/alpine Using default tag: latest latest: Pulling from marksugar/alpine e110a4a17941: Already exists 92c6475c18dd:

Linux操作系统下配置DNS服务器的方法介绍

有两台邮件服务器分别为192.168.1.1(windows下主机名为b.test.cn)和192.168.1.3(linux下主机名为a.test.com). 在linux下配置DNS服务器,下面是配置过程中设置过的一些文件, /etc/hosts 文件的具体内容如下: # Do not remove the following line, or various programs# that require network functionality will fail.127.0.0.1 l

在Linux下轻松搭建DNS服务器

经常上网的朋友可能经常去新浪.搜狐等大型网站,只需要在浏览器输入它们的网址即可实现访问,看似非常简单,但是从技术层面来讲,却包含了一个复杂的过程:在访问网页的时候,首先在浏览器输入网站域名,接着浏览器会根据本机DNS服务器的设置将输入的网站域名转换为对应的IP地址,然后才去这个IP对应的服务器上请求数据,最后将请求得到的数据通过浏览器显示出来.这个过程最主要的一个环节就是从域名到IP地址的转换,而这个工作就是靠DNS服务器实现的. 一. DNS服务概述 DNS是Domain Name Syste