科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道路由器私网客户端访问同网段服务器公网IP

路由器私网客户端访问同网段服务器公网IP

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

路由器私网客户端访问同网段服务器公网IP的实现办法

来源:论坛整理 2008年11月6日

关键字: 网络技术 路由交换 路由器

  • 评论
  • 分享微博
  • 分享邮件
路由器私网客户端访问同网段服务器公网IP的实现办法

    一、网络拓扑

   

    二、问题说明

    1、企业网内部的工作站通过出口路由器的NAT转换能够上Internet网。

    2、企业网(目前来说大部分是教育网)内部有一些服务器,如图中的Server,本身具有私网IP地址10.0.0.3,而且需要被公网所访问,所以需要在企业网的出口处对其做静态NAT转换,将其转换为一个公网IP地址2.0.0.5。企业外部的公网用户通过该服务器公网IP或解析后的域名对其进行访问,而企业内部的工作站如果使用公网上的一台DNS,那么也将使用域名对该服务器进行访问。

    3、企业网(目前来说大部分是教育网)内部还有一些服务器,如图中的Game-Server,它本身具有公网IP地址,它也既需要被私网用户所访问,也需要被公网用户所访问。

  三、解决方案

    1、常规配置:

    就按照拓扑图中的配置方法,WorkStation应该是可以访问到服务器Server的,只不过需要公网路由器的参与。具体过程是WorkStation发出一个以Server的公网IP(2.0.0.5)为目标地址的数据包,源地址是10.0.0.2,这个数据包经过Router时,它会首先遵从路由表进行路由, 2.0.0.5这个地址虽然属于运营商分给我们的一段公网IP的一部分,但由于该地址并不与任何接口同属一个网段,所以路由器只会按照缺省路由路由这个数据包到公网路由器,从物理端口向外发出时,NAT会起作用,这个数据包的源IP会被替换为2.0.0.1(地址池里的第一个地址)。当公网路由器收到这个数据包时,它查目标地址所在网段,发现这个地址已经被分给该企业网,所以会遵从那条路由将该数据包发回到Router。此时这个数据包的源IP是2.0.0.1,目标IP为2.0.0.5,Router查NAT表发现2.0.0.5这个公网IP应按照配置了的静态NAT表项转换为10.0.0.3,所以当路由器把这个数据包发给Server时,数据包的目的IP就被转换成了10.0.0.3,而源IP仍为2.0.0.1。当Server回复这个数据包时也按照对等的方式返回WorkStation。总结地说,就是这个过程是需要公网路由器参与完成的,而公网设备对我们来说是不可控的,所以当公网路由器因为某种原因拒绝参与这个过程时(比如出口链路断),这种访问方式将变为不可行。而且数据包要在企业网与公网的路由器之间走了一个环,浪费了带宽及设备的性能资源。
    采用这种方法时,我从WorkStation上用tracert命令数据包的行走路径,更清晰地反应了这一过程:

    C:\Documents and Settings\bluephoenix>tracert 2.0.0.5

    Tracing route to 2.0.0.5 over a maximum of 30 hops

      1    <1 ms    <1 ms    <1 ms  10.0.0.1
      2    <1 ms    <1 ms    <1 ms  1.1.1.2
      3     *        *        *     Request timed out.
      4     3 ms     3 ms     3 ms  2.0.0.5

    2、DNS解析

    不论私网用户和公网用户他们访问服务器时实际上一般都是通过DNS来完成的。让私网用户将DNS指向私网内的一台可管理DNS也可以解决这个问题,即修改DNS中关于Server的解析记录,让其指向Server的私网IP即可,改过之后用户就可以使用通常的域名对该服务器进行访问了,只不过该过程是透明的,用户并不知道已经使用了私网IP在进行访问。

    这种方法对我们来说比较轻松,没有给我们增加维护成本,请大家尽量说服用户采用这样的方法,但该方法应用场合有限,如果私网用户非要使用公网IP地址而不是域名来对Server进行访问,这种方法就行不通了,那就必须采取第三种方法。

    3、loopback与策略路由法

    Router的配置步骤为:

    (1) 建立loopback接口,随便配置一个IP地址,并将其设为ip nat ouse

    (2) 建立Access-list,用来匹配私网客户端访问Server以及Server做回应的数据流

    (3) 定义policy-route table,设置策略缺省路由指向loopback接口,设置ip policy-route enable。

    (4) 定义route-map,设定匹配Access-list的数据流都使用策略路由;并将这一route-map应用到接口。

    (5) 建立一个null 0接口,并由ip nat pool所形成的路由指向null 0接口,以防止不能命中NAT规则的报文在企业网路由器和公网路由器之间震荡。(这一步不是必须的,但为了稳定起见,建议作这一步;另外只能在这种方法中使用指向null 0的路由,如果在第一种方法中使用了,那么数据包将不会在企业网路由器和公网路由器之间环游一周,而直接被陷在企业网路由器中了,将导致第一种方法失败。)

    (6) 对于G系列路由器,由于微引擎目前不支持loopback接口,所以只能看有没有空闲的物理接口(注意:一定要物理接口),如果有,就将该物理接口配置成loopback,然后按照M系列的做法配置,如果空闲接口是以太网口,那就还要配置PR路由下一跳ARP表,注意一定要将下一跳MAC配置成该空闲以太网口的MAC地址。

  四、后话

    以上这三种方法虽然解决了这个问题,但可以说并不完美,由于“nat流程需要较大改动”,所以“暂不考虑在HOS上实现,等闲下来再考虑”。

    如果这种需求还在不断地增长,相信研发会“较大改动”,最终真正解决这个问题。这一问题源于NAT,也希望随着IPV6的应用,而使这个问题最终自行消灭。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章