介绍
我有一个运行 Rasbian 的 Raspberry Pi,连接到基于 Windows Server 的网络。这是一个企业(教育)网络,拥有自己的内部网,由所有连接的计算系统组成,并且还有一个可公开访问的网站。出于此问题的目的,该域将被命名为exampledomain.com
.
在此 Intranet 上,连接的 Windows 计算机可以通过网络适配器上的配置将 DNS 后缀附加到其主机名(列出的步骤这里)。这将允许具有该名称的计算机可以通过本地网络或从本地网络comp1
进行寻址(即列为特定于连接的后缀)。comp1
comp1.ns.exampledomain.com
ipconfig
ns.exampledomain.com
问题
comppi
我有一个 Raspberry Pi 2,它具有我需要通过地址访问的主机名comppi.ns.exampledomain.com
。目前可以通过主机名comppi
、使用comppi.local
或 IP 地址访问 Pi 。
通过主机名访问是通过使用 samba 将 samba 安装到 RPi 来实现的sudo apt-get -y install samba
。这是avahi
在 RPi 上设置的简单方法。
我无法访问所涉及的 DHCP/DNS 服务器。但我应该不需要就能达到这个结果。 (因为它可以在 Windows 计算机上完成,无需)
我还会注意到,/etc/dhcp/dhclient.conf
即使在阅读了相关man
页面之后,我对该文件的理解也很差。我可能错过了一些微不足道的事情。
目前的尝试
- 尝试直接将主机名更改为
comppi.ns.exampledomain.com
以下文件中的所有位置。 - 尝试将主机名行更改为
send host-name = "comppi.ns.exampledomain.com"
in/etc/dhcp/dhclient.conf
。 - 尝试将线路添加
append domain-name = "ns.exampledomain.com"
到/etc/dhcp/dhclient.conf
用户 Jordan overaskubuntu.com。不过,我认为这只是ns.exampledomain.com
在失败时添加到传出主机名解析中。
技术信息
- 操作系统:Raspbian GNU/Linux 8 (杰西)(注:这是精简版)
- 树莓派:树莓派2
- 主机名:comppi
文件
内容/etc/network/interfaces
不变。
内容/etc/hostname
:
comppi
内容/etc/hosts
:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 comppi comppi.ns.exampledomain.com
内容/etc/dhcp/dhclient.conf
:
# Configuration file for /sbin/dhclient, which is included in Debian's
# dhcp3-client package.
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
#send host-name = gethostname();
send host-name = "comppi"
append domain-name = "ns.exampledomain.com"
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
答案1
当 Windows 客户端作为 Active Directory 的一部分时,会自动在 DNS 中注册其名称(在您的情况下似乎是这样)。这使用称为动态 DNS (DDNS) 的过程。使用 Windows DDNS 注册 Linux 计算机的最简单方法是使用 Samba 将 Linux 计算机加入 Windows 域。这需要加入 Windows 域的权限。互联网上有很多指南可以为您详细介绍如何从 linux 加入 Windows 域,但这里是简要步骤:
首先在/etc/krb5.conf中添加域名信息
[realms]
NS.EXAMPLEDOMAIN.COM = {
}
[domain_realm]
.ns.exampledomain.com = NS.EXAMPLEDOMAIN.COM
ns.exampledomain.com = NS.EXAMPLEDOMAIN.COM
然后配置 smb.conf 进行域加入
[global]
workgroup = EXAMPLEDOMAIN
realm = NS.EXAMPLEDOMAIN.COM
security = ADS
然后运行net ads join -U windowsuser
,其中 windowsuser 是有权加入域的任何用户。
这会将您的计算机加入 Windows 域,同时在 Windows DNS 中注册计算机的 IP 地址,从而允许其他人使用comppi.ns.exampledomain.com
和comppi
名称访问您的计算机
答案2
因此,要解决comppi.ns.exampledomain.com
网络上的问题,您需要 DHCP 服务器管理员的帮助,原因如下。在这个答案的底部Linux选项
Windows环境
除非安装了其他软件,否则 LINUX 客户端无法识别 AD (Active Directory)。因此,在正确配置的Windows环境下必须依靠DHCP服务器来更新DNS服务器。
对于要在本地 DNS 服务器上注册主机名的 DHCP 服务器,必须具有动态更新授权。此设置不是用户可配置的,您的网络管理员应该修改它,是的,您将需要它才能工作。
除了来自 DHCP 服务器的 IP 地址外,您还会收到该网络的域后缀;该后缀由您的主机存储,稍后将使用。请注意,除非您的 DHCP 服务器和 DNS 服务器位于同一机器上,否则动态更新将要求 DHCP 服务器通过您的 DNS 服务器进行身份验证。
此时 DHCP 服务器应该为您完成 DNS 网络注册。它不受客户端主机控制,但您的主机必须请求这样做。目前 Debian 自动请求 DNS 注册。
在 Windows 上,您可以使用 强制重新注册ipconfig /registernds
。
在本地网络上,主机可以使用两种“合法”名称和方法找到您:纯主机名和主机名加域。后缀“ .local
”经常被忽略,用于避免添加另一个后缀。
1第一种方法不使用 DNS:使用 LAN 广播主机询问“谁知道这个名字”,目标主机将回答 MAC 地址和 IP。
每隔几秒钟,主机就会广播他们的名字,以便共享 LAN 的其他人知道他们的存在。通常,此广播会被交换机/路由器过滤,因此除非您位于同一交换机上,否则很难使其可靠。
2第二种方法是使用“普通”主机名以及带有 LAN 后缀的主机名向 LAN 指定的 DNS 服务器发送请求。
家庭路由器和 Intranet 不是公共的,因此在默认 DNS 服务器上使用通用 DNS(8.8.8.8、8.8.4.4)根本无法解析您的本地主机。每个具有 DHCP 分配地址的本地主机都会被您的路由器“记住”。
在您的主机上,您可以在解析 DNS 地址时添加一个或多个所需的后缀(使用 Linuxhost
或dig
Windows 上的nslookup
)
我建议正确设置您的主机名。 On/etc/hostname
和 Also on /etc/hosts
(对于 ::1 和 127.0.0.1),然后运行. /etc/init.d/hostname.sh
.
从 Linux 手动更新 DNS 服务器
还有另一种选择,只需要客户端手动配合。使用一个鲜为人知的实用程序nsupdate。这将添加您在有效 DNS 服务器上注册所需的功能。它遵循 RFC 发布的与 DNS 相关的协议。
例子:
$ nsupdate -v
>delete video.domain.com. a
>delete git.domain.com. a
>delete gateway.domain.com. a
>add video.domain.com. 600 a 192.168.1.111
>add git.domain.com. 600 a 192.168.7.10
>add gateway.domain.com. 600 a 192.168.7.10
>send
>quit
您可以使用动态获取的 IPV4 或 IPv6 地址创建一个简单的文件,并在“post-up”脚本上运行/etc/network/interfaces
答案3
在此处的 Raspberry Pi 上,也运行 Raspbian Jessie,DHCP 客户端是/sbin/dhcpcd
.不幸的是,这使用了不同的配置文件,不允许指定 DNS 后缀。
ps -ef | grep -i [d]hcp
root 720 1 0 10:16 ? 00:00:00 /sbin/dhcpcd -q -w
幸运的是,这个系统安装了resolvconf
,它确实有一个/etc/resolvconf.conf
允许指定 DNS 后缀的配置文件:
search_domains_append=ns.exampledomain.com
我完全不确定为什么两个 Jessie Pi 应该有不同的安装配置,但这可能是另一天的问题。为了进行比较,下面是 DHCP 客户端进程的另一个示例,如我的一些 Debian Wheezy 系统上所示:
# This uses /etc/dhcp/dhclient.conf and is not what I have on my Pi
ps -ef | grep -i [d]hcp
root 1683 1 0 09:58 ? 00:00:00 dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0