我被允许通过 ssh 访问服务器。我获得了 ssh 服务的 IP 地址和端口号。服务器的操作系统是 ubuntu 18.04。但ifconfig
在服务器上运行时没有显示我用来连接服务器的 IP 地址。可能的原因有哪些?
答案1
元注释:要求列出事物列表并不一定适合该网站,因为它会要求部分答案,而这些答案只能共同构成一个完整列表。此答案是社区 wiki,希望用户能够改进它(添加内容),而不是将其他可能性作为单独的答案发布。
可能的解释:
-
DNAT 通常用于在可公开访问的 IP 地址上发布位于私有网络中的服务。
在这种情况下
ifconfig
将显示私有 IP 地址。您使用的公共地址属于另一台机器。 您最初登录的服务器上的 SSH 守护程序和/或 shell 被配置为默默地将您连接到另一台机器。这有点类似于 DNAT,但在 SSH/shell 级别上工作。
多个 IPv4 地址,但
ifconfig
只显示一个。调用ip address
以查看更多。
这些解释并不相互排斥。可以配置事物,因此不止一种解释会影响您所看到的内容。
答案2
ifconfig
已已弃用在 Ubuntu 18.04 中,就像在许多(如果不是全部)当前 Linux 发行版中一样。它被 取代ip
。
检查ip addr
您自己的系统。然后转到whatismyip.com。如果您有常规 ISP 连接,您的ip addr
IP 地址将显示类似 192.168.1.100 的内容,而 whatismyip.com 则显示完全不同的内容。Whatismyip.com 将显示您的路由器的公共 IP 地址。
路由器对内部网络和互联网之间的流量进行 NAT。使用大多数 SoHo 路由器,您可以在路由器中创建端口转发规则,以便将特定端口的入口流量转发到特定系统。
如果您通过互联网访问服务器,同样,您用于连接服务器的 IP 地址不太可能是实际服务器的 IP,而是网络的互联网路由器的外部(公共)IP,并且路由器具有类似的规则,将所有入口流量转发到端口 22 到特定的内部 IP 地址。
答案3
有时您可能位于代理/堡垒或其他网络技巧的后面,因此他们在另一个地方配置了您访问的外部 IP 并将其转发到您的服务器(或其他解释),在这种情况下 - 您将看不到在您的服务器中配置的外部 IP 地址。
就我个人而言,我会运行它curl ipinfo.io
来查看有关我正在运行的服务器的更多信息,它就像一个“镜子”,可以观察“世界”如何看待你的服务器,它会输出类似这样的内容:
{
"ip": "<your external IP>",
"city": "...",
"region": "...",
"country": "US",
"loc": "...",
"org": "<company that owns this server>",
"postal": "...",
"timezone": "...",
"readme": "https://ipinfo..."
}