我正在使用 Ubuntu,发现我的全局 IP 地址是192.168.1.xxx
我在这里写的xxx
。
为了检查这一点,我设置了一个 Web 服务器,并且只能通过该本地 IP 地址访问它。当我检查我的 IP 网页时,它显示一个看起来正常的 IP 地址:180.150.80.xxx
并且无法从这个看起来正常的 IP 地址访问该网页。我用手机检查了这一点。
的输出ip addr
是:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 98:e7:f4:0f:3d:01 brd ff:ff:ff:ff:ff:ff
3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b8:81:98:cc:2d:bf brd ff:ff:ff:ff:ff:ff
altname wlp3s0
inet 192.168.1.xx/24 brd 192.168.1.255 scope global dynamic noprefixroute wlo1
valid_lft 84833sec preferred_lft 84833sec
inet6 2403:580e:7b3c:0:b69:4100:a7f4:xxxx/64 scope global temporary dynamic
valid_lft 6707sec preferred_lft 3105sec
inet6 2403:580e:7b3c:0:1f61:fea0:6275:xxxx/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 6707sec preferred_lft 3105sec
inet6 fe80::a117:ea44:a262:xxxx/64 scope link noprefixroute
valid_lft forever preferred_lft forever
IP 路由的输出为:
default via 192.168.1.1 dev wlo1 proto dhcp metric 600
169.254.0.0/16 dev wlo1 scope link metric 1000
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.xx metric 600
这里发生了什么?
我通过下面的 GUI 添加显示 IPv4 地址的屏幕截图:
为什么我看到的 IP 地址为192.168.1.xxx
?
这不是全球性的。不太注意
scope global
;“ip addr”中的该字段对于 IPv4 条目从来没有任何意义(即使对于 IPv6,它也失去了许多原始含义)。如果它是 192.168.xx 地址,那么无论范围参数如何,它都是私有地址。(IPv4 从来没有真正将“范围”作为一个内置概念。IPv6 曾经为其原始类型的私有地址提供“范围站点”,但现在已经过时了,较新类型的私有 IPv6 地址仅使用“范围全局” ' 同样,因此您始终必须查看实际的地址前缀来确定其类型。)
唯一有意义的剩余值是“scope link”,它表示该地址严格限制在子网内。(与可以跨许多网络和子网路由的私有地址不同,链路本地地址永远不会超出其自己的子网。)
实际情况是(实际的全球)IPv4 地址稀缺,住宅 ISP 只为每个客户发放一个全球地址。(如今,通常甚至不再这样了。)
多个设备实际上无法“共享”相同的 IP 地址,因此通常会将一个地址分配给支持 NAT 的路由器(即您的家庭 WiFi 路由器)。路由器会重写所有出站到互联网的数据包,使它们看起来好像来自路由器的公共地址,而不是计算机实际拥有的任何数据包。
这意味着当您尝试建立到 180.150.80.xxx 地址的入站连接时,您始终会连接到路由器。要在内部托管 Web 服务器,需要设置路由器以将该连接转发到更远的地方,最常见的是再次使用 NAT(也称为“端口转发”)。
然而,越来越常见的是,住宅客户甚至不再获得单个 IP 地址,而是由 ISP 本身完成另一层 NAT。在这种情况下,入站连接根本不会到达客户的网络,并且再多的“端口转发”也无济于事。因此,在您花时间尝试使其正常工作之前,请打开路由器的状态页面并检查其 IP 地址。
好的一面是,您的计算机确实拥有一个实际上是全球性的IPv6地址。所有条目都
inet6 2403:580e:[...]
应该可以从外部访问(尽管您的路由器可能仍会在其防火墙配置中阻止入站连接),并且不带“临时”标志的地址可用于托管服务器。只要您的所有访问者都有 IPv6,那就是...(大多数人仍然没有)您的家庭网络处于NAT之下。
您的家庭网络实际上是“附加子网”,但并不是网络或子网本身导致了这种情况(至少不是直接导致的);这是因为该子网中的所有设备缺乏足够的全局 IPv4 地址。
(而且,也许,即使对于已经受够了它们的 ISP 来说,历史惯例也是如此。直到大约二十年前,许多人还没有“家庭网络”;他们会直接将计算机连接到 ISP - 无论是通过拨号或通过 ADSL – 该计算机将直接接收一个公共地址...因此所有住宅 ISP 的系统架构都只为每个客户分配一个地址。当事情变得更大时,可能“成本更高” -有效”对于他们来说,在客户端进行 NAT 比改变 ISP 自己的系统的工作方式更有效。)
然而,除了家庭网络之外,较大的(例如公司或大学)网络仍然有许多公共 IPv4 地址以各种方式在内部路由,并且“私有地址”和“子网”之间不存在技术关系。