如何将 IP 地址重定向/路由到另一个 IP 地址?
例如:10.10.10.10 -> 20.20.20.20 然后当我在浏览器中输入 10.10.10.10 时,它会连接到 20.20.20.20。
假设 10.10.10.10 和 20.20.20.20 是外部 IP 地址。
答案1
简介注意事项
在实施任何这些之前,了解路由的实际作用将会非常有帮助。
路由不会改变网络地址。(但是,NAT 会。而且 NAT 可以在路由应用时执行。但是,如果您想学习如何做某事,您应该尽量让事情变得简单。最好将简单/传统路由视为一个单独的过程,因为这是一种更简单的思考方式。)
在考虑更改地址等内容之前,让我们先彻底了解事物的实际工作原理,这样我们就不会尝试做一些违反常见网络设计规则的事情(这些规则可能会被通常实施这些规则的大多数硬件和软件拒绝)。如果我们学会了这些事情,那么至少如果我们尝试一些疯狂的事情,我们会明白我们尝试的是疯狂的,并且会在心理上为我们将要面对的障碍类型做好准备。这比不知道这些细节要好得多。
关于路由
路由通常旨在确保流量从一个网络(通常称为“子网”或“子网”)传输到另一个网络。
当您的计算机发送网络流量时,它可能会发送“帧”网络流量。这些帧称为“第 2 层”流量。(第 1 层侧重于物理连接,如电缆或天线和无线电波。)帧被传送到 MAC-48 地址(也称为 EIU-48 地址,更常见的是简称为“MAC 地址”)。帧传送的最常见方式是使用以太网(通过 UTP 铜缆)或 Wi-Fi。
帧往往包含数据包。目前最常见的数据包类型是 IPv6 和 IPv4。(可能不是按这个顺序...)这些数据包被视为第 3 层流量。数据包往往包含 TCP 段或 UDP 数据报,它们是第 4 层流量。我使用的术语“层”与“OSI 模型”中所描述的一致,该模型往往在许多专业级网络课程/培训中教授。
现在,假设您位于 192.168.1.103 并想要与 4.2.2.2 通信。这可能是 UDP 端口 53 流量(DNS),但我将使用 ICMP(ping)作为示例。
通常,您的计算机会将 192.168.1.103 与您的网络大小进行比较,后者由前缀长度(例如 IPv4 /24)指定。前缀长度(尤其是 IPv6 /64)对于 IPv6 最为常见。对于 IPv4,网络大小通常写为子网掩码。常见子网掩码的二进制值以所有 1 开头,子网掩码末尾所有 0 都为零,因此您通常会得到像 255.255.255.0 这样的子网掩码。使用这些 IPv4 /24 和 255.255.255.0 的示例,网络大小为 256 个地址。因此,如果将所有可能的 Internet 地址分成大小均匀的组,计算机就会确定哪些地址将位于一组 256 个地址的开头和结尾。因此,如果将所有可能的 Internet 地址分成 256 个地址的组,则 192.168.1.103 将属于从 192.168.1.0 到 192.168.1.255(含)的组。
由于期望的目的地是 4.2.2.2,而 4.2.2.2 不在 192.168.1.0 和 192.168.1.255 之间,因此流量不会仅使用帧发送到 4.2.2.2 的 MAC 地址。(我们不太可能使用 IPv4 的地址解析协议 (ARP) 或邻居发现协议(如果我们使用 IPv6)来发现 MAC 地址,因为它位于不同的网络上。这与影响 ARP 和 IPv6 NDP 的限制有关。)因此,如果我们无法将帧发送到那里,我们如何与 4.2.2.2 通信?
通过路由。我们可以找到一个网关,帮助我们将流量传送到 4.2.2.2。对于大多数常见的消费设备,人们通常只习惯于使用两种类型的网络:计算机所属的网络和全球互联网。(公司有时有多个站点,也可能有其他网络。)用于处理世界任何地方(整个互联网)地址的网关有时被称为“最后手段网关”,更常见的是被称为“默认网关”。如果没有更具体的网关,则将使用这个网关来处理任何地址。
因此,您的计算机将发送 IPv4 ARP 请求以请求默认网关,该网关必须位于您的网络中。通常,这将是您网络上的第一个“可用”地址。(由于一些非常古老的广播标准,也可能是由于一些常见的混淆,许多人只是将子网的第一个地址视为不可用。这包括一些软件和硬件的创建者,因此这些人的决定通常会影响我们其他人。因此,在此示例中,192.168.1.0 可能不可用。)因此,192.168.1.1 可能是第一个可用地址,也可能是默认网关。我将使用该示例。
一旦您的计算机找出默认网关的 MAC 地址,您的计算机就会使用地址为 4.2.2.2 的 IP 数据包发送 ICMP 消息,并且该 IP 数据包是发往网关 MAC 地址的帧的一部分。
因此,包含 ICMP 消息的网络流量实际上并没有发送到 IP 地址 192.168.1.1。流量被发送到与 192.168.1.1 相关的 MAC 地址。
然后,您的本地路由器将注意流量,因为流量将流向 MAC 地址。由于它是路由器,因此它将通过路由流量进行协作。因此,您的路由器将确定它是否知道如何通过位于同一网络上直接与 4.2.2.2 通信。您的路由器很可能不知道如何获取 4.2.2.2 的 MAC 地址。因此,这个过程会重复,因为您的路由器随后会将流量“路由”到另一个路由器的 MAC 地址,该路由器可能位于您的 Internet 服务提供商 (ISP) 处。
现在,解释这一切的重点是,即使你设法让计算机将 10.10.10.10 转换为 20.20.20.20,如果接收设备不期望 10.10.10.10 的流量,那么这可能毫无用处。20.20.20.20 的接收设备可能会收到流量,但如果流量是发往 10.10.10.10 的,它可能会忽略它。
请记住,在我的工作示例中,即使 IP 流量被发送到与默认网关相关的 MAC 地址,IP 数据包的目的地 4.2.2.2 在整个路由流量过程中保持不变。
因此,如果您尝试更改目标 IP 地址,那不是简单的路由。那是 NAT。NAT 是网络地址转换的缩写。因此,当网络流量涉及特定网络地址 (10.10.10.10) 时,它会被转换为另一个地址 (20.20.20.20)。参见:Windows 中的 NAT。
TCP 的限制
请注意,许多互联网流量都使用 TCP。如果您尝试建立到 20.20.20.20 的 TCP 连接,TCP 对双向通信的要求可能会带来一些麻烦。即使您可以将流量发送到 20.20.20.20,20.20.20.20 也需要能够成功响应,因为 TCP 需要双向通信才能在 TCP 连接开始时完成“TCP 握手”,然后才能发送任何(“有效负载”)数据。如果您的软件程序认为它正在将流量发送到 10.10.10.10,那么您的软件程序将不会接受来自 20.20.20.20 的响应流量。因此,除了对传出流量进行 NAT 之外,如果您使用的是 TCP,您可能还需要能够逆转 NAT 效果。TCP 非常常见,例如 HTTP(Web)和 SMTP(电子邮件)。主要例外是流量非常小(例如使用 UDP 的经典 DNS。另一个例子是 ICMP)或对缓慢非常敏感的流量(可能是 VOIP、新闻(如股票价格,旧信息比重新更新的新信息无用)、实时游戏)。了解您打算使用的协议是否依赖于 TCP 等较低级别的协议会非常有帮助。网络嗅探(例如 tcpdump 或 Wireshark)对于了解事情为什么不起作用也非常有用。
NAT 可用性
通常,您无需担心最终用户机器上的 NAT。通常,这由路由器完成。某些版本的 Windows 确实支持路由器功能,这意味着计算机可以像其他路由器一样处理网络流量。
这个问题带有“Windows”标签,所以我猜你想使用内置于 Microsoft Windows 中的软件来执行此操作,我认为 NAT 将由名为“路由”的功能支持。现代版本的 Windows 已将此功能内置于某个名为“路由和远程访问”(缩写为“RRAS”)的软件中。
据我所知,Microsoft Windows 的“家庭”版本通常不支持 RRAS。Windows Server 版本(例如 Windows Server 2008 R2)通常支持它。我认为“专业”最终用户版本(如“Windows 7 专业版”)可能支持它。我怀疑家庭版本(如“Windows 7 家庭版”)可能完全没有此功能。
即使该功能可能在您的 Windows 版本中可用,但默认情况下它可能被禁用,甚至被卸载。因此,您可能需要转到可以安装 Windows 功能的位置(例如,“服务器管理器”,或者可能是控制面板的小程序,其名称中包含单词“程序”,然后该小程序的左侧框架可能有一个用于添加/安装/启用“功能”的超链接)。
- 可能的资源:TechNet:启用并配置 NAT
- 可能的资源:TechNET:Netsh 路由 IP NAT 上下文命令
现在,从理论上讲,您可以告诉您的计算机将流量路由到代理,该代理对流量进行 NAT 并将其作为不同的 IP 地址发送出去。所以您的要求可能是可能的。
方法
一种可能的替代方案:考虑操纵 DNS 而不是 IP 流量。例如,将 DNS 名称指向不同的 IP 地址,可能通过使用 CNAMES(如果您可以影响相关域名的 DNS 记录),或者通过使用 hosts 文件。通常更容易实现和逆转(如果您决定撤消更改)。
很有可能,这不会成为您真正想要完成的事情的最佳方法。要明白,按照规则正常地做事是非常具有挑战性的。尝试发明自己的做事方式要困难得多。在设计网络时,如果您没有使用标准方法成功设计网络的经验,并且您知道标准方法的局限性(可能也知道这些局限性存在的原因),并且您真的知道您正在做的事情更好(以及为什么更好),那么在设计网络时,过于创造性是不可取的。否则,您可能会遇到很多问题。(我可以从一些经验中说出来。最终,我只是学会了先尝试用简单的方法做事。)
这个问题看起来像是XY问题。如果您试图完成您刚才要求之外的其他事情,请尝试创建另一个问题,询问您真正想要完成的事情。
答案2
您可以使用命令:
route add 10.10.10.10 MASK 255.255.255.255 20.20.20.20 METRIC ? IF ?
你需要在“?”处放置适当的数字。找出公制是什么,如果这里。
公制 公制:为路由指定一个整数成本度量(范围从 1 到 9999),用于在路由表中选择与要转发的数据包的目标地址最接近的多个路由时使用。将选择度量最低的路由。度量可以反映跳数、路径速度、路径可靠性、路径吞吐量或管理属性。
if 接口:指定可到达目的地的接口的接口索引。要查看接口及其对应接口索引的列表,请使用 route print 命令的显示。接口索引可以使用十进制或十六进制值。对于十六进制值,请在十六进制数前加上 0x。如果省略 if 参数,则根据网关地址确定接口。
使用命令route print
找出您需要使用的 IF 值。