我对“ISP 级”网络还不熟悉,所以这个问题可能有点幼稚。我一直在Linux 机器中奇怪的网络问题。作为一项调试/学习计划,我决定尝试用我的一个 ISP 路由器替换我的 ISP 路由器(将其直接连接到 ONT)。我向我的 ISP 寻求帮助,他们给了我以下信息:
VLAN
:12Remote IP
:100.64.xx.xxLocal IP
:100.64.xx.xx (+1)Internet IP
:62.xx.xx.xx
经过一番研究,似乎我的 ISP 使用的是运营商级 nat 设置。奇怪的是,我还支付了静态 IP(以 62 开头的 IP...),它运行良好(我有几个客户端通过 VPN 连接到我的服务器,使用这个静态 IP)。
据我理解,这没有任何意义,因为运营商级解决方案不应该与静态外部 IP 兼容,对吗?
我已经尝试将 WAN 端口设置为正确的 VLAN,并使用本地 IP 和远程 IP 作为网关,但我仍然无法访问互联网。我还尝试将我的 PC 直接连接到 ONT,并使用 wireshark 查看到达的数据包。一些数据包通过我的外部 IP 地址 (62.xx.xx.xx) 到达,因此很明显它必须在路由器配置的某个地方。我只是不知道在哪里。
有人能给我解释一下吗?理想情况下,如果能得到一些关于运行 Tomato(或 Open-wrt)的路由器设置的帮助,我将非常感激。
谢谢
答案1
据我理解,这没有任何意义,因为运营商级解决方案不应该与静态外部 IP 兼容,对吗?
不,不一定。IP 路由比“有 NAT / 没有 NAT”要复杂一些,而且它并不总是基于 IP 地址的样子。
至少有两种“正常”方法可以实现此目的。(我认为您的 ISP 使用的是第一种方法,因为它更为常规,并且您说过您实际上接收到的数据包仍显示公共 IP 地址作为目的地。)
1. 路由
第一种方式是 ISP 通过路由器的“主”地址路由任何其他地址。这实际上是企业网络接收地址范围的正常方式:它们不要直接为路由器本身分配数百个地址,但只路由整个范围通过它。
例如,在 Linux iproute2 术语中,ISP 的系统只有类似这样的内容:
ip route add 62.x.x.x/32 via 100.64.x.xplus1
^^^^^^^^^^^ ^^^^^^^^^^^^^^^
your additional IP | | your router's primary IP ("local")
这给了路由器很大的自由来决定将数据包进一步发送到哪里。能将地址分配给路由器本身,或者您可以添加类似的路由转发到您的家庭服务器 - 允许服务器eth0
直接拥有该地址。
在此过程中,您的数据包根本不要经过 CGNAT。路由 nexthop 的唯一用途是转换为第 2 层地址 - 它永远不会出现在实际数据包中。因此,路由器的“主”地址是否来自私有范围并不重要,因为它只需要被 ISP 的内部路由器知道。
(事实上,即使没有任何形式的 CGNAT 的站点也会偶尔为其路由器分配私有范围的 IP 地址,这只是作为节省公共地址空间的一种手段。)
2. 静态 NAT
他们还可以通过为你定义单独的 1:1 NAT 规则来实现这一点,这样全部62.xx.xx.xx 的入站数据包将通过 DNAT 发送到您的 100.64 地址,反之亦然 - 从您发送的所有数据包都将通过 SNAT 发送到您保留的外部 IP。
(它的工作原理就像家用路由器中的“DMZ”设置一样,事实上它非常类似于 Amazon AWS 和类似的云计算巨头提供商中的“浮动 IP”系统。)
如果 ISP 的基础设施已配置为将每个人都置于 NAT 之后,则这种方法在他们这边的配置可能比实际将公共地址路由到您的设备要简单得多(需要的移动部件更少)。
然而,如果使用这种方法,那么你永远不会看以外部 IP 地址作为目的地的数据包:它们将全部被 NAT 为您的 CGNAT 私有 IP 地址。