在 Ubuntu Desktop 主机上的 vbox6.1 中。我有一个软件要求,即具有互联网访问权限的主机专用网络适配器。我能够配置它,并且可以成功地从主机 ping 客户机,并且客户机可以通过主机专用适配器访问互联网。
我还有一个问题,本地 DNS 解析。
为了让客人能够访问互联网,我必须使用 ip MASQUERADE 从 vboxnet0 地址到主机的主网络接口。
这导致了一个副作用。尽管客户机已配置并正确运行 bind9 服务器,但主机只能解析来自客户机的 IP 地址,而不能解析域名。例如
我可以使用以下方式访问访客服务器控制面板:
https://192.168.64.87:3080
但我无法使用以下方式访问服务器控制面板:
https://test.example.com:3080
主机已安装 resolvconf,但似乎 ip Masquerade 导致主机/etc/hosts
文件的内容跳过/忽略并尝试直接从公共 DNS 服务器解析域。
当我使用dig example.com
它时,显示我的生产服务器的 DNS 正在被用来尝试解析生产服务器上不存在的 test.example.com。
我如何强制主机的 resolvconf(或其他工具)解析客户服务器上的域名,以便我可以在主机的 Web 浏览器中查看它们?
进度更新
我的主机的 /etc/resolv.conf 有:
nameserver 192.168.61.2
nameserver 127.0.0.1
search hitronhub.home
其中 192.168.61.2 是 vboxnet0 dhcp 服务器的 ip 地址
我还进行了一些研究,并安装了 dnsmasq 作为这里推荐
现在,当我运行dig example.com
它时,它不会显示我的生产名称服务器。它没有显示任何名称服务器并且失败。(我还没有完全配置 dnsmasq)
任何建议均值得赞赏
答案1
我找到了一个解决方案。这里的关键是正确配置 dnsmasq 以识别我的 vbox 客户机的静态 IP 以进行域解析。
我发现清楚教程在这里,但我做了一些小修改,因此我将在下面展示我的步骤,以供其他人参考。
禁用并停止 systemd 已解决
$ sudo systemctl disable systemd-resolved
$ sudo systemctl stop systemd-resolved删除符号链接
/etc/resolv.conf
并删除文件$ ls -lh /etc/resolv.conf $ sudo rm /etc/resolv.conf
etc/resolv.conf
使用以下值创建一个新的 / :$ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf' #(主机域名解析)
$ sudo bash -c 'echo "nameserver 1.1.1.1" >> /etc/resolv.conf' #(外部互联网的公共 DNS 服务器 ip)
$ sudo bash -c 'echo "nameserver 192.168.64.87" >> /etc/resolv.conf' #(virtualbox 客户机静态 ip 地址)
安装 dnsmasq
$ sudo apt 安装 dnsmasq
将 .test 添加到 dnsmasq 配置文件:
$ sudo bash -c 'echo "地址=/.test/192.168.64.87" >> /etc/dnsmasq.conf'
笔记:开发需要通配符域名解析的 wordpress 多站点的人员可以使用:
$ sudo bash -c 'echo "address=/example.test/192.168.64.87" >> /etc/dnsmasq.conf'
为客户的静态 IP 地址创建目录解析器:
$sudo mkdir -v /etc/resolver && sudo bash -c 'echo "名称服务器 192.168.64.87" > /etc/resolver/test'
重新启动 dnsmasq 和网络管理器
$ sudo systemctl 重新启动 dnsmasq $ sudo systemctl 重新启动网络管理器
测试你的 dnsmasq 设置
a.) 打开浏览器并确认您仍然可以访问外部互联网
b.) 运行dig example.test
你应该能够看到你的客户的静态 IP 地址
c.) 在主机的浏览器中打开 example.test
就是这样。