如何在 Mac OS X 10.10.3 Yosemite 上启用未绑定的 DNSSEC DNS 解析器

How To Enable Unbound DNSSEC DNS Resolver On Mac OS X 10.10.3 Yosemite

我正在使用 Mac OS X 10.10.3 Yosemite。最近从 Snow Leopard (10.6.8) 升级到 Yosemite。

步骤 A

在我的Mac书中,我登录了一个管理员类型的特权帐户。我从 Apple App Store 安装了最新的免费 XCode。用XCode,我还安装了Command Line Tools等

步骤 B

我从 https://brew.sh/ 安装了 Homebrew。这是我在终端中 运行 的命令行代码,来自 Homebrew 网站:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

上面的脚本检查是否存在各种必要的软件和设置,并显示(终端 window 内的信息和状态)需要获取或执行哪些其他命令或工具。我关注了那些。

步骤 C

完成 Homebrew 和相关安装步骤后,我通过终端中的命令行使用 brew 工具安装了 opensslunbound

brew help
brew update
brew install unbound openssl
sudo cp -fv /usr/local/opt/unbound/*.plist /Library/LaunchDaemons
sudo chown root /Library/LaunchDaemons/homebrew.mxcl.unbound.plist
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.unbound.plist
brew upgrade --all

步骤 D

我重新启动了我的 MacBook 一次,然后尝试了下面的 dig 命令。他们没有在 DNS 查询结果中显示 ad 标志,这表明 DNSSEC 身份验证的 DNS 解析仍然无法正常工作并被禁用!

dig @127.0.0.1 in TLSA _443._tcp.www.dnssec-validator.cz. +dnssec
dig @127.0.0.1 in TLSA _443._tcp.www.isc.org. +dnssec
dig @192.168.10.1 in TLSA _443._tcp.www.dnssec-validator.cz. +dnssec
dig @192.168.10.1 in TLSA _443._tcp.www.isc.org. +dnssec

192.168.10.1 是我的主要网络 interface/adapter 的(互联网路由器)网关,它连接到互联网。我的网络适配器当前使用的是 192.168.10.50,这是一个基于 DHCP 的动态(非固定)IP 地址。

不幸的是,https://unbound.net/ 的开发人员没有为 Mac OS X 提供独立的 Unbound .pkg.dmg 安装程序文件。他们不积极开发 DNSSEC-Trigger 应用程序。在 Snow Leopard 中,我只使用了 DNSSEC-Trigger 包的未绑定部分。按照他们的邮件列表存档中显示的提示,我能够禁用 DNSSEC-Trigger 部分,并保留未绑定部分 运行。这样,我就不需要安装任何 XCode 命令行工具或 Homebrew。

我现在应该怎么做才能让我的 Mac 图书上的所有应用程序都可以为所有 apps/clients 使用未绑定的 DNSSEC 解析器?我希望 Unbound 的解析器在 127.0.0.1 端口 53 上侦听 DNSSEC 和 DNS 查询。

这些步骤适用于 Mac OS X Yosemite MacBook.

我self-answering进行了一般性的阐述,让新手更清楚,如果你不是新手,那么请跳过对你来说不必要的部分。

如果您不想安装非常大的 XCode,请先参阅下面的步骤 E。否则,请从原始问题中的步骤开始。

步骤 E

E1

我自己在 Mac OS 的账户是 Erik-user。这是一个标准用户帐户,我通常将其用于一般用途。 但是 Erik 帐户用于管理目的。它是 "Admin" 类型,特权 用户帐户。我正在使用 Erik 帐户。

E2

要启用在 Finder 文件浏览器中显示隐藏文件,请在终端中使用以下命令:

defaults write com.apple.Finder AppleShowAllFiles TRUE
defaults write com.apple.finder AppleShowAllFiles TRUE

然后注销并重新登录您的 MacOS 用户帐户,或者重新启动 MacOS。现在 "Finder" 应该会以 [ | | ] 列模式显示所有文件和文件夹。

如果您已经安装了 "XCode" 和自制软件,则跳过步骤 E 的其余部分并从步骤 F 继续。

E3

如果您想避免安装 multi-gigabyte XCode,

  • 运行 终端内的这个命令:xcode-select --install 和一个新的 window 将会出现。其中,select 仅 "Command Line Tools" (CLT) option/portion,即使它建议您安装完整 XCode.
  • 然后验证 CLT 安装:所以在终端中,运行:xcode-select -p
    如果显示:/Library/Developer/CommandLineTools
    然后CLT安装成功。

Mac OS X Yosemite 允许您只安装 CLT 部分。一些以前的 Mac OS X 版本不允许没有 XCode.

的 CLT

还要检查 gcc 工具现在是否存在:在终端中,运行:gcc --version

E4

安装自制软件。在终端 运行:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

请参阅 https://brew.sh/ 网站了解实际和当前的 ruby 命令。
然后在终端中,运行 这些命令:

brew help
brew update
brew install unbound openssl

E5

sudo cp -fv /usr/local/opt/unbound/*.plist /Library/LaunchDaemons
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.unbound.plist
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.unbound.plist

如果您执行了步骤 E3 到 E5,则跳过步骤 F,并从步骤 G 开始执行。

步骤F

homebrew.mxcl.unbound.plist 文件(启动 Unbound DNS 服务器)特别需要 适当的所有权, 以便 Mac OS X's系统本身可以在引导或重新启动期间启动它。在终端中执行此命令:

sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.unbound.plist

注意:升级 Homebrew 应用后,如果 Unbound 在重启后无法启动,我们可能需要再次执行此命令。

步骤 G

Download Lingon 来自 SourceForge。安装它。启动 Lingon。

步骤 H

在 Lingon 中,在 USER DAEMONS 下找到 homebrew.mxcl.unbound
在 "What" 文本框中,它应该显示如下:
/usr/local/opt/unbound/sbin/unbound -d -c /usr/local/etc/unbound/unbound.conf
Select & 复制最后一部分“/usr/local/etc/unbound/unbound.conf”.

STEPs-I: (steps-i)
在终端 shell-window 中,输入并粘贴:
sudo nano /usr/local/etc/unbound/unbound.conf
或者,如果您已经安装了“Bluefish”(text-editor:http://sourceforge.net/projects/ bluefish/ ), 启动它并打开 "unbound.conf" 文件进行文本编辑。

STEPs-J:
unbound.conf 文件有很多页面的配置信息和 config-command 示例。
请参阅下面的代码,仅在 unbound.conf 文件底部或适当的部分添加 config-command 代码行 下面的代码。请确保不要在这些 command-lines 之前放置任何 # 符号。如果“#”符号放在开始处,那么它将禁用该 config-command 行,并将其变成一个简单的 "comment" 行。

    server:
        verbosity: 1
        num-threads: 2
        interface: 127.0.0.1
        interface: ::1
        port: 53
        do-ip4: yes
        do-ip6: yes
        do-udp: yes
        do-tcp: yes
        do-daemonize: yes
        #module-config: "[dns64] [validator] iterator"
        module-config: "validator iterator"
        auto-trust-anchor-file: "/usr/local/etc/unbound/root.key"
        #dlv-anchor-file: "/usr/local/etc/unbound/dlv.isc.org.key"

注意:我跳过了 DLV DNSSEC 的显示说明,因此在 "dlv-anchor-file" 行前面添加了 (shown-above) # 符号以禁用它。而且 "module-config" 行之一也被禁用,因为我现在不想进行 DNS64 相关解析。

STEPs-K:
并设置文件所有权sudo chown root /usr/local/etc/unbound/unbound.conf
并为不同的所有权设置文件 权限sudo chmod 644 /usr/local/etc/unbound/unbound.conf
有关更改文件权限和所有权的更多信息,请阅读或查看:http://ss64.com/osx/chown.html 和 http://ss64.com/osx/chmod.html
权限级别 4 = read,2 = write,1 = execute。 3 位数字代表 3 种类型的所有权:Owner-Group-Other.
通过使用 Finder 的 GUI 界面,您还可以设置文件的权限和所有权,而不是在终端中使用 command-lines:select 在 Finder 中创建一个文件,同时按下 Cmd+i 按钮,进入下方 "Sharing & Permissions" 部分,"Name" 列显示拥有所有权的 users/groups 列表,"Privilege" 列显示不同所有权的文件的 read/write 权限级别。更改为此处显示的推荐选项和偏好级别。
除了非常可靠的人和 only-this 计算机的核心 (operating-system) 系统组件,没有其他人(也没有其他实体)应该有能力(编辑和更改或)写入某些敏感文件和文件夹,这就是为什么我们需要在文件和文件夹上设置 "Permissions-level"。 “644”中的“6”(在 "chmod" command-line 中使用)表示 current-user(又名 "Me")的 permissions-level 和当前用户("Me") 拥有(“6”可以分解为4+2)读+写级别的权限。 “644”中间的“4”是user-type或user-group的权限,即group/type个用户有(“4”)读级别的权限。然后 right-most “644” 中的 “4” 是 Everyone/Other/World 用户的权限,他们具有(“4”)读取级别权限。

STEPs-L:
检查 "unbound.conf" 文件 配置 是否有任何错误,通过使用此命令,在终端中:
sudo /usr/local/opt/unbound/sbin/unbound-checkconf "/usr/local/etc/unbound/unbound.conf"

STEPs-M:
获取root.key(根锚点)&验证:

如果您没有 "unbound" DNS server/Resolver 的 "root.key" 文件,并且您想手动创建 "initial" root.key 自己创建文件并进行非常彻底的检查,如果您希望未绑定的 DNS 服务器守护程序使用完整的 root.key 代码和时间戳更新初始 root.key。

如果您没有(初始或工作中的)"root.key" 文件,并且您希望 "unbound-anchor" 工具快速为您创建它,请按照选项 2 中的说明进行操作。

如果您没有(初始或工作中的)"root.key" 文件,但您已从 IANA/ICANN 权威网站安全地获得 "icannbundle.pem" 文件,请按照选项 3 中的说明进行操作,并且您希望 "unbound-anchor" 工具非常安全地创建它(完全工作 root.key)。

如果您没有(初始或工作中的)"root.key" 文件,但您可以访问另一台 "safe" 或 "secured" 计算机,请按照选项 4 中的说明进行操作,在那里您可以从权威网站安全地获取文件,或者您可以从中复制一个有效的 "root.key" 文件,用于您的 MacOSX 计算机。

获取 root.key 并验证,选项 1:
普通用户可能想要 查看 或获取(或手动创建)正确的“initial” "root.key"(又名,初始 root-trust-anchor) 通过来自 IANA 权威网站的 HTTPS(加密 & non-eavesdropped & 安全)连接:root-anchors.xml,或者从ICANN权威网站获取初始锚点,然后普通用户必须compare+verify xml文件的内容代码,带有本地初始 root.key 文件。
单击上面的 xml URL-link,然后检查是否存在 web-browser 的 url-bar 中显示的 LOCK-icon(这表明存在 HTTPS 加密连接正在使用),还要检查 "DNSSEC-Validator"(和 "TLSA-Validator")状态图标的颜色,(它必须显示 green-colored KEY-icon 的图片)。
下载 xml 文件或 copy-paste xml 文件中显示的内容到 "root-anchors.xml" 文件中,然后 place/move 将其放在 [=373= 所在的同一文件夹中] 文件所在。
现在将 "root-anchors.xml" 文件复制到同一文件夹中,并将 "root-anchors Copy.xml" 文件重命名为 "root.key".
并编辑此 "root.key" 文件(使用 nano 或 Bluefish text-editor 应用程序)。而change/re-arrange现有XMLsyntax/format,转化为如下所示的格式“DS”代码行。确保 "root.key" 中的所有数字和哈希码与 IANA 权威网页 "root-anchors.xml" 文件中显示的数字和哈希码完全相同。 Format/Syntax 这两个文件会有所不同,但代码和哈希值必须相同。
当前(2015 年 6 月),根区域的 2010-2011 初始信任锚(初始 root.key)如下所示。

. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5

然后设置文件所有权:sudo chown root /usr/local/etc/unbound/root.key
并设置权限:sudo chmod 644 /usr/local/etc/unbound/root.key

上面“DS”code-line中显示的代码(也必须存在于 INITIAL "root.key" 文件中),被称为“初始锚点”。未绑定的服务器守护程序或 "unbound-anchor" 工具可以使用适当的代码和时间戳更新初始文件,使其具有完整的工作 root.key。

获取 root.key 并验证,选项 2:
获取+创建 "root.key" 文件的另一种快速(简短)方法(不是很 secure/trustworthy 的方法)是使用未绑定工具“unbound-anchor”,通过终端中的命令:
sudo /usr/local/opt/unbound/sbin/unbound-anchor -a "/usr/local/etc/unbound/root.key"
使用上述命令,unbound-anchor 工具通过使用内部证书从授权网站(如果找到较新版本)获取适当的代码或文件,然后创建 "root.key" 文件,其中包含工作代码和时间戳。
然后在其上设置文件所有权:sudo chown root /usr/local/etc/unbound/root.key
并设置权限:sudo chmod 644 /usr/local/etc/unbound/root.key

获取 root.key 并验证,选项 3:
如果“icannbundle.pem”文件是 supplied/used,此工具 (unbound-anchor) 还可以更安全地获取和创建工作 "root.key" .
所以1st从IANA权威网站https://www.iana.org[=474=安全获取icannbundle.pem文件](并确保您的 web-browser url-bar 显示 LOCK-icon & green-colored dnssec KEY-icon),并将 place/download pem 文件放入此目录位置: /usr/local/etc/unbound
然后设置文件所有权:sudo chown root /usr/local/etc/unbound/icannbundle.pem
并设置权限:sudo chmod 644 /usr/local/etc/unbound/icannbundle.pem
然后通过在终端中使用此命令非常安全地获取+创建工作 root.key:
sudo /usr/local/opt/unbound/sbin/unbound-anchor -a "/usr/local/etc/unbound/root.key" -c "/usr/local/etc/unbound/icannbundle.pem"
通过上述命令,unbound-anchor 工具使用内部证书从授权网站(如果找到较新版本)获取适当的代码或文件,然后使用 icannbundle.pem 密钥文件检查接收到的代码的真实性,然后创建 "root.key" 文件,其中包含工作代码和时间戳。
现在我们可以在 root.key 上设置文件所有权:sudo chown root /usr/local/etc/unbound/root.key
并设置权限:sudo chmod 644 /usr/local/etc/unbound/root.key
有关更多详细信息,请转到:https://unbound.net/documentation/howto_anchor.html 以及检查 https://unbound.net/documentation/unbound-anchor.html

获取 root.key 并验证,选项 4:
注意:User/visitor假设使用已经pre-setup安全的计算机和web-browser软件来"securely"obtain/download那些文件(root-anchors.xml, or, icannbundle.pem, etc) 来自 ICANN 或 IANA 权威网站。 Web-browser 软件,必须有 "DNSSEC-Validator"(和 "TLSA-Validator")(也称为 DNSSEC/TLSA-Validator)extension/addon(来自此 https://www.dnssec-validator.cz/ 网站),并且计算机还必须具有本地完整的 DNSSEC 支持的 DNS 服务器或解析器。
然后在这样的 web-browser 中,user/visitor 可以看到正确的 DNSSEC 和 DANE/TLSA 状态图标 (green-colored KEY-icon),对于每个访问的网站(适当 DNSSEC-Signed).
如果 "unbound" DNS Server/Resolver 用于 "SAFE" 和 "SECURED" 计算机,那么您可以 复制 "root.key"从它的文件,到你的 MacOSX 计算机,当你想避免进入权威网站 & 想避免非常彻底的检查,以及当你想快速配置第二台/其他计算机时。
同时加载这些 firefox extensions/addons,然后在 firefox 底部启用 "add-on bar"(类似于状态栏),以查看有关 web 服务器位置和反向 DNS 地址的更多信息,以及有关服务器 [=486= 的更多信息]证书:
CipherFox、Cert Viewer Plus、Calomel SSL Validation、HTTPS-Everywhere、WorldIP、Classic Theme Restorer 等

解绑结束"ROOT.KEY" 相关步骤。

STEPs-N:
在您的 Mac OS X 计算机中,转到“系统偏好设置” > 网络 > 选择每个 "WiFi"以及每个 "Ethernet" 网络接口 Card/Adapter,is/are 在您的 Apple MacBook 计算机中连接互联网 > goto/click "Advanced" > 转到 "DNS" 选项卡 > (write-down 哪个适配器有哪一组 DNS 服务器,然后,一个一个的适配器) 删除那里列出的 DNS-servers,并确保只有 一个DNS服务器是listed/specified:127.0.0.1

以上步骤将在 /etc/resolv.conf 文件中创建+添加 "nameserver 127.0.0.1" 代码。

STEPs-O: (steps-o)
如果您使用的是 10.10.3 或更早版本,请完全禁用 mDNS (mDNSResponder)。通过使用 "Lingon" 应用程序,查找 mDNS ("com.apple.mDNSResponder"),检查 Lingon 中的所有 4 个部分,特别是在 SYSTEM DAEMONS 下,单击每个部分旁边的文本 "Show",以查看完整列表.
mDNS 在 10.10.4 中是 re-included(通过 Apple 更新),所以如果您使用的是 10.10.4,那么暂时禁用它只是为了这些 steps-o.
如果它处于活动状态或在 10.10.3 或更早版本中找到,则 uncheck/unselect Lingon 中的 "Enabled" 选项禁用它,输入管理用户密码,save/ok.
当 mDNS 处于活动状态时,它开始解析 DNS 并且它还会自动执行其他一些 activity,(例如,发现和配置 UPnP IGD 和 NAT-PMP,等等)而不需要 computer-owner允许或不向计算机所有者显示任何信息(或 table 的信息),它到底在做什么。因此,mDNS 不会显示计算机的所有者、任何关于它允许哪些应用程序、可以做什么以及在您的计算机上或通过您的计算机进行的 port/traffic 活动等任何信息,none 会显示到计算机的所有者,所以 mDNS 不是一个应用程序,它没有为人们及其计算机的安全和隐私考虑到一些好的技术。 mDNS 本身也不支持完整的 DNSSEC,除非使用 at-least 一个 local/remote BIND 或 Unbound full dnssec dns 服务器。

STEPs-P:
如果您使用的是 10.10.3 或更早版本,则仅针对这些 steps-p 暂时禁用它。通过使用 Lingon,在 SYSTEM DAEMONS 下找到 "com.apple.networking.discoveryd"。 Uncheck/unselect Lingon 中的 "Enabled" 选项暂时禁用它,输入管理用户密码,save/ok。我们正在禁用它,以便它可以完全忘记从网络适配器的 DNS 设置中获得的 previous/old DNS 服务器(从这个阶段重新启动后它会忘记)。
Discoveryd 已从 10.10.4 中删除(通过 Apple 更新),因此如果您使用的是 10.10.4,则完全禁用它(如果仍然存在)。

STEPs-Q:
通过使用 Lingon,在 SYSTEM DAEMONS 下找到 "com.apple.dnsextd"。 Uncheck/unselectLingon中的"Enabled"选项改为disable/de-activate吧,进入administrative user pass,save/ok.

STEPs-R:
在终端中,运行:
dig @127.0.0.1 in TLSA _443._tcp.www.isc.org. +dnssec
然后打开"App Store"看看能不能拉取首页contents/items.

Reboot/restartMacOSX一次.

STEPs-S:
Steps-S-01:如果您使用的是 10.10.3 或更早版本,请启用 "discoveryd",现在,在本指令的这个阶段 steps-s。再次使用 Lingon,找到 "com.apple.networking.discoveryd"。 Select/checkmark "Enabled" 选项,输入administrative user pass,save/ok.
Discovery 已从 10.10.4 中删除(通过 Apple 更新),因此如果您使用的是 10.10.4,则仍然保持 "discoveryd" 禁用,如果仍然存在的话。

Steps-S-02:如果您使用的是 10.10.4 或更高版本,请立即在此阶段启用 "mDNS"。再次使用 Lingon,在 SYSTEM DAEMONS 下找到 "com.apple.mDNSResponder"。 Select/checkmark "Enabled" 选项,输入administrative user pass,save/ok.

Steps-S-03:在 10.10.3 中,许多应用程序在(如上所示)"discoveryd" 守护程序(又名 Discovery Daemon)允许和提供服务时使用 system/default DNS 解析& earlier Mac OS X, or DNS resolving service is allowed by mDNS daemon in 10.10.4 or later Mac OS X. 这两个守护进程中的任何一个都应该是现在能够学习并允许其他应用程序使用新的 DNSSEC DNS 服务器服务 运行ning at 127.0.0.1 port-53,这是在网络适配器的 DNS 设置中指定的(在此阶段重新启动后)。

STEPs-T:
在终端中,运行:
dig @127.0.0.1 in TLSA _443._tcp.www.isc.org. +dnssec
然后打开"App Store"看看能不能拉取首页contents/items.

Reboot/restart再来一次。

STEPs-U:
现在在终端中,运行 在 "dig" 命令下面,如果查询结果在标志中显示“ad”,check,状态显示 "NOERROR"。如果存在这些指示器,则完整的 dnssec dns 解析正在从本地 dnssec 解析器工作,running-at & listening-on 127.0.0.1 端口 53/DNS。 :)

dig @127.0.0.1 in TLSA _443._tcp.www.dnssec-validator.cz. +dnssec
dig @127.0.0.1 in TLSA _443._tcp.www.isc.org. +dnssec
dig @127.0.0.1 in TLSA _443._tcp.www.statdns.net. +dnssec
ping yahoo.com
nslookup yahoo.com

如果 "nslookup" 或 "ping" 有效,则表明默认 DNS 服务器正常工作。
从上面的 "dig" 命令中删除“@127.0.0.1”部分,并且 检查 如果结果相同(即 "ad" 标志仍然显示,如果挖掘结果仍然显示它 by-default 使用 127.0.0.1 作为 DNS 服务器),然后它表明,默认情况下本地 127.0.0.1 DNS 服务器被用作 system-wide DNS Server/Resolver (对于几乎所有 apps/tools),基于 dnssec 的解析也有效。

STEPs-V:
有些工具和应用程序并没有完全使用其他DNS服务器,它们包含自己内部的完整DNSSEC/DNS解析库和相关代码或包含部分library-codes,因此仅使用这些工具检查DNS是不够的。
您必须通过已知使用系统网络适配器的 DNS 服务器的其他应用程序(您日常使用或)进行检查。

因此您必须启动 Firefox 和 Apple App Store,并检查您是否可以正常查看和访问所有网站,因为这些应用程序将使用 "default"(又名,"system") DNS resolver/server,现在由我们 set-to 127.0.0.1,我们在网络适配器配置中指定。

STEPs-W:
基于防火墙的限制和帮助:
通过使用application-aware firewall + network port/packet控制防火墙,如果我们设置firewall-rules如下所示,那么整个系统都可以强制使用,只有一个完整的 dnssec DNS Server/Resolver 127.0.0.1 & 没有别的:
system-wide/global 防火墙规则 #1:只有 "unbound" 应用程序可以使用 TCP 或 UDP 连接与任何其他 DNS-Server 的端口 53/DNS 连接。
system-wide/global 防火墙规则#2:任何 app/software 不是-"unbound",只能使用一个 "unbound" DNS-Server running-at & listening-on 127.0.0.1 端口 53/DNS 使用 TCP 或 UDP 连接。 (因此 non-unbound app/software 的所有其他端口 53 流量都被丢弃)。

Steps-X & Steps-Y, 现在不存在了。

STEPs-Z:
Note/Disclaimer/References:
我遵循了(并从其他各种网站借用了说明和讨论评论)(以及此处的 copy-pasted 说明和评论,我稍作修改)。当相关内容首次被提及时,我在该 article/answer 页面中的段落下方显示了一些参考资料。因此,为了更详细地了解,请在 ddg/yahoo/bing/google 引擎中搜索 terms/words 取自此处。
不同的计算机可能并且很可能具有不同的版本、配置和组件。因此,在您自己的计算机上使用这些显示的任何说明之前,您必须研究并使用自己最好的教育知识和判断,风险自负。