当我运行在线 IP 查询工具时,例如https://whatismyipaddress.com/,我得到了一个像24.253.65.208这样的IP地址。
但是我已将我的家用路由器设置为 DHCP 服务器,并在一定范围内分配了静态 IP 地址,如以下屏幕截图所示:
如果我ifconfig
在笔记本电脑上运行,我会看到它的以太网网卡被分配了 IP 地址 10.0.0.2:
$ ifconfig
br-fbff3346e4d9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.49.1 netmask 255.255.255.0 broadcast 192.168.49.255
inet6 fe79::42:e9fe:ff10:c35d prefixlen 64 scopeid 0x20<link>
ether 02:43:e9:10:c4:5e txqueuelen 0 (Ethernet)
RX packets 522576 bytes 24843001 (24.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 680143 bytes 1914033742 (1.9 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 30455 bytes 3345251 (3.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30455 bytes 3345251 (3.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
veth84aa4c6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::f8a6:1dff:fea5:7eae prefixlen 64 scopeid 0x20<link>
ether fb:b6:1d:b5:7e:be txqueuelen 0 (Ethernet)
RX packets 505519 bytes 30297179 (30.2 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 661456 bytes 1855293659 (1.8 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::5f9c:c301:a6a3:6e36 prefixlen 64 scopeid 0x20<link>
ether f8:59:72:01:69:cf txqueuelen 1000 (Ethernet)
RX packets 4847088 bytes 6757721096 (6.7 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1937921 bytes 256121852 (256.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
但正如你所看到的,没有迹象表明24.253.65.208。
所以我的问题是:24.253.65.208——外界似乎看到了——10.0.0.2那么我的 NIC 是否确实已分配?
我想象有些软件/硬件正在“翻译”24.253.65.208和10.0.0.2——但那是谁?我的路由器?
如果用户路由器作为 DHCP 服务器复选框未选中?如果没有选中该复选框,那么如何为网络中的各种设备分配 IP 地址?
答案1
我想象有某个软件/硬件在 24.253.65.208 和 10.0.0.2 之间进行“转换”——但那是谁?我的路由器?
是的,通常是您的路由器。所有家用路由器除了常规 IP 路由外,还具有 NAT 功能 - 大多数 ISP 只能为每个客户提供一个公共 IP 地址,并且您无法直接在多个设备之间共享该地址(即不能简单地ifconfig
同时将其分配给三台 PC),因此地址会被分配给路由器的“WAN”接口,而路由器的工作就是将您整个 LAN 的私有地址“伪装”为公共地址。
如果你在路由器上运行ifconfig
或运行ip addr
,它可能看起来就像是这个(我编造的,接口可能不叫“wan0”和“lan0”,但你明白我的意思):
wan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 24.253.65.208 netmask 255.255.255.0 broadcast 24.253.65.255
lan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
不过,地址转换不是路由的内置部分,而是作为一项单独的功能完成的(可以独立于路由启用/禁用)。由于许多家用路由器内部运行 Linux 变体,因此 NAT 功能通常通过标准 Linux iptables 实现 - 您可以在线找到各种 iptablesSNAT
和MASQUERADE
规则示例。您可以想象路由器有类似以下内容的东西:
iptables -t nat -A POSTROUTING -i lan0 -o wan0 -j MASQUERADE
但请注意,最近,由于一些 ISP 的 IP 地址越来越少,因此实施了 CGNAT(“运营商级”NAT),因此 ISP 的路由器(或专用 NAT 设备)可能会将 IP 地址转换为公有地址。更准确地说,对于 CGNAT ISP,二转换层 – 您的路由器仍像以前一样具有 NAT,将整个 LAN 伪装成单个 IP 地址,但它不再是公共地址;ISP 添加了第二个转换层来提供公共地址。这有点丑陋。
但另一方面,许多 ISP 现在正在向客户部署 IPv6——你还没有它(至少在 ifconfig 输出中没有看到),但如果你做过拥有 IPv6,那么您确实会直接在其“wlan0”接口上找到计算机自己的公共 IP 地址,而路由器就是这样,它转发数据包而不进行任何类型的地址转换。(也就是说,它仍然会对 IPv4 进行 NAT,但不再对 IPv6 进行 NAT。)
如果取消选中“用户路由器作为 DHCP 服务器”复选框,情况会有什么不同?如果未选中该复选框,那么如何为网络中的各种设备分配 IP 地址?
您的设备不会自动分配 IP 地址,但除此之外什么都不会改变。它们仍然预期的像以前一样拥有路由器“LAN”范围内的 IP 地址。如果您想在单独的系统上设置自己的 DHCP 服务器,同时仍使用与现在相同的路由器,或者如果您希望避免使用 DHCP 并完全依赖静态 IP 配置,则可以使用此选项。
此复选框不会禁用 NAT 或路由;路由器的 LAN 和 WAN 接口仍然是独立的 LAN 和 WAN 接口。如果您想完全绕过路由器(例如,在路由器有内置 DSL 调制解调器并且您仍然需要“调制解调器”部分的情况下),您需要寻找“桥接”模式。
我想我明白了:公共 IP 地址(24.253.65.208)和我的调制解调器之间有几层“内部网络”。
不,不应该。通常情况下,你的家用路由器直接与你的家用局域网相邻和ISP 的网络 – 调制解调器根本不参与 IP,它只是转换较低层信号。
尽管所谓的“调制解调器”通常是调制解调器和一个单元中的家用路由器,在这种情况下,它确实可以创建一个额外的路由层和NAT – 完全可以链接多层 NAT 设备,你不应该,但这是有可能发生的。
在这种情况下,最外层家庭路由器(例如内置于调制解调器的路由器)将被分配公共 IP 地址。
那么,这些“内部网络”层中的每一层都实现一个 NAT(如 John 的评论中所述)是否正确,以便来自更靠近公众的层的入站数据包被路由到更靠近我的调制解调器的层?
不,通常只有一层(除非你连接了多个家用路由器,并且它们都配置为思考每个节点都直接与一个 ISP 连接)。
数据包确实会经过许多网络和路由器,但一般来说,路由器不会转换 IP 地址 - 它们只会转发数据包。您的家用路由器执行 NAT 是一个例外,而不是默认设置。
附注:不要指望ifconfig
Linux 系统总是能正确报告。虽然它在大多数情况下都能正常工作,但有时同一接口上可能会有多个 IPv4 地址,但 ifconfig仍然尚未更新以显示第一个地址以外的内容(20 年后?),这可能会造成很多混乱。虽然 ifconfig 仍然是 BSD 系统上的主要工具,但“当前”Linux 命令用于ip a[ddr]
列出 IP 地址(可能ip -br a
用于“简短”的每行一个接口列表)并ip -s -h l[ink]
获取统计信息。
答案2
但如你所见,没有 24.253.65.208 的踪迹
这通常会在 WAN 下列出。
我想象有某个软件/硬件在 24.253.65.208 和 10.0.0.2 之间进行“转换”——但那是谁?我的路由器?
是的。您的路由器负责在家庭网络和 ISP 网络之间路由流量。
您的 ISP 通过他们自己的路由器在其网络和互联网的其他部分之间路由流量。
您可以将 ISP/WAN 和 Home/LAN 视为路由器在其间传递信息的两个独立网络。
如果取消选中“用户路由器作为 DHCP 服务器”框,会有什么不同?
您的本地网络上的设备不会被分配与路由器位于同一子网的地址。
因此,他们将无法与您的路由器通信或通过您的路由器访问互联网。
如果没有选中该框,那么如何为我的网络中的各个设备分配 IP 地址。
半随机,取决于设备软件(如果设备设置为通过 DHCP 获取 IP 地址)或者如果您已将其配置为使用静态 IP 地址。
答案3
我想象有某个软件/硬件在 24.253.65.208 和 10.0.0.2 之间进行“转换”——但那是谁?我的路由器?
是的,就是这样。事实上,它被称为网络地址转换 (NAT),它的存在是为了让您在网络上只有一个公共 IP 地址,但有多个私有地址。
您的公共地址和内部设备分配的地址之间没有实际关联。内置 DHCP 服务器的家用路由器几乎总是使用以下范围之一来分配地址:
10.0.0.1 - 10.255.255.254
172.16.0.1 - 172.31.255.254
192.168.0.1 - 192.168.255.254
这些范围被保留用作私有地址。
如果你关闭了路由器的 DHCP 功能,你的设备在开机时将无法获取 IP 地址 - 除非以下情况之一成立:
你的网络上运行着另一个 DHCP 服务器
,或者你为每个设备分配了静态地址