【问题标题】:OSX Mavericks - BIND no longer installed... how to get local DNS server working?OSX Mavericks - BIND 不再安装...如何让本地 DNS 服务器正常工作?
【发布时间】:2013-11-01 12:26:50
【问题描述】:

我一直在 OSX 上使用 BIND 为我的本地开发机器提供本地 DNS 解析器,特别是为了方便虚拟机访问我的本地开发环境。

我愚蠢地决定在一夜之间升级到 OSX Mavericks,但似乎不再安装 BIND - 即使添加了命令行开发人员工具。

任何人对如何恢复此功能有建议,或者最新的 OSX 是否有替代 DNS 解决方案?

谢谢, 史蒂夫

【问题讨论】:

  • 感谢您发布此信息!我出于完全相同的原因使用它,却发现自己陷入了困境。
  • 很高兴能帮上忙——自制软件最终是我的选择(经过反复试验),但我敢肯定,我也可以从源代码中完成所有编译/制作/制作安装滑稽动作的繁琐工作(基本上 Homebrew 正在做什么......)
  • 我也有一些“反复试验”,所以我只是整理了一个小脚本,将其归结为一个命令——并且已经在我迄今为止尝试过的所有 Mac 上工作.我会把它作为答案发布在这里,以防它对其他人有帮助。

标签: macos dns bind osx-mavericks


【解决方案1】:

安装 Homebrew 并使用它来安装 bind 似乎是最好的途径。

很少有“陷阱”,所以我把这个 bash 脚本放在一起来简化它。

1) Install Homebrew.

2) 将此文件作为“ConfigureBrewBindOnOSX10_9.sh”保存到您的 Mac 并运行它 (sh ./ConfigureBrewBindOnOSX10_9.sh),或者手动逐行运行它的命令(如果您想随时查看更多详细信息。

ConfigureBrewBindOnOSX10_9.sh 的内容

#!/bin/bash

# Last Updated: Jun 17, 2014
# camden@arrowtech.net
#
# Run as root or sudo the commands that need it as you go.

# 1) USE HOMEBREW TO INSTALL BIND

brew install bind

# 2) CONFIGURE BIND

# Create a custom launch key for BIND

/usr/local/sbin/rndc-confgen > /etc/rndc.conf
head -n 6 /etc/rndc.conf > /etc/rndc.key

# Set up a basic named.conf file.
# You may need to replace 9.10.0-P2 with the current version number if it is out of date.

cat > /usr/local/homebrew/Cellar/bind/9.10.0-P2/etc/named.conf  <<END
//
// Include keys file
//
include "/etc/rndc.key";

// Declares control channels to be used by the rndc utility.
//
// It is recommended that 127.0.0.1 be the only address used.
// This also allows non-privileged users on the local host to manage
// your name server.

//
// Default controls
//
controls {
        inet 127.0.0.1 port 54 allow {any;}
        keys { "rndc-key"; };
};

options {
        directory "/var/named";
};

// 
// a caching only nameserver config
// 
zone "." IN {
    type hint;
    file "named.ca";
};

zone "localhost" IN {
    type master;
    file "localhost.zone";
    allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "named.local";
    allow-update { none; };
};

logging {
        category default {
                _default_log;
        };

        channel _default_log  {
                file "/Library/Logs/named.log";
                severity info;
                print-time yes;
        };
};

END

# Symlink Homebrew's named.conf to the typical /etc/ location. 
ln -s /usr/local/homebrew/Cellar/bind/9.10.0-P2/etc/named.conf /etc/named.conf 


# Create directory that bind expects to store zone files

mkdir /var/named

curl http://www.internic.net/domain/named.root > /var/named/named.ca


# 3) CREATE A LuanchDaemon FILE: 

cat > /System/Library/LaunchDaemons/org.isc.named.plist <<END
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>EnableTransactions</key>
        <true/>
        <key>Label</key>
        <string>org.isc.named</string>
        <key>OnDemand</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/local/sbin/named</string>
                <string>-f</string>
        </array>
        <key>ServiceIPC</key>
        <false/>
</dict>
</plist>
END

chown root:wheel /System/Library/LaunchDaemons/org.isc.named.plist 
chmod 644 /System/Library/LaunchDaemons/org.isc.named.plist 

# Shutdown bind (if it was running)
#launchctl unload /System/Library/LaunchDaemons/org.isc.named.plist


# Launch BIND and set it to start automatically on system reboot.
launchctl load -wF /System/Library/LaunchDaemons/org.isc.named.plist

如果您需要任何帮助,请告诉我,我已经在几台安静的机器上成功配置了它。

【讨论】:

  • 在 10.9.3 上完美运行。谢谢!
【解决方案2】:

您可以使用 Homebrew 安装绑定:http://brew.sh/

【讨论】:

  • 接受这一点,因为我最终使用了 Homebrew。请参阅上面的 cmets 了解我是如何使用它的,符号链接似乎比命名文件和 rndc 文件更好(可能)被未来的操作系统更新覆盖。
  • 我已经更新了 brew 文件以生成初始配置文件(以匹配 Mountain Lion 中的系统安装)以及包含一个已启动的 plist。虽然它还没有合并,你可以在这里看到更新的文件:github.com/mxcl/homebrew/pull/23598 使用brew edit bind 打开 BIND 的公式,然后复制我的分叉版本,然后用 brew 重新安装。
  • @jcoleman 我希望你的评论是一个我可以投票和加星的答案
  • @digitalextremist:谢谢!我已将其添加为答案。
【解决方案3】:

使用 Homebrew 安装 BIND9。当前的 brew 安装没有我想的那么完整,所以当我自己遇到这个问题时,我更新了 brew 文件以生成初始配置文件(以匹配 Mountain Lion 中的系统安装)以及包含一个 launchd列表。

虽然我的更改尚未合并,但您可以在此处查看更新的文件:github.com/mxcl/homebrew/pull/23598 使用brew edit bind 打开 BIND 公式,并复制到我的分叉版本,保存并使用 brew 重新安装 brew install bind

【讨论】:

  • 现在好像已经合并了。谢谢。
【解决方案4】:

Men & Mice 在以下位置免费提供 BIND 安装程序 http://support.menandmice.com/download/bind/macosx/10.9-Mavericks/

MacOS X 10.4 (PPC)、10.5/10.6 (x86) 和 10.7/10.8(和新)10.9 (x86_64)

这是我对 BIND 9.9.4 的基本“/etc/named.conf”文件的建议。 Internet 上的许多基本配置建议和 Linux/BSD 发行版中 BIND 安装的模板尚未更新为 BIND 中的最新更新,并且不是最佳的(尽管它们继续有效)

// BIND named.conf caching only DNS server
// configuration file for 
// BIND 9.7 and up
options {
    // set the DNS servers "home" directory
    // all files with relative path names
    // will be read or written from this
    // directory
    directory "/var/named";
    // disable query-logging on start
    // query-logging can be enabled using
    // "rndc querylog"
    querylog no;
};

// automatic empty zone for the "localhost" name
zone "localhost" IN {
   type master;
   database "_builtin empty . nothing.invalid.";
};

// logging template for a caching DNS server
logging {
   channel syslog { syslog daemon; severity info; };
   channel security { file "security.log" versions 10 size 50M; print-time yes; };
   channel query_log {
     file "query.log" versions 10 size 50M; severity debug; print-time yes;
   };
   category general       { syslog; };
   category security      { security; };
   category queries       { query_log; };
   category dnssec        { security; };
   category default       { syslog; };
   category resolver      { syslog; };
   category client        { syslog; };
   category query-errors  { query_log; };
   category edns-disabled { syslog; };
};

一些cmets:

  • rndc.key 不需要使用导入语句导入。如果没有专门的 rndc 配置,rndc.key 将默认在启动时被 named 读取
  • 如果没有定义“控制”块,则使用默认控制语句。默认控制配置为

    控制{ 网内 127.0.0.1 允许{本地主机; } 键 { rndc_key; }; };

  • 永远不要为缓存 DNS 服务器指定带有端口号的“查询源”(即使它被注释掉,我也不希望看到它,有人可能会启用它并造成安全漏洞),这是一种安全风险(它会禁用 UDP 端口随机化,因此可以轻松进行 DNS 缓存欺骗)

  • 无需为“0.0.127.in-addr.arpa.”指定一个空区域,因为它在自 9.5.x 版本以来的默认 BIND 配置中(在其他几个空区域中)就是这样
  • “localhost”的区域规范显示了如何定义一个不需要磁盘上额外区域文件的空区域
  • 为了缓存在 Internet DNS 中运行的 DNS 服务器,我强烈建议使用内置于 BIND 中的“root.hints”(根 DNS 服务器列表),不指定“提示”类型的区域。每次更新 BIND 程序时,都会更新“内置”根提示。
  • 日志记录语句提供了缓存 DNS 服务器感兴趣的日志记录类别列表。 “查询日志”(记录 DNS 服务器收到的所有查询)可能会损害繁忙的 DNS 服务器的性能(> 每秒 1000 次查询),它在选项块中被禁用,但可以使用“rndc querylog”启用(切换) ”。可以使用“rndc status”查看查询日志功能的状态(启用/禁用)

【讨论】:

  • menandmice 链接坏了,父目录没有超过 10.7 的任何东西
【解决方案5】:

试试这个http://blakeembrey.com/articles/local-development-with-dnsmasq/

安装小牛后对我来说效果很好。

【讨论】:

    【解决方案6】:

    Bind 已安装在 Mavericks 中。只是文件已移动。您可以在 /Library/Server/named/ 中找到所有区域文件。

    与 10.6.8 相比,Apple 实际上在实现更合规的实现方面做得很好。

    手动修改文件很容易。

    我的 0.02 美元

    LL

    【讨论】:

    • 该服务器文件夹仅在您安装了 OSX Server 应用程序后出现(或者如果您从以前的 OSX 安装中获得它)。如果您确实使用了 server.app,它会覆盖对配置文件的任何手动更改。
    【解决方案7】:

    我曾经使用在 MAC 上运行的本地 DNS 服务器,直到我在 DD-WRT 上发现了 DNSMasq

    我为我的 LAN 和 WIFI 设置了一个 DD-WRT 路由器,然后使用 DD-WRT 的 DNSMasq 功能列出所有应该映射到开发机器的整体。

    登录到您的 DD-WRT 路由器:

    在服务下,启用 DNSMasq

    在“其他 DNSMasq 选项”下列出您要屏蔽的每个条目:

    address=/[url]/[ip]
    

    例子:

    address=/www.dev.mysite.com/192.168.1.10
    address=/photos.dev.mysite.com/192.168.1.11
    address=/static.dev.mysite.com/192.168.1.12
    

    这几乎就像在路由器上为本地地址运行自己的 DNS 服务器,但没有开销。

    这样我可以通过局域网连接到本地开发机器,通过WIFI连接所有移动设备。

    优点:

    • 您的 MAC 上没有 DNS 服务器开销
    • 无需 DNS 配置 通过 DHCP 工作
    • 通过WIFI轻松连接移动设备进行开发 机器!
    • 通过路由器接口易于维护和配置

    【讨论】:

    • 我也使用 dnsmasq(使用 brew 安装),因为配置非常简单。在您的机器上运行它的唯一缺点是您网络上的其他计算机不会从中受益(可能打开端口?但如果您的 IP 是动态的......)。该路由器是搭载它的摇滚明星。当您不需要 BIND 的怪物时,DNSMasq 是一个非常好的工具。
    猜你喜欢
    • 2010-11-13
    • 2014-12-18
    • 2013-03-21
    • 2011-11-11
    • 2014-08-18
    • 2013-08-15
    • 2014-04-29
    • 2014-10-04
    • 2012-11-03
    相关资源
    最近更新 更多