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 上在线或离线工作。
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |