离线时如何在 Snow Leopard 上使用我的 localhost DNS 服务器

Ros*_*ner 5 networking mac dns

我已按照这些说明在我的 mac 上设置本地 DNS 服务器,并使用它在 localhost 上服务器通配符子域。这是一件非常好的事情:

http://mikeferrier.ca/2011/04/04/setting-up-wildcard-dns-on-localhost-domains-on-osx/

但是,一个弱点是:我有时会尝试离线工作,并且只有当您与 DNS 服务器列表中的 127.0.0.1 建立实时连接时,才会查询本地 BIND 实例。

有没有办法离线实现这种效果?

小智 0

我也希望bind9在离线时也能工作。不幸的是,当所有网卡都断开连接时,该/etc/resolver/*解决方案不起作用。

但我找到了这个很好的答案。唯一的缺点是它是基于运行时的,例如配置无法在重新启动后保存。

为了解决这个问题,我引入了 simple/Library/LaunchDaemon来在操作系统启动期间对其进行管理。

外壳脚本:

#!/bin/bash

LOG="/opt/local/var/log/local-ns.log"

function register() {
    cat <<EOF | /usr/sbin/scutil
d.init
d.add ServerAddresses * 127.0.0.1
d.add SupplementalMatchDomains * <YOUR-DOMAIN-HERE>
set State:/Network/Service/<YOUR-DOMAIN-HERE>/DNS
EOF
    scutilret=$?
    echo "$0[$$]" `date` "scutilret:$scutilret" >> "$LOG"
}

echo "Starting registering " `date` > "$LOG"

for (( i = 0; i < 10; i++ )); do
    register
    scutil --dns 2>&1 >> "$LOG"
    cnt=`scutil --dns | grep 127.0.0.1 | wc -l`
    if [ "$cnt" -ne 0 ]; then
        echo "DNS management done" >> "$LOG"
        break;
    fi
    echo "DNS not ready yet" >> "$LOG"
    echo "iteration $i" >> "$LOG"
    /bin/sleep 2
done

echo "DONE" >> "$LOG"

exit 0
Run Code Online (Sandbox Code Playgroud)

当脚本启动时,DNS 子系统并未立即准备就绪,因此检查需要进行 10 次尝试。和/Library/LaunchDaemons/YOUR-LABEL-HERE.plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>YOUR-LABEL-HERE</string>
    <key>Program</key>
    <string>/bin/bash</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>/opt/local/root/local-ns.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true />
    <key>LaunchOnlyOnce</key>
    <true />
    <key>Disabled</key>
    <false />
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false />
    </dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

可在 macOS Catalina 上在线或离线工作。