将碰到的好帖子做一个集合
NAT分析(内网用户通过域名访问服务器)
下面是我对两个帖子的学习整理
第一个帖子
环境假设
内网服务器的私网地址为192.168.2.251,将服务器的80端口映射至202.101.1.1的80端口上,并申请域名www.sina.com,内网PC机的IP地址为192.168.2.2在路由器外网口配置如下命令:
sys acl number 2000
rule permit source 192.168.2.0 0.0.0.255
quit
int g0/0
//外网口
ip address 202.101.1.1 255.255.255.0
nat server protocol tcp global 202.101.1.1 www indise 192.168.2.251 www
nat outbound 2000 quit
数据流程分析
一. 外网用户通过域名或者公网IP地址应该可以访问服务器
- 外网用户发起到202.101.1.1的TCP 80端口的连接,IP报头结构如下:源IP:外网用户的公网IP,目的IP:202.101.1.1
- 数据经过路由,到企业边源路由器,由于外网口上有端口映射,则数据会匹配映射,将IP报头结构改变成:源IP:外网用户的公网IP,目的IP:192.168.2.251
- 数据经过内网路由,交到服务器,服务器回应用户数据,IP报头结构如下:源IP:192.168.2.251,目的IP:外网用户的IP
- 数据经过边界路由器出公司,由于NAT Server的优先级高于NAT Outbound,所以,数据到达路由器后会先匹配NAT Server记录的会话表项,将IP报头转换成:源IP:202.101.1.1,目的IP:外网用户的公网IP
- 数据最终通过公网路由到达访问用户,数据访问成功
二. 内网用户通过域名是不能访问服务器的
- 内网用户发起DNS请求,域名解地址为202.101.1.1,客户机发出请求,IP报头结构如下:源IP:192.168.2.2,目的IP:202.101.1.1
- 数据到达路由器后,由于路由器上有202.101.1.1的直连路由,数据直接交到外网口,由于外网口配置有NAT Server,目的IP被转换后发到服务器,IP报头结构如下:源IP:192.168.2.2,目的IP:192.168.2.251
- 服务器收到数据后,发现源IP就是一个本地IP地址,此时服务器就不会以202.101.1.1为ip回复,而是以192.168.2.251为源地址回复。此时的IP数据包结构为:源IP:192.168.2.251,目的IP:192.168.2.2
- 数据将到客户机后,客户机认为,自己请求的是202.101.1.1的数据,但是收到的是192.168.2.2发送的,则认为这个数据不是自己要的,此时会丢弃掉该数据,从而引起TCP等待超时,导致无法访问
三.未解决问题,可在内网口设置
- acl number 3000
- rule permit ip source 192.168.2.0 0.0.0.255 destination 192.168.2.251
- quit
- int g0/1
- //内网口 nat outbound 3000
- nat server protocol tcp global 202.101.1.1 www inside 192.168.2.251 www
- quit
四.再在内网域名访问服务器,查看数据流程
- 内网用户发起DNS请求,域名解析为202.101.1.1地址,客户机发出请求,IP报头结构如下:源IP:192.168.2.2,目的IP:202.101.1.1
- 数据交到路由器的内网口,首先匹配端口映射,将目的IP更换掉,此时IP报头结构如下:源IP:192.168.2.2,目的IP:192.168.2.251
- 路由器发现该数据为内网数据,会再从内网口发出去,此时再匹配nat outbound,将源IP换掉,此时IP报头结构为:源IP:192.168.2.1,目的IP:192.168.2.251
- 服务器收到数据后响应请求,回复数据包IP报头结构为:源IP:192.168.2.251,目的IP:192.168.2.1
- 数据到达路由器后,根据NAT Outbound和NAT Server的记录表项,将源IP和目的IP替换掉,此时IP报头结构为:源IP:202.101.1.1,目的IP为192.168.2.2
- 数据到达客户,目的IP和源IP正确,访问成功
五.如果有一个假设
现在我们假设没有nat server protocol tcp global 202.101.1.1 www inside 192.168.2.251 www,
来看一下数据报文是否能完整地走完:(目前MSR路由器上的端口映射配置全局有效,不需要再在内网口配置该命令了。)
- 内网用户发起DNS请求,域名解析为202.101.1.1地址,客户机发出请求,IP报头结构如下:源IP:192.168.2.2,目的IP:202.101.1.1
- 数据将到路由器,由于外网口上有端口映射,则数据会匹配映射,将IP报文结构改变成: 源IP:192.168.2.2,目的IP:192.168.2.251
- 数据将到路由器内网口,匹配nat outbound,将源IP地址变掉,IP报文结构改变成:源IP:192.168.2.1,目的IP:192.168.2.251
- 数据交至服务器,服务器回复报文,IP报头为:源IP:192.168.2.251,目的IP:192.168.2.1
- 路由器收到后,匹配内网口NAT Outbound的记录表项,将其IP报头改为:源IP:192.168.2.251,目的IP:192.168.2.2
- 数据直接交给客户机,客户机依然认为不是自己请求的数据,丢弃,继续等待,超时,失败
第二个帖子
Add caption |
最后的最后,我是这样解决自己路由器问题的,登录官网,发现自己路由器貌似不支持端口回流,然后在线咨询客服,得知在NAPT上添加一条规则即可,作用接口是LAN口