1、 私网用户如何用公网地址访问本地私网内的 SERVERNAT(Network Address Translation,地址转换)是将 IP 数据报报头中的 IP 地址转换为另一个 IP 地址的过程。在实际应用中,NAT 主要用于实现私有网络访问外部网络的功能。这种通过使用少量的公有 IP 地址代表多数的私有 IP 地址的方式将有助于减缓可用 IP地址空间枯竭的速度。在实际应用中,可能需要提供给外部一个访问内部主机的机会,如提供给外部一个 WWW 的服务器,或是一台 FTP 服务器。使用 NAT 可以灵活地添加内部服务器,例如,可以使用 202.169.10.10 作为 Web 服务器的外部地址
2、;使用 202.110.10.11作为 FTP 服务器的外部地址;甚至还可以使用 202.110.10.12:8080 这样的地址作为 Web 的外部地址;还可为外部用户提供多台同样的服务器(如提供多台 Web 服务器) 。在实际应用当中,用户有这样的需求:本地私网用户想通过域名(SERVER 的公网地址)访问其私网的 SERVER。正常情况下是访问不了的,只有通过访问 SERVER 的私网 IP 地址才可以。据说其他厂家的路由器可以实现私网用户通过公网 IP 地址来访问本地私网内的 SERVER,也可以通过配置私网的 DNS 来解决。实现方式有很多种,本文只讨论华为-3COM 路由器是如何可
3、以通过其他配置手段来达到私网地址可以通过公网 IP 地址来访问本地私网内的SERVER。下面方案都是建立在 SERVER 可以支持配置两个 IP 地址的基础之上的。如下图所示,要求 PC2 通过 SERVER 的公网地址 1.1.1.5 访问该服务器,分为两种情况来讨论:1.1.1.2 /24 1.1.1.1/24Eth1 192.168.0.2 /24 主用地址:1.1.1.3/24 Gateway:1.1.1.2备用地址:192.168.0.254 /24 192.168.0.1 /24 Eth0 Eth1/0 Eth0/0 R1 R2 PC1PC2 SERVER 2.2.2.1 /242
4、.2.2.2/24一、SERVER 的公网地址和路由器 R2 的公网接口不一样,有两个或两个以上公网 IP方案一:公网接口不要配置 NAT SERVER要求 SERVER 支持两个 IP 地址,一个是公网地址,另一个是私网地址; R2 支持路由重定向。R2 上的配置数据:acl number 2000 /定义 ACL 用做接口做 NAT 使用rule 0 permit source 192.168.0.0 0.0.0.255rule 1 denyinterface Ethernet0/0ip address 192.168.0.1 255.255.255.0 /私网接口interface Et
5、hernet1/0ip address 1.1.1.1 255.255.255.0 /公网接口nat outbound 2000 /做 Easy NAT,为私网 IP 访问外网使用arp-proxy enable /做 ARP 代理,为 R1 访问 SERVER 使用ip route-static 1.1.1.5 255.255.255.255 192.168.0.254 preference 60 ip route-static 0.0.0.0 255.255.255.255 1.1.1.2 preference 60 SERVER 的上的配置:主用 IP 地址:1.1.1.3/24 网关:
6、1.1.1.2(只要保证和主用 IP 地址在同一个网段就可以了) 。下面是关键配置,可能比较难了解为什么这样配置:备用 IP 地址:192.168.0.254/24 网关:不要配置配置一条静态 ARP:arp s 1.1.1.2 00E0-FC5B-7E58 (此 MAC 是 R2 的 Eth0/0 接口的 MAC 地址) 1、 公网接口如果是以太口,那么一般要求在该接口上启用 ARP 代理,这是因为ISP 在向用户分配 IP 地址的时候,SERVER 的公网 IP 地址和路由器的公网接口 IP 地址一般是同一个网段的。还有一种方法就在 R1 上做一条 32 位掩码的主机路由指向 1.1.1.
7、3,但是这样一般都不太现实,R1 是在 ISP 侧。2、 路由器的公网接口不用配置 NAT SERVER 静态映射私网的 IP 地址。3、 配置一条 32 位的静态路由,目的地址是 SERVER 的公网接口地址,下一条是SERVER 的私网地址。4、 配置 acl 2000,在公网接口 Ethernet1/0 做 Easy nat,为私网用户上公网使用。5、 因为外网用户是通过公网的 IP 地址访问 SERVER 的,而 SERVER 已经暴露在公网上,所以如果只想把外网用户访问 SERVER 的固定端口,可以通过 ACL来做限制,防止 SERVER 收到外网攻击。比如只要外网访问 SERVE
8、R 的WWW 端口,可以通过 ACL 做响应的限制,然后在公网接口的 inbound 方向下发 ACL。6、 SERVER 的公网网关的 IP 地址静态 ARP,主要是用来封装 SERVER 发出去的报文,MAC 是 R2 的 Eth0/0,可以把报文的目的 MAC 封装为 R2 的 Eth0/0 的MAC,这样就把报文发给 R2。7、 SERVER 的备用 IP 地址作用是响应 R2 发出的重定向报文使用的。8、 报文转发过程:PC2(私网用户)访问 SERVER 域名的报文转发过程,经过 DNS 解析到公网地址是 1.1.1.3,而后 PC2 就用 1.1.1.3 封装报文,该报文目的地址
9、是 1.1.1.3,源地址是192.168.0.2。PC2 把报文送给网关 R2 处理,R2 根据报文的目的地址(1.1.1.3) ,查询路由表发现一个 32 位的静态路由,其下一条指向 Ethernet1/0 接口下192.168.0.254,由于报文的入接口和出现接口是一样,所以 R2 发出重定向报文告知 PC2,实际的下一条是 192.168.0.254,然后 PC2 发出 ARP 请求,来解析192.168.0.254 的 MAC 地址。SERVER 收到 ARP 请求报文后,回应 ARP 响应报文给 R2,告知 192.168.0.254 的 MAC 是自己的 MAC。R2 收到 A
10、RP 回应信息,把报文的目的 MAC 封装为 SERVER 的 MAC 地址后,再发给 SERVER,SERVER 收到报文后进行上层处理;SERVER 回应报文给 PC2 报文的目的 IP 地址是192.168.0.2,源地址是 1.1.1.3。SERVER 查看本地路由表发现 192.168.0.2 是本地的一条直连路由(因为 SERVER 的备用 IP 地址是 192.168.0.254) ,然后 SERVER发出 ARP 请求解析 192.168.0.2 的 MAC 地址。PC2 收到 ARP 请求后,就回应ARP 响应信息给 SERVER,告知其 MAC 是多少。SERVER 收到
11、ARP 回应后,就把目的 MAC 封装为 PC2 的 MAC 地址,发给 PC2 处理,以后的报文转发都不需要经过 R2 来处理,直接在 PC2 和 SERVER 之间进行,这样就完成报文发送和接受过程。PC1(公网用户)访问 SERVER 域名的报文转发过程,PC1 发出的报文的目的 IP地址是 SERVER 的主用 IP 地址(1.1.1.3) ,源地址是本身 IP 地址(2.2.2.2) ,由于源地址和目的地址不在同一个网段,所以送网关 R1 处理。R1 收到报文后,根据报文的目的 IP 地址查看本地路由表,发现 1.1.1.3 匹配是本地的直连路由网段,发出 ARP 请求。 R2 收到
12、后,由于 R2 的公网接口(Eth1/0 )启用了 ARP 代理,并且本地有一条 32 掩码的路由,就回应 ARP 响应信息给 R1,告知 R1 其 MAC 地址是自己的接口的 MAC 地址,R2 收到 ARP 回应信息后,就把 R2 的 Eth1/0 接口的MAC 做为目的 MAC 封装报文,发给 R2。R2 收到报文后,根据目的 IP 地址查看本地路由表,发现一条 32 位掩码的主机路由,其下一条是 192.168.0.254,然后发出 ARP 请求解析 192.168.0.254 的 MAC 地址。因为 192.168.0.254 是 SERVER 的备用 IP 地址,所以收到 ARP
13、请求后,就回应 ARP 响应信息给 R2。R2 就用SERVER 的 MAC 来封装报文,发给 SERVER,SERVER 收到报文就进行上层处理;当 SERVER 回应报文给 PC1 的时候,目的 IP 地址是 2.2.2.2 源地址是1.1.1.3,SERVER 就送网关处理,由于网关的地址是 1.1.1.2,并且已经通过手动配置了网关的 ARP 表项(注意 ARP 表项的 MAC 一定要是 R2 的私网接口的 MAC地址) ,所以 SERVER 用 R2 的私网接口的 MAC 来封装报文发给 R2。R2 收到该报文后,查看路由表发给 R1,然后 R1 再发给 PC1。方案二:公网接口配置
14、 NAT SERVER要求 SERVER 支持两个 IP 地址,一个是公网地址,另一个是私网地址; R2 支持路由重定向,具体配置和组网图如下:2.2.2.1 /24 2.2.2.2/241.1.1.2 /24 1.1.1.1/24Eth1192.168.0.2 /24 主用地址:192.168.0.254/24 Gateway:192.168.0.1备用地址:1.1.1.3 Gateway不用配置192.168.0.1 /24 Eth0 Eth1/0 Eth0/0 R1 R2 PC1PC2 SERVER R2 的配置:acl number 2000rule 0 permit source 1
15、92.168.0.0 0.0.0.255rule 1 denyinterface Ethernet0/0ip address 192.168.0.1 255.255.255.0interface Ethernet1/0ip address 1.1.1.1 255.255.255.0nat outbound 2000nat server protocol tcp global 1.1.1.3 ftp inside 192.168.0.254 ftpnat server protocol tcp global 1.1.1.3 www inside 192.168.0.254 www与上面方案不一样
16、的地方:1、 公网接口做 NAT SERVER 发布,不需要在公网接口启用 ARP 代理。2、 SERVER 的主用地址是私网地址 192.168.0.254,网关是 192.168.0.1,备用地址是公网地址 1.1.1.3,但是不能配置备用地址的网关。相对于上面的方案,该方案显得要简单一些,但是两种方案都要求 SERVER 支持两个 IP 地址,报文转发过程可以参考上面的方案中的描述。二、SERVER 的公网地址和路由器 R2 的公网接口一样,即只有一个公网地址有时候,只一个公网 IP 地址,这时候需要在 R2 的私网接口和私网接口做策略路由这中方案,要求 R2 的公网接口是点到点,公网接
17、口 Serial0/0 采用借用方式,公网地址只做 SERVER 的备用 IP 地址使用,因为以太口不支持地址借用,如果只有一个公网 IP 地址的话,R2 的公网接口也要配置 IP 地址,但是策略路由不支持目的地址是本地接口的策略路由转发,所以当只有一个公网 IP 的时候,公网接口只能才用点到点的方式,下面是组网图和配置:2.2.2.1 /24 2.2.2.2/241.1.1.2 /24 Eth1192.168.0.2 /24 主用地址:192.168.0.254/24 Gateway:192.168.0.1备用地址:1.1.1.1 Gateway不用配置192.168.0.1 /24 Ser
18、ial1/0 Serial0/0 借用Eth0/0地址Eth0/0 R1 R2 PC1PC2 SERVER R2 的配置:acl number 2000rule 0 permit source 192.168.0.0 0.0.0.255rule 1 denyacl number 3000rule 0 permit tcp destination 1.1.1.1 0interface Ethernet0/0ip address 192.168.0.1 255.255.255.0ip policy route-policy testinterface Serial0/0clock DTECLK1l
19、ink-protocol pppip address unnumbered interface Ethernet0/0nat outbound 2000nat server protocol tcp global 1.1.1.1 ftp inside 192.168.0.254 ftpnat server protocol tcp global 1.1.1.1 www inside 192.168.0.254 wwwroute-policy test permit node 10if-match acl 3000apply ip-address next-hop 192.168.0.254ip
20、 route-static 0.0.0.0 0.0.0.0 Serial 0/0 preference 60配置解析:1、 做策略路由主要为私网用户访问 SERVER 公网地址服务的,只要私网访问SERVER 的公网地址,就会被 R2 通过策略路由重定向到 192.168.0.254。2、 公网接口做 NAT SERVER 发布,是给公网用户访问 SERVER 使用的。报文转发过程,公网用户访问 SERVER 的报文转发过程很简单,下面主要解释私网用户用公网 IP 地址访问 SERVER 的报文转发过程:PC2 访问 SERVER 的时候,通过 DNS 解析到的是 SERVER 的公网 IP
21、地址1.1.1.1,那么报文的目的地址是 1.1.1.1,源地址就是 192.169.0.254。由于源地址和目的不在同一个网段,PC2 送网关 R2 处理,R2 收到此报文后,由于策略路由优先匹配,报文下一跳变成 192.168.0.254。PC2 发出 ARP 请求解析 192.168.0.254 的MAC 地址,SERVER 收到 ARP 请求后,回应 ARP 信息给 PC2。然后 PC2 用SERVER 的 MAC 地址来封装报文(此时报文的目的 MAC 地址是 SEVER 的 MAC地址) ,发给 SERVER,SERVER 收到此报文送给上层处理。SERVER 回应报文给PC2 的
22、时候,目的 IP 地址是 192.168.0.2,由于此地址和 SERVER 的主用地址是同一个网段,可以直接发给 PC2,注意此时报文的源地址是 1.1.1.1。以后报文转发是直接在 PC2 和 SERVER 之间进行了,不需要再经过 R2。综上所述,三种方案都要求路由器支持路由重定向和 SERVER 支持配置两个IP 地址,目前华三的路由器都支持路由重定向,而且大部分 SERVER 都支持配置两个 IP 地址,三种方案都有一定局限性,是目前私网用户不用公网地址访问本地私网的 SERVER 问题的补救措施,特别是最后一种方案,当用户只申请一个公网IP 地址的时候,路由器只能通过点到点方式连接公网。从经在实验室中用以太口连接公网,公网 IP 地址在 R2 的公网接口和 SERVER 都配置了,策略路由偶尔可以生效,但是大部分都是不可以的,因为华三路由不支持目的地址是本地的报文进行策略路由转发,至少目前还不行。在上面结束的三种方案中,条件允许的话,推荐用方案二。实际上除了上面讨论的三种方案之外,还有一种方案,就是在 PC2 上配置一条路由目的地址就是 SERVER 的公网地址 1.1.1.1,下一跳是 SERVER 的私网地址,这不需要在 R2 上做策略路由,一个公网 IP 地址也可以。但是这种方案,只能用在局域网内比较少的 PC 才可以,可以根据实际情况的不同,采用不同的方案。