NAT配置与管理
为解决IPv4地址日益枯竭,出现NAT(Network Address Translation,网络地址转换)技术。NAT可以将来自一个网络的IP数据报报头中的IP地址(可以是源IP地址或目的IP地址,或两者同时)转换为另一个网络的IP地址,主要用于实现私网用户和公网用户之间的互访。
一、NAT主要特性
在AR G3路由器中把支持的NAT特性分为三大类:动态NAT、静态NAT和NAT Server(NAT服务器),在实际应用中,分别对应配置动态地址转换、配置静态地址转换和配置内部服务器。
1、动态NAT
私网IP与公网IP之间的转换不是固定的。把需要访问公网的私网IP地址动态地与公网IP地址建立临时映射关系,将报文中的私网IP地址进行对应的临时替换,待返回报文到达设备时再根据映射表“反向”把公网IP地址临时替换回对应的私网IP地址,转发给主机,实现内网用户和外网的通信。
动态NAT的实现方式有Basic NAT和NAPT两种(Easy IP是NAPT的一种特例)。Basic NAT是一种“一对一”的动态地址转换;NAPT则通过引入“端口”变量,是一种“多对一”的动态地址转换(映射的公网端口不同)。
2、静态NAT
建立固定的一对一的公网IP地址和私网IP地址的映射。
3、NAT Server
内网向外网提供服务,内网服务器不能被屏蔽,这是一种由外网发起向内网访问的NAT转换情形。外网用户访问内网服务器,通过“公网IP地址:端口号”与服务器的“私网IP地址:端口号”的固定映射,从私网IP地址与公网IP地址的映射关系看,也是一种静态映射关系。
二、BasicNAT实现原理
Basic Nat方式属于一对一地址转换,但不是静态一对一,是动态。
内网向公网发起连接请求时,请求报文中的私网IP地址通过事先准备好的公网IP地址池动态建立私网IP与公网IP的NAT映射表项,利用映射的公网IP将报文中的源IP地址(即内网私网IP地址)进行替换。然后送达给外网的目的主机。外网主机收到请求报文后进行响应时,响应报文到达NAT设备,又将依据前面请求把我摁所建立的私网IP与公网IP映射关系反向将报文中的目的IP替换成对应的私网IP,然后送达给内部源主机。
①当内网侧Host要访问公网侧Server时,向Router发送请求报文(即Outbound方向),此时报文中的源IP为Host自己的10.1.1.100,目的IP为Server的IP:211.100.7.34。
②Router收到来自Host请求报文后,从公网地址池选取一个空闲公网IP,建立与内网侧报文源IP间的NAT转换映射表项,包括正(Outbound)、反(Inbound)两个方向,依据正向NAT表项将报文中的源IP地址转换为对应的公网IP后向公网侧发送。此时发送的报文的源IP地址是转换后的公网IP:162.105.178.65,目的IP不变,仍为Server的IP:211.100.7.34。
③当Server收到请求报文后,需向Router发送响应报文(Inbound方向),此时只须将收到的请求报文中的源IP和目的IP对调即可,即报文的源IP是Server自己的IP:211.100.7.34,目的地址是Host私网IP转换后的公网IP:162.105.178.65。
④当Router收到来自公网Server发送的响应报文后,会根据报文中的目的IP查找NAT映射表项,将报文中的目的IP转换为Host主机对应的私网IP地址(源地址不变)后向私网侧发送,此时报文中的源IP仍是Server的IP:211.100.7.34,目的IP地址转换为Host的私网IP:10.1.1.100。
Basic NAT中的请求报文转换的仅是其中的源IP地址(目的IP不变),即仅关心源IP地址;响应报文转换的仅是其中的目的IP(源IP不变),即仅关心目的IP。
三、NAPT实现原理
多对一地址转换,NAPT使用“IP地址+端口号”的形式进行转换。
NAPT请求报文中转换的仅是源IP地址和源端口号(目的IP和目的端口号不变),即仅关系源IP和源端口号;响应报文中转换的是目的IP和目的端口号(源IP和源端口号不变),即仅关心目的IP和目的端口号。不同私网主机可以转换成同一个公网IP,但转换后的端口号必须不一样。
四、EasyIP实现原理
实现原理与地址池NAPT转换原理类似,可以算是NAPT的一种特例,不同的是Easy IP方式可以实现自动根据路由器上WAN接口的公网IP地址实现与私网IP地址之间的映射(无需创建公网地址池)。主要用于将路由器WAN接口IP地址作为要被映射的公网IP地址的情形,特别适合小型局域网接入Internet情况。
五、NATServer实现原理
NAT Server用于外网用户需要使用固定公网IP地址访问内部服务器的情形。通过事先配置好的服务器的“公网IP+端口号”与服务器的“私网IP+端口号”间的静态映射关系来实现。(要先在Router上配置好静态的NAT Server转换映射表)。
①Router在收到外网用户发起的访问请求报文后(即Inbound方向),根据该请求的“目的IP:端口号”查找NAT Server转换映射表,找出对应的“私网IP:端口号”,然后用找到的结果直接替换报文的“目的IP:端口号”,最后想内网侧发送。上图外网发送的请求报文中目的IP是202.102.1.68,端口号80,经过Router转换后的目的IP和端口号为192.168.1.68:80。
②内网服务器收到由Router转发的请求报文后,向Router发送响应报文(即Outbound方向)。此时报文中的源IP、端口号与目的IP、端口号与收到的请求报文中的完全对调,即响应报文中的源IP和端口号为前面的192.168.1.68:80.
③Router收到内网服务器的响应报文后又根据该响应报文中的“源IP:端口号”查抄NAT Server转换表项,找出对应的“公网IP:端口号”,然后替换报文中的“源IP:端口号”。本例中内网服务器相应外网主机的报文的源IP和端口号是192.168.1.68:80,经Router转换后的源IP和端口号为209.102.1.68:80。
由外网向内网服务器发送的请求报文中转换的仅是目的IP和目的端口号(源IP和源端口号不变),即仅关心目的IP和目的端口号;从内网向外网发送的响应报文转换的仅是源IP和源端口号(目的IP和目的端口号不变),即仅关心源IP和源端口号。
综上总结:NAT中凡是由内网向外网发送的报文(不管是请求报文还是响应报文),在NAT路由器上转换的都是源IP地址(或同时包括源端口号),而凡是由外网向内网发送的报文(不管是请求报文还是响应报文),在NAT路由器上转换的都是目的IP地址(或同时包括源端口号)。
六、静态NAT/NAPT
静态NAT是指在进行NAT转换时,内部网络主机的IP与公网IP是一对一静态绑定的,且每个公网IP只会分配给固定的内网主机转换使用。与Basic NAT不同的只是这里先要在NAT路由器上配置好静态NAT转换映射表,而不仅是地址池。
静态NAPT是指“内部网络主机的私网IP+协议号+端口号”与“公网IP+协议号+端口号”是一对一静态绑定的,静态NAPT中的公网IP可以为多个私网IP使用。与NAPT不同的也是要先在NAT路由器上配置好静态NAPT转换映射表,而不仅是地址池。
七、NAT与路由器的本质区别
两种技术主要存在实现机制和主要应用两个方面的本质区别。
1、实现机制不同
NAT是通过解决两个网络间互访的“身份”问题来解决实现两个网络的主机的互访,即通过将报文中的源IP或目的IP转换为对方网络的IP地址来实现两个网络中的主机互访。这里报文中的IP地址转换相当于“身份”的转换,即使一个网络中的主机具有访问对方网络的合法“身份”。
路由器则是通过解决两个网络互访“渠道”问题来实现两个网络的主机的互访,即建立一条互访的“路径”(即路由表)来实现双方主机的互访,而双方传输报文中的源IP和目的IP都不变,也就是双方的“身份”并没有经过转换。
2、主要应用不同
NAT主要应用于内部局域网主机与Internet主机互访的情形(当然也可以实现两个局域网之间的互联,但这不是NAT的主要应用),解决公网IPv4不足的问题。另外,在局域网与Internet的互联中也不可能建立一个双向互访的具体路由表,一则是因为私网IP在Internet无法识别,再则因为Internet不是单一IP网段的网络。
路由之所以选择通过建立路径来实现两个网络的主机的互访,是因为路由主要都是使用私网IP,有明确IP网段的局域网之间的互联。
https://blog.csdn.net/kaoa000/article/details/52368106
NAT配置与管理的更多相关文章
- 绝对实用 NAT + VLAN +ACL管理企业网络
在企业中,要实现所有的员工都能与互联网进行通信,每个人各使用一个公网地址是很不现实的.一般,企业有1个或几个公网地址,而企业有几十.几百个员工.要想让所有的员工使用这仅有的几个公网地址与互联网通信该怎 ...
- Juniper srx防火墙NAT配置
一.基础操作说明: 1. 设备恢复出厂化 root# load factory-default root# set system root-authentication plain-text-pas ...
- Linux基础五:网络配置与管理
五.网络配置与管理 1.网络知识 2.命令 ifconfig命令 <=> ip addr show 命令--查看本地所有网卡配置信息 ens32:本地以太网网卡,lo:本地回环网卡 ...
- Azure Redis Cache (4) 配置和管理Redis Cache
<Windows Azure Platform 系列文章目录> 我们在创建完Azure Redis Cache后,经常需要切换Redis Cache的服务级别,这里我简单介绍一下使用Azu ...
- mysql多实例的配置和管理
原文地址:mysql多实例的配置和管理 作者:飞鸿无痕 多实例mysql的安装和管理 mysql的多实例有两种方式可以实现,两种方式各有利弊.第一种是使用多个配置文件启动不同的进程来实现多实例,这种方 ...
- 【Ubuntu】NAT配置
1.简介 2.配置 1.简介 NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程.在实际应用中,NAT 主要用于 ...
- Network Object NAT配置介绍
1.Dynamic NAT(动态NAT,动态一对一) 实例一: 传统配置方法: nat (Inside) 1 10.1.1.0 255.255.255.0 global (Outside) 1 202 ...
- 分享:linux下apache服务器的配置和管理
linux下apache服务器的配置和管理. 一.两个重要目录: Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式: Apac ...
- 关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
今天我是特别的郁闷,本来项目做到一半,以前都好好的,结果下午就出现问题,苦逼的到现在才解决.它出现问题的时候都一声不坑, ,(天啦,现在才发现CSDN啥时候把QQ表情给整过来了)就在注册用户的时候,咦 ...
随机推荐
- 使用NPOI导入Excel注意日期格式和数字格式
//使用NPOI导入Excel public static DataTable importExcelToDataSetUsingNPOI(string FilePath, string fileNa ...
- 【python】计算器
from __future__ import division import sys from math import * from PyQt4.QtCore import * from PyQt4. ...
- Android显示全局Dialog
1.需求:Dialog只能依附于某个具体的Activity显示,当我们需要一个全局的不依赖于某个Activity的Dialog时,应该怎么创建?类似于QQ消息提醒框 2.分析:我们可以在Service ...
- Android系统开发(3)——Makefile的编写
Makefile是什么? makefile的作用: 1.project文件组织,编译成复杂的程序 2.安装及卸载我们的程序 Makefile使用演示样例 在/home/username/makefil ...
- python之list去重
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: 复制代码代码如下: ids = [1,2,3,3,4,2,3,4,5,6,1]news_ids = ...
- 《Sqlserver》Javaweb项目链接sqlserver 2008R2时出现的一系列的错误
好久没有弄java,玩eclipse了,最近因为小小的原因,参加一个比赛,不得不把javaweb的东西又捡起来,所以不熟悉,再加上之前链接数据库都是用Oracle的,现在公司的电脑上又只是安装了sql ...
- hdu4691(后缀数组)
算是后缀数组的入门题吧. 思路无比简单,要是直接套模板的话应该很容易秒掉. 关于后缀数组看高中神犇的论文就可以学会了 算法合集之<后缀数组——处理字符串的有力工具> 话说这题暴力是可以过了 ...
- Codeforces Round #210 (Div. 1).B
经典的一道DP题. 题目明显是一道DP题,但是比赛的时候一个劲就在想怎么记录状态和转移.最后想到了一种n^3的方法,写了下,不出所料的超时了. 看了别人的代码才发现竟然是先二分然后再进行DP,像这种思 ...
- 【BZOJ4367】[IOI2014]holiday假期 分治+主席树
[BZOJ4367][IOI2014]holiday假期 Description 健佳正在制定下个假期去台湾的游玩计划.在这个假期,健佳将会在城市之间奔波,并且参观这些城市的景点.在台湾共有n个城市, ...
- jpa双向一对一关联外键映射
项目结构: Wife package auth.model; import javax.persistence.CascadeType; import javax.persistence.Column ...