我在我的局域网上拥有一个 Ubuntu 16 服务器,其中我运行着一个带有许多 vHost 网站的 Apache2。
有一件事令我困扰:
服务器的主机名是来自 vHost 的主机名,而不是/etc/hostname
文件中写的主机名。
有什么办法可以修复这个问题吗?
我已经编辑了主机名和主机文件,运行hostnamectl
并重新启动了系统,但它仍然给我来自 vHost 的名称,而不是给我我想要的名称。
当我使用该服务器通过 ssh 连接到另一个服务器时,名称显示在 motd 中的“上次登录来自”中,而当我运行“Angry Ip Scanner”(nMap 等效项)时,该名称显示在主机名部分。
答案1
从评论来看,这里设置的本地主机名hostnamectl
、Apache 服务器名称和 DNS(域名服务)之间存在混淆。
主机名
此设置仅在您的本地主机上使用。
要设置本地计算机的主机名,请使用 hostnamectl
sudo hostnamectl set-hostname new_hostname
在我看来,这比手动编辑更好/etc/hostname
,/etc/hosts
因为它是一个单一命令,不容易出现拼写错误,也不太可能破坏 sudo。
DNS
域名服务器 (DNS) 是独立的,它定义了计算机如何连接到其他计算机,“电话簿”类比用于描述 DNS 的工作方式,但它是一个网络,因此您可以使用名称而不是 IP 地址通过网络协议连接到服务器,即http://google.com而不是 IP 地址。
有关 DNS 的详细信息,请参阅https://webhostinggeeks.com/guides/dns/或类似的东西。
这有点与 FQDN 相关 -https://serverfault.com/questions/269838/主机名和完全限定域名之间的区别是什么
在本讨论中,我将使用 FQDN 来指代您用于通过网络协议(例如 http 或 ssh)连接到服务器的网络名称。DNS 服务器仅使用 FQDN(例如 foo.com 而不是 foo),/etc/host 可以使用非 FQDN(例如 foo 而不是 foo.com 或甚至两者)。
因此,在某个时候,作为 Web 服务器安装/配置的一部分,您会向 DNS 提供商(例如 godaddy 或类似提供商)注册一个或多个 FQDN。这些服务运行并维护 DNS 服务器,并在您的情况下将您的 apache 名称服务器映射到您的公共 IP 地址。
网络应用使用 /etc/hosts 和 DNS 服务器来解析 FQDN
网络应用程序通常会首先在 /etc/hosts 中查找以将 FQDN 解析为 IP 地址。如果 /etc/hosts 中没有条目,它们将使用 DNS 来解析 IP 地址。
没有网络应用程序使用系统管理员在 /etc/hostname 中写入的信息来解析 DNS。
网络映射
因此,当您运行 nmap 时,它会使用反向 DNS 服务和 /etc/hosts 来解析 FQDN。
有关详细信息,请参阅 nmap 文档 -https://nmap.org/book/man-host-discovery.html
另请参阅有关服务器故障的讨论 -https://serverfault.com/questions/153776/nmap-find-all-alive-hostnames-and-ips-in-lan
可能有一些选项或配置可以强制 nmap 使用 /etc/hosts 或禁用 DNS 查找,也许有人会在这里发布该信息,但这超出了本讨论的范围。
简短的回答是 nmap、ssh、http 和其他网络协议使用 DNS 和/或反向 DNS 查找将您的 FQDN 解析为由 DNS 服务器或 /etc/hosts 定义的 ipaddress,而不是本地计算机或远程服务器上的 /etc/hostname。
SSH
SSH 将同时使用 /etc/hosts 和 DNS 服务器。
请参阅 ssh 文档或https://linux-tips.com/t/disabling-reverse-dns-lookups-in-ssh/222如何禁止 ssh 使用 DNS 服务。
如果 ssh 没有返回您期望的主机名,则需要进一步调查,请参阅https://serverfault.com/questions/266897/why-is-hostname-lookup-in-ssh-returning-a-different-result了解有关如何执行此操作的详细信息。
因此,在您的情况下,我假设 ssh 也使用 DNS 服务,而不是仅依赖 /etc/hosts 来解析您在命令行上使用的 FQDN。
我的做法 我个人不使用我的 apache FQDN 作为我的本地主机名,也不使用我的 FQDN 通过 ssh 进入我的服务器,也不通常将 FQDN 传递给 nmap,也不使用 NMAP 来确定服务器的本地主机名。
如果存在,nmap 将告诉您注册到 FQDN 的 FQDN,但它不会告诉您远程服务器的 /etc/hostname 中的内容。
例子:
通过 IP 地址进行 NMAP
假设 IP 地址是公共的,并且远程主机已启动且没有防火墙阻止 nmap,那么此方法有效;)
bodhi@daemon:~$nmap --top-ports 10 8.8.8.8
Starting Nmap 7.40 ( https://nmap.org ) at 2017-06-28 16:10 MDT
Nmap scan report for google-public-dns-a.google.com (8.8.8.8)
Host is up (0.081s latency).
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
23/tcp filtered telnet
25/tcp filtered smtp
80/tcp filtered http
110/tcp filtered pop3
139/tcp filtered netbios-ssn
443/tcp open https
445/tcp filtered microsoft-ds
3389/tcp filtered ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 2.15 seconds
通过 FQDN 进行 NMAP
只要您提供的名称是已注册的 FQDN,此方法同样有效
bodhi@daemon:~$nmap --top-ports 10 google.com
Starting Nmap 7.40 ( https://nmap.org ) at 2017-06-28 16:10 MDT
Nmap scan report for google.com (172.217.11.238)
Host is up (0.10s latency).
Other addresses for google.com (not scanned): 2607:f8b0:400f:800::200e
rDNS record for 172.217.11.238: den02s01-in-f14.1e100.net
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
23/tcp filtered telnet
25/tcp filtered smtp
80/tcp open http
110/tcp filtered pop3
139/tcp filtered netbios-ssn
443/tcp open https
445/tcp filtered microsoft-ds
3389/tcp filtered ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 2.36 seconds
使用虚假/不存在的 FQDN 进行 NMAP
bodhi@daemon:~$nmap foo.bar
Starting Nmap 7.40 ( https://nmap.org ) at 2017-06-28 16:10 MDT
**Failed to resolve "foo.bar".**
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.55 seconds
如果您遇到困难,我们需要具体的信息。
- 发布的内容
/etc/hostname
和/etc/hosts
- 告诉我们您所有注册域名的 FQDN
- 发布你的 apache 配置文件的相关部分
- 发布您正在运行的确切 nmap 和 ssh 命令及其输出。
如果没有更多信息,我们就无法澄清您的本地主机名和网络 FQDN 之间的任何混淆,如果 FQDN 无法解析为您期望的远程服务器,我们就无法调试您的连接。