天空 Blond - Windows
type: channel
link: https://skyblond.info/tag/Windows/
items: 【歪门邪道】使用Acrylic DNS Proxy搭建Windows上的本地DNS服务器

【歪门邪道】使用Acrylic DNS Proxy搭建Windows上的本地DNS服务器
type: item
date: 2021-05-21T21:57:00+08:00
description: 本文将记述使用Acrylic DNS Proxy搭建运行在Windows的本地DNS服务器的过程。昨天开始做计算机网络的实验了，其中有一块就是配置一个DNS服务器。后来经过一番操作，我发现由于微软的一些原因（似乎在使用M1芯片的Mac上也有类似的问题），使得Docker这些依赖虚拟化的服务在运行时需要操作系统提供一个网络接入服务，也就是ShareAccess服务，这个服务会默认监听0.0.0.0:53，为虚拟机提供默认DNS。尝试了诸多方法之后，我遗憾的发现这东西并不能关，除非我把Docker和Hyper-V那些全都卸了。但是好消息是我可以指定我自己的DNS服务器监听某一个具体的ip，例如0.0.0.0:53被占用了，可是127.0.0.1:53还是可以用的。于是找到很久之前配置的dnsforwarded，改了配置，遂全部解决。但是当我在Github找到这个repo时，发现它的最后更新时间是2017年，对于拥有版本号洁癖的我来说，我还是希望用上最新的DNS服务器。于是我想到了其他的代替品，比如dnsmasq和bind，但是dnsmasq不提供原生Windows二进制文件，对于笔记本来说Docker未免有些费电；而bind虽然有windows二进制文件，可它毕竟是能够担起世界级DNS根服务器的软件，配置起来太过复杂，而且用于本地DNS来说，或许有些杀鸡用宰牛刀了（其实就是懒，不想配置）。于是搜索来搜索去，我找到了Acrylic DNS Proxy，它本身的定位就是local DNS proxy for Windows，所以拿来做本地DNS最合适不过了。至于软件的安装过程我就不再赘述了，这里主要提供一下我的配置文件，其中提示信息已经翻译成中文，有些不熟悉的名字我尽可能多方搜索以确定其常用且无歧义的名字，对于没有把握的名字我将保留英文单词。; ; ACRYLIC DNS PROXY需要重新启动才可以使对本文件的修改生效。 ; [GlobalSection] ; ; 第一DNS服务器的IP地址。可以使用IPv4的点分十进制写法，或IPv6的冒分十六进制写法。 ; ; 默认值为谷歌的公共DNS服务器：8.8.8.8。 ; PrimaryServerAddress=8.8.8.8 ; ; 第一DNS服务器的TCP/UDP端口，默认的标准端口号是53。 ; 仅在第一DNS服务器使用非标准DNS服务器或非TCP/UDP协议时修改此值，例如DNS-over-HTTPS的标准端口号为443。 ; PrimaryServerPort=53 ; ; 第一DNS服务器使用的协议。 ; ; 当前支持的协议有UDP、TCP、SOCKS5和DOH（DNS-over-HTTPS）。 ; ; 使用UDP协议时，Acrylic根据RFC 5625，使用UDP或者TCP转发DNS请求。 ; ; 使用TCP协议时，Acrylic仅使用TCP转发DNS请求。由于每次请求时建立TCP链接需要一定时间，并且单位时间内可以建立的TCP ; 链接数量受限于操作系统，因此这个协议应当仅在UDP协议不可用时使用。 ; ; 使用SOCKS5协议时，Acrylic根据RFC 1928，使用SOCKS 5代理作为中介，向第一DNS服务器转发DNS请求。 ; 目前只支持无需验证的SOCKS 5协议（NO AUTHENTICATION REQUIRED method for SOCKS 5）。 ; ; 使用DOH协议时，Acrylic使用DNS-over-HTTPS向第一DNS服务器转发DNS请求，DOH协议将DNS查询通过HTTPS发出，因此能够提高用户的隐私和安全。 ; 因为该协议能够防止监听与中间人攻击。但请务必知晓：使用DNS-over-HTTPS时，操作系统可使用的加密算法（例如TLS）必须至少有一个被第一DNS服 ; 务器所接受，并且这通常不是根据操作系统与DNS服务器的组合所决定的。例如老旧的Windows版本可能与使用TLS 1.1或1.2的DNS服务器难以建立连接 ; 因此必须安装一些特殊的升级。 ; PrimaryServerProtocol=UDP ; ; 使用DNS-over-HTTPS时，需要指定第一DNS服务器的查询路径（query path of your primary DNS server）。 ; PrimaryServerDoHProtocolPath= ; ; 使用DNS-over-HTTPS时，需要指定第一DNS服务器的主机名（host name of your primary DNS server）。 ; PrimaryServerDoHProtocolHost= ; ; 使用DNS-over-HTTPS时，可以指定Acrylic使用系统代理（Sys…