我正在尝试创建一个本地 DNS在我的计算机上,这样我就可以使用 DNS 地址而不是 IP 本地访问它。我做的第一件事是在文件/etc/hosts
和上配置我的主机名/etc/init.d/hostname.sh
。
$ sudo vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 mynewhostname
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ sudo vi /etc/hostname
mynewhostname
然后我安装 avahi-daemon 作为 DNS 服务器:
sudo apt-get install avahi-daemon
重新启动系统后,我只能mynewhostname.local
从localhost
(仅限我自己的计算机)访问本地 DNS,本地网络上的其他计算机只能通过 IP 地址访问我的计算机,而不能通过 DNS 访问我的计算机有人知道为什么会发生这种情况吗?或者有什么其他方法可以创建从我的所有本地网络都可以看到本地 DNS?
答案1
avahi 使用 .local 域名来提供特殊服务,除了使用 mDNS 应用程序外,我无法让其他计算机通过网络使用它。
除了 /etc/hosts 文件之外,您还可以运行适当的 dns 服务器(例如 dnsmasq)来实现小型网络上主机名到 ip 地址的 dns 解析。
要将 dnsmasq 设置为您的域名解析器,请选择其他域名而不是 .local。例如 .home 或 .house 或除 .local 之外的任何域名。此域名仅在网络上有效。
将 dnsmasq 安装到中央“服务器”。在这种情况下,您的计算机:
sudo apt install dnsmasq
然后设置 dnsmasq:
sudo nano /etc/dnsmasq.conf
创建静态文件:
sudo rm /etc/resolv.conf
echo 'nameserver 127.0.0.1' | sudo tee /etc/resolv.conf
停止所有服务实例:
sudo killall dnsmasq
sudo service systemd-resolved stop
编辑 dnsmasq 配置:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo nano /etc/dnsmasq.conf
并添加以下内容
#Beginning of configuration
domain-needed
bogus-priv
no-resolv
interface=wlp2s0
#Use below nameservers to reach the internet
server=8.8.8.8
server=8.8.4.4
#use below line to point to the router address.
#dhcp-option=option:router,192.168.0.50
#use two lines below to resolve local domains (eg .home)
local=/home/
domain=home
然后重新启动 dnsmasq:
sudo service dnsmasq restart
如果你有防火墙,记得在防火墙中打开端口 53、67/udp、68/udp
然后编辑 hosts 文件:
sudo nano /etc/hosts
并粘贴到其中
. . .
127.0.0.1 localhost localhost.home
. . .
127.0.0.1 www.mysite1.home
127.0.0.1 mysite1.home
192.168.0.50 mysite1.home
192.168.0.50 mysite2.home
其中 192.168.0.50 是网络上的服务器计算机 IP 和 mysite.home 是正在服务器计算机上监听的服务*