系统主机名和 apache2 vHost 之间的主机名冲突

系统主机名和 apache2 vHost 之间的主机名冲突

我在我的局域网上拥有一个 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 中的内容。

Apache 错误“无法可靠地确定服务器的完全限定域名”

例子:

通过 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 无法解析为您期望的远程服务器,我们就无法调试您的连接。

相关内容