职场小白必备知识点-地址转换
  H1iS5RmfeTkf 2023年11月19日 19 0

需求背景

客户内网有台服务器提供80端口的服务,现在A公司内部员工可以正常地从内网访问,访问的方式为http://192.168.0.1,现在客户想从B公司也可以访问这个服务器;

职场小白必备知识点-地址转换_数据


从路由的角度来看,我们面临的一个问题是:

公网不存在私网的路由。

从数据走向的角度来看,我们要从B公司访问A公司内网服务器的话,数据肯定是要先经过A公司的外网设备routerA,而这点,我们是可以做到的;假如我们设置某些规则,我们从B公司访问routerA之后,让routerA替我们将访问的数据传给web server的话,那么客户的需求就可以实现了;

实现过程

PC-B访问routerA,routerA转换之后将数据传给web server;

职场小白必备知识点-地址转换_抓包_02


源地址转换

我们如何实现PC-B访问routerA?

数据的封装过程如下:

源ip、源mac都是PC-B,目的ip是202.101.102.11,PC-B经过计算之后,发现该目的ip和自己不是同一个网段的,于是将数据交给自己的网关172.16.1.1/24处理;于是目的mac封装网关的mac。

routerB有一个默认路由(缺省路由),这个路由是指向公网的网关;当PC-B的数据达到routerB之后,它查找路由之后,直接将数据包交给公网,公网设备按照目的ip一直查路由,将数据送到routerA。

此时router收到的数据包应该是这样的:

源ip是PC-B,目标IP是202.101.102.11(routerA本身);也就是说,此时routerA必须要完成一项任务,将一个“确认收到了”的数据包返回去;这个返回去的数据包必须经过公网,但是,公网是不会有私网的路由的;于是这个包无情地被丢弃了;导致我们的假设在第一步就夭折了;

解决这个问题的关键是,我们需要将PC-B的访问过去的数据送给routerA的时候不是私网ip就可以了;显然,我们将PC-B的ip变成routerB的出口ip之后,就可以解决问题了;这就是源地址转换技术(SNAT);事实上,我们现在访问Internet都是利用此技术实现的。

具体的实现方案是这样的:

内网的数据从routerB的出接口出去之后,routerB将数据包的源地址替换为自己的出口ip,并且打上标记,待该数据包返回来的时候再做反向转换;于是PC-B离开routerB的时候,源地址就变成了103.114.201.13,所以routerA只需要回复数据包给103.114.201.13就可以了;

目的地址转换(端口转换)

我们的第一步计划已经实现,现在routerA已经收到数据包了,我们需要在routerA上也做某些规则来实现我们的需求。

现在PC-B发出的访问数据是http://202.101.102.11,可以预见,routerA收到的数据包里,目的ip是202.101.102.11,目地端口是80;(http数据不做端口指定的话,默认是80端口),于是我们在routerA做这样一个规则:

当我收到目的地址是202.101.102.11,并且目的端口是80的数据的时候,我就要将数据转送给192.168.0.1的80端口(也可以选择不转换端口);这就是目的地址、目的端口转换。

我们还可以这样做,比如PC-B的访问数据是http://202.101.102.11:8001,也就是说,routerA收到的数据包里,目的ip是202.101.102.11,目的端口是8001,;我们设置的规则就应该是:收到数据包的目的ip是202.101.102.11,目的端口是8001,就转换给192.168.0.1的80端口;

相关排错

假如我们设置好规则之后,访问仍然异常,排查思路就按照数据的走向进行排查;

排查PC-B是否可以正常到达routerB,通过抓包可以证实;

排查PC-B的数据离开routerB之后,源ip是否已转换正确,通过抓包可以证实;

从routerB是否可正常访问routerA的8001端口(若我们使用的是8001转换给内网的80端口),TCP端口都可以通过telnet测试,另外,通过抓包可以证实;

数据包是否正常送达routerA,通过在routerA上抓包证实;

routerA是否将数据包按照我们设置的规则进行正常转换,通过抓包证实;

routerA是否可以将数据包正常送达web server,并且是送达指定端口;

Web server收到包之后的返回包是否是返回给routerA,假如不是的话,PC-B是无法收到回应包的。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
  eHipUjOuzYYH   2023年12月07日   24   0   0 数据乐观锁redis
  jnZtF7Co41Wg   2023年12月09日   26   0   0 客户端服务端数据
H1iS5RmfeTkf