直到最近,我家里还有一台服务器,作为有线路由器/调制解调器后面的 DMZ(所有外部流量都路由到它)。这很有效。现在,在我的 ISP 完全采用 IPv6 之后,我再也无法连接到它了。
我以前了解 IPv4、网络段等,但我无法以同样的方式“读取”IPv6,所以当我现在无法读取时,ssh
我不知道为什么。可能是因为我认为的外部 IP 可能不是...
我通过访问 获得了外部 IP 地址whatismyip.org
,结果2a01:79c:cebd:5bc:b0cc:d7d2:22d0:3369
显示在屏幕上。这不是在服务器上完成的(服务器是无头的),而是在其他同一网络上的计算机。我听说 IPv6 可以直接连接到 NAT 后面的计算机而无需转发,这让我怀疑我看到的 IPv6 地址不是路由器的 IP(在 IPv4 世界中通常是路由器的 IP),而是本地网络上计算机的 IPv6 地址。我可能离题太远了,但我认为值得一提。
无论如何,尝试连接到服务器上运行的 Web 服务器的方法是这样的:curl http://[2a01:79c:cebd:5bc:b0cc:d7d2:22d0:3369]
。我无法连接。
答案1
我听说 IPv6 可以直接连接到 NAT 后面的机器而无需转发
噢,造成了这么多不必要的混乱。很抱歉。
IPv6 的工作原理与 IPv4 基本相同。但显然也存在一些差异,例如 IPv6 每个地址使用更多位数。
有一段时间,DHCPv6 不如 DHCP/IPv4 发达。人们被鼓励改用路由器请求/路由器通告协议。(我见过这被称为 RS 和 RA。)RS/RA 在 IPv4 上从未流行过,可能主要是因为 DHCP/IPv4 已经相当流行。在 IPv6 中,一种称为 SLAAC 的过程使用 RS 和 RA。
如果您使用 SLAAC,某些实现会要求您使用 /64 子网大小。这与 DHCP/IPv4 相比有显著变化,DHCP/IPv4 支持多种子网大小,并且不同子网大小的使用相当普遍。
对于 IPv6,早期标准规定 ISP 应至少提供 /48 个地址块。(每个 /48 地址块有 2^16 个 /64 子网,即 16,384 个 /64 子网。)这让人们可以进行子网划分。这基本上消除了使用 NAT 来帮助减少地址使用的需要,因为人们获得了太多地址。这导致许多人宣称不需要 NAT。
“绕过使用 NAT 的要求”的方法是设置 IPv6 子网。但是,“绕过 NAT 的要求”与“绕过 NAT”有很大不同。可以将 NAT 与 IPv6 一起使用,并且其技术工作方式与 NAT 与 IPv4 的工作方式完全相同,但存在明显差异,例如通常具有更大的子网大小。但原理是一样的。
这让我怀疑我看到的 IPv6 地址不是路由器的 IP(在 IPv4 世界中通常是这样的),而是本地网络上计算机的 IPv6 地址。
是的,这是可能的。使用 IPv4,您可以为内部机器分配公共 IP 地址。由于缺少可用的公共 IPv4 地址,通常不会这样做,但可以设置。对于 IPv6,常见的情况通常是不缺少可用的公共地址,因此这种设置在 IPv6 中更常见。
不过,你的内部机器会有一个默认网关,很可能是路由器。登录到该路由器,你就可以看到路由表。
您使用的是公共 IPv6 地址。私有 IPv6 地址以“fd”开头(就像私有 IPv4 地址以“192.168.”或“172.16.”到“172.31.”或“10.”开头一样)。以“fe80:”开头的地址是“链路本地”地址,类似于 IPv4 的“169.254.”地址,但有一些区别。(在 IPv6 中,看到“fe80:”是必需的;看不到它就是个问题。相比之下,看到 IPv4“169.254.”通常就是个问题。)
您也许能够使用 NDP 找到服务器的地址。例如,在 Microsoft Windows 中:
netsh interface ipv6 show neighbor
其他操作系统可能使用类似ndp
或的命令ip -6
来显示 IPv6 邻居。
答案2
通常情况下,仅启用 IPv6 不会影响 IPv4。所以我猜你的意思是你的 ISP 实际上已禁用本机 IPv4 连接(并使用 CGNAT)?
好吧,无论如何,首先让我们明确一下 IPv6 的不同之处:
由于我听说 IPv6 使得无需转发即可直接连接到 NAT 后面的机器成为可能,这让我怀疑我看到的 IPv6 地址不是路由器的 IP(在 IPv4 世界中通常是路由器的 IP),而是本地网络上计算机的 IPv6 地址。
你不需要端口转发的原因是您不再处于 NAT 后面了。相反,除了自己的全局地址之外,你的路由器还会获得一个完整的范围(/64 前缀)用于 LAN,以及每个设备都有自己的全局地址来自该前缀。您的 LAN 范围是2a01:79c:cebd:5bc::/64
,并且其中的每个地址都可以从外部访问。
因此,如果你尝试连接到计算机上“whatismyip”显示的地址,那么你实际上是在连接到同一台计算机 - 如果你想找出服务器的地址,你必须检查它从该服务器。您实际上不需要访问网站 – 由于地址已经是全球性的,因此您可以从ip addr
Linux、ifconfig
BSD 或ipconfig
Windows 上获取它。
(事实上,这甚至更好,因为许多主机可以自行配置多种的地址 – 一个持久地址,加上每天更改的临时地址。网站会向您显示临时地址,但对于传入连接,您肯定需要永久地址。上述命令会同时显示这两个地址。)
但是,仅仅因为没有“端口转发”并不一定意味着您不再需要任何路由器配置。
在 IPv4 中,添加“端口转发”规则不仅仅是设置 NAT 转换,它还会为该特定端口打开防火墙。虽然 NAT 在 IPv6 中不再是问题,但你仍然有防火墙——如果你的 ISP 有任何安全意识,那么防火墙仍然默认阻止传入连接。
因此,如果你有正确的地址但仍无法连接,你可能仍然需要访问路由器的配置,找到防火墙设置,并添加允许传入流量的规则server_ip
。
IPv4 和 IPv6 确实共享了大部分相同的概念 - 路由相同、子网相同、NAT 是一回事、私有地址仍然存在,正如 TOOGAM 所提到的。后两者在 IPv6 中的普及程度远低于 IPv4(由于地址短缺,它们在 IPv4 中被使用)。