我会尽力提供尽可能多的信息,我对 Linux 还不太熟悉,但我的媒体服务器目前正在运行 Ubuntu Server 18.04.4,并且我正在尝试设置一个静态 IP。
我在网上找到了很多教程,我可以通过编辑一个名为的文件来使其正常工作50-cloud-init.yaml
,以下是我的设置:
network:
renderer: networkd
ethernets:
eno1:
dhcp4: no
addresses: [192.168.2.46/18]
gateway4: 192.168.2.1
nameservers:
addresses: [192.168.2.1,1.1.1.1]
dhcp4-overrides:
hostname: starlight01
send-hostname: yes
use-hostname: yes
version: 2
现在一切正常,我完成了所有的sudo netplan apply
事情,我可以通过执行来浏览我的 samba 共享,\\192.168.2.46\
但是,我有几个应用程序依赖于机器名称而不是 IP,并且由于某种原因,当它是一个动态 IP 时,我可以输入\\starlight01\
,但是当我使用机器/主机名时,它突然停止工作。
我还想补充一点,每台机器都不再能够通过机器名称进行访问。
当它具有静态 IP 时,我可以通过 IP 进行 ping 并得到响应,但通过机器名称进行 ping 会导致超时,但使用动态 IP 进行 ping 对两者都可以正常工作。
我还尝试了以下方法:
- 重新启动路由器和相关交换机
- 重启服务器
- 我的 Windows 机器上的 dns flush
- 重启我的 Windows 机器
- 删除
dhcp4-overrides
该文件的部分内容
答案1
您的客户端计算机始终使用 IP 地址连接到服务器。当您要求它使用计算机名称进行连接时,它会使用某些服务在内部将名称转换为 IP 地址。存在各种名称->IP 转换服务,并且您可能依赖于 DNS(域名系统)。其他选项包括 WINS、MDNS、LLMNR,... 您的客户端计算机可能使用您的网络/WiFi 路由器(或路由器/调制解调器组合单元)作为 DNS 服务器,它使用来自 DHCP 请求的信息来创建本地名称->IP 映射表,它使用该表来响应您的客户端计算机发出的一些 DNS 请求。
当服务器上启用 DHCP 时,会发生以下情况:
- 当服务器需要获取自己的 IP 地址时,它会向 DHCP 服务器发送 DHCP 请求;通常是发送到您的 WiFi 路由器或路由器+调制解调器。
- DHCP 请求包括发出 DHCP 请求的机器的名称。
- DHCP 服务器为机器分配一个 IP,并将 IP/名称对记录在内部数据库中。
- DHCP 服务器将 IP 发送回给服务器供其使用。
- 每当另一个系统使用 DNS 协议请求与服务器名称相关联的 IP 时,DNS 服务器首先查阅由 DHCP 服务器创建的本地数据库,如果存在匹配的条目,则提供答案(否则它将继续查询整个 Internet)。
当您使用静态 IP 地址时,不会发出 DHCP 请求,因此 DHCP/DNS 服务器永远没有机会将相关条目添加到本地名称/IP 数据库中。
正如其中一条评论中提到的,您可能可以使用servername.local
作为名称而不是servername
,这样它就可以工作(这使用 MDNS)。Linux 和我认为 Mac 客户端都支持此功能,但 Windows 不支持,除非您安装了支持此协议的非默认软件(例如 Apple 的 Bonjour 软件堆栈)。
由于我看到您的问题中有 UNC 路径(以 \ 开头),因此我假设您的客户端计算机是 Windows,并且您在服务器上运行 Samba。在这种情况下,您可以告诉 Samba 充当 WINS 服务器。WINS 是另一个名称->IP 映射协议。我认为您的客户端计算机将找到 WINS 服务器并自动开始查询它以进行名称查找,至少对于 Windows/Samba 文件共享协议而言是这样。如果不是,您可能需要:- 在路由器上启用 WINS 服务器,并告诉 Samba 向其注册,或者 - 配置路由器的 DHCP 服务器以告知客户端有关在您的文件服务器上运行的 WINS 服务器的信息。