私网用户如何用公网地址访问本地私网内的SERVER
私网用户如何用公网地址访问本地私网内的SERVERNA T (Network Address Translation,地址转换)是将IP 数据报报头中的IP 地址转换为另一个IP 地址的过程。在实际应
私网用户如何用公网地址访问本地私网内的SERVER
NA T (Network Address Translation,地址转换)是将IP 数据报报头中的IP 地址转换为另一个IP 地址的过程。在实际应用中,NA T 主要用于实现私有网络访问外部网络的功能。这种通过使用少量的公有IP 地址代表多数的私有IP 地址的方式将有助于减缓可用IP 地址空间枯竭的速度。在实际应用中,可能需要提供给外部一个访问内部主机的机会,如提供给外部一个WWW 的服务器,或是一台FTP 服务器。使用NA T 可以灵活地添加内部服务器,例如,可以使用202.169.10.10作为Web 服务器的外部地址;使用202.110.10.11作为FTP 服务器的外部地址;甚至还可以使用202.110.10.12:8080这样的地址作为Web 的外部地址;还可为外部用户提供多台同样的服务器(如提供多台Web 服务器)。在实际应用当中,用户有这样的需求:本地私网用户想通过域名(SERVER 的公网地址)访问其私网的SERVER 。正常情况下是访问不了的,只有通过访问SERVER 的私网IP 地址才可以。据说其他厂家的路由器可以实现私网用户通过公网IP 地址来访问本地私网内的SERVER ,也可以通过配置私网的DNS 来解决。实现方式有很多种,本文只讨论华为-3COM 路由器是如何可以通过其他配置手段来达到私网地址可以通过公网IP 地址来访问本地私网内的SERVER 。下面方案都是建立在SERVER 可以支持配置两个IP 地址的基础之上的。
如下图所示,要求PC2通过SERVER 的公网地址1.1.1.5访问该服务器,分为两种情况来讨论:




PC1 主用地址:
1.1.1.3/24
Gateway:1.1.1.2
192.168.0.2 /24 SERVER 备用地址:
192.168.0.254
/24
,一、SERVER 的公网地址和路由器R2的公网接口不一样,有两个或两个以上公网IP
方案一:公网接口不要配置NA T SERVER
要求SERVER 支持两个IP 地址,一个是公网地址,另一个是私网地址;R2支持路由重定向。
R2上的配置数据:
acl number 2000 //定义ACL 用做接口做NA T 使用
rule 0 permit source 192.168.0.0 0.0.0.255
rule 1 deny
interface Ethernet0/0
ip address 192.168.0.1 255.255.255.0 //私网接口
interface Ethernet1/0
ip 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 网关: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.3,但是这样一般都不太现实,R1是在ISP 侧。
2、 路由器的公网接口不用配置NA T SERVER静态映射私网的IP 地址。
3、 配置一条32位的静态路由,目的地址是SERVER 的公网接口地址,下一条是
,SERVER 的私网地址。
4、 配置acl 2000,在公网接口Ethernet1/0做Easy nat,为私网用户上公网使用。
5、 因为外网用户是通过公网的IP 地址访问SERVER 的,而SERVER 已经暴露在
公网上,所以如果只想把外网用户访问SERVER 的固定端口,可以通过ACL 来做限制,防止SERVER 收到外网攻击。比如只要外网访问SERVER 的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封装报文,该报文目的地址是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收到ARP 回应信息,把报文的目的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 收到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收到后,由于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 请求后,就回应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。
方案二:公网接口配置NA T SERVER
要求SERVER 支持两个IP 地址,一个是公网地址,另一个是私网地址;R2支持路由重定向,具体配置和组网图如下:
R1


主用地址: 192.168.0.254/24
Gateway:
192.168.0.1
备用地址:
192.168.0.2 /24 SERVER 1.1.1.3
Gateway 不用配置
R2的配置:

PC1
,acl number 2000
rule 0 permit source 192.168.0.0 0.0.0.255
rule 1 deny
interface Ethernet0/0
ip address 192.168.0.1 255.255.255.0
interface Ethernet1/0
ip address 1.1.1.1 255.255.255.0
nat outbound 2000
nat server protocol tcp global 1.1.1.3 ftp inside 192.168.0.254 ftp
nat server protocol tcp global 1.1.1.3 www inside 192.168.0.254 www
与上面方案不一样的地方:
1、 公网接口做NA T SERVER发布,不需要在公网接口启用ARP 代理。
2、 SERVER 的主用地址是私网地址192.168.0.254,网关是192.168.0.1,备用地址
是公网地址1.1.1.3,但是不能配置备用地址的网关。相对于上面的方案,该方案显得要简单一些,但是两种方案都要求SERVER 支持两个IP 地址,报文转发过程可以参考上面的方案中的描述。
二、SERVER 的公网地址和路由器R2的公网接口一样,即只有一个公网地址
有时候,只一个公网IP 地址,这时候需要在R2的私网接口和私网接口做策略路由这中方案,要求R2的公网接口是点到点,公网接口Serial0/0采用借用方式,公网地址只做SERVER 的备用IP 地址使用,因为以太口不支持地址借用,如果只有一个公网IP 地址的话,R2的公网接口也要配置IP 地址,但是策略路由不支持目的地址是本地接口的策略路由转发,所以当只有一个公网IP 的时候,公网接口只能才用点到点的方式,下面是组网图和配置:
,R1

地址
主用地址: 192.168.0.254/24
Gateway:
192.168.0.1
备用地址:
192.168.0.2 /24 SERVER 1.1.1.1
Gateway 不用配置
R2的配置:
acl number 2000
rule 0 permit source 192.168.0.0 0.0.0.255
rule 1 deny
acl number 3000
rule 0 permit tcp destination 1.1.1.1 0
interface Ethernet0/0
ip address 192.168.0.1 255.255.255.0
ip policy route-policy test
interface Serial0/0
clock DTECLK1
link-protocol ppp
ip address unnumbered interface Ethernet0/0
nat outbound 2000
nat server protocol tcp global 1.1.1.1 ftp inside 192.168.0.254 ftp nat server protocol tcp global 1.1.1.1 www inside 192.168.0.254 www route-policy test permit node 10
if-match acl 3000

PC1
,apply ip-address next-hop 192.168.0.254
ip route-static 0.0.0.0 0.0.0.0 Serial 0/0 preference 60
配置解析:
1、 做策略路由主要为私网用户访问SERVER 公网地址服务的,只要私网访问
SERVER 的公网地址,就会被R2通过策略路由重定向到192.168.0.254。
2、 公网接口做NA T SERVER发布,是给公网用户访问SERVER 使用的。
报文转发过程,公网用户访问SERVER 的报文转发过程很简单,下面主要解释私网用户用公网IP 地址访问SERVER 的报文转发过程:
PC2访问SERVER 的时候,通过DNS 解析到的是SERVER 的公网IP 地址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的时候,目的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 才可以,可以根据实际情况的不同,采用不同的方案。