单口NAT的超级详细通俗的解释

前些天,在网上看到些关于单口nat的配置,发现此配置全部出于一人之手,而且注释的很不明白,cisco官方站上也没有说的很明白,我现在给大家详细解释一下他的原理!

以下对照此帖讲解,可能不太方便,见谅!

首先,什么是单口nat,各位,不知道你们遇到过这种情况没有,就是有一条adsl线路,但是每台机器只有一块网卡,想实现所有机器共享上网,你们说怎么办呢?^_^,可以花5块钱再买块网卡,这当然简单了,但是我们做技术的就要想想其他方法,呵呵呵.挑战一下自己.单口nat说白了就是路由上就一个口,还必须要做nat以便访问外网,这和传统的两口nat,一个inside,一个
outside的方式不一样了,一个口,一条链路,必须承载两个网络的信息,一个是内网,一个是公网.所以,要求这个口设两个地址,一个与内网交互,一个与isp交互.实际的拓扑是这样的:isp过来的线路直接接入交换机,而不是路由器,路由器也接入交换机的一个口,它的作用只是做nat,把包的原地址和回包的目的地址重新封装一下,如图所示(见原帖),内网主机如果要向外网主机发包,这些包到了路由的以太口后,经过一系列的转换,最终又从以太口出来,到了isp端.

下面详细分析一个包的来去流程,这样大家就都明白了.

内网一台主机(172.16.1.1)要向公网一个地址发包,他当然是先转发给网关了,所以网关收到了包,按照顺序,路由器先检查策略路由项,然后才走正常路由,现在路由发现,这个包匹配了access-list 101 permit ip 172.16.1.0 0.0.0.255 any这一句,所以他把这个包路由到loopback口.说明一下:loopback之所以叫回环接口,就是因为,到了这个口的包会从这个口出去,立即又回来了,哈哈哈,可能不好理解,因为这是个虚拟口,路由器怎么使唤他都行,所以有这个功能,在这里,包从这个口出去的时候,由于包的来源是以太口(nat inside),出口是loopback口(nat ouside),所以在这个回环口包做了一次nat,源地址被变成池中地址(ip nat pool pool1 192.168.0.2 192.168.0.3)的一个,好,这个nat后的包从环口出去,转了转(俺也实在不知道他到哪儿去转去了),又准备从loopback口再回到路由内部,但是这一次,路由对包不作任何改变,因为nat outside,ip nat inside "source"......只对从路由内部出去的包做nat.好了,现在包的源地址是,比如192.168.0.2,目的地址还是公网的那个你要访问的地址,这个包下一步还要接受路由的检查,由于loopback口没有配置ip policy route-map,所以这次只匹配常规路由,好,看看原帖…………,除了直连路由外,就是缺省路由了(ip route 0.0.0.0 0.0.0.0 192.168.0.6 ),所以他终于把这个包成功路由到了isp.(好累啊).

再说说回来的包,外网要给本地的对外地址(192.168.0.2)回应了,本地路由的以太口通过交换机收到了isp发过来的包,由于这个包对于路由器来说是从内向外走得(路由并不知道其实以太连接的是isp),所以要先路由,后nat,好,路由器同样先匹配策略路由,看看原帖.................,他匹配了这一句:access-list 101 permit ip any 192.168.0.0 0.0.0.7,因为原地址是公网地址,也就是"any",所以他路由到loopback口,在环口,这个包又将要被nat一次了,但是,请注意,这里,这个包不符合nat的要求,请看看:ip nat inside source list 10 pool pool1 overload ,access-list 10 permit 172.16.1.0 0.0.0.255,由于这个包的原地址并不在access-list 10所规定的范围内,所以包没有被nat,这也是这个技术最巧妙的地方,这样包保留了原地址的真实性!! 好,这个包又从环口又溜达回来了,注意::!!!由于路由器已经做过nat动作了,所以本身保存了一张nat表,由于包从loopback
进来的,所以对于路由器来说是从外流向内,所以路由器要先nat,后路由,所以他要匹配nat表了,好,他检查到目的地址192.168.0.2实际上对应着内部主机172.16.1.1,所以他把包的目的地址nat成172.16.1.1,好, 现在接受路由匹配(好麻烦啊!呵呵),看看...................,由于从loopback口进入不用匹配策略路由,所以查常规路由,发现目的地址172.16.1.1存在于直连路由中,所以最终发到了以太口,最终到达目的主机:172.16.1.1.

对于adsl单网卡代理,也是同样的道理,只不过路由器还成了主机而已,而且装了些代理软件,比如ccproxy,这些软件的功能就是和上述的路由器一样,实现单口nat.单接口NAT配置实例 精典,转贴大家测试下


单接口NAT配置实例

条件:

1、IOS在12.1(5)T9及以上版本。更低版本未做验证。

2、至少具有两个或多个ISP提供的的global地址。

实现思路:

1、将ISP提供的地址作为secondary地址配置在以太接口上。该以太接口同时作为inside接口。作为内部主机的网关。

2、 创建一个loopback接口做为nat的outside.

3、使用route-map,强行将内部网出去的数据包及从外部返回的对应数据包路由到loopback接口。

实例:

拓朴如下图所示:

配置如下:

interface Loopback0

  ip address 172.16.2.254 255.255.255.252

  ip nat outside

!

//创建一个loopback接口,并作为NAT outside接口。

interface Ethernet0

  ip address 192.168.0.1 255.255.255.248 secondary

  ip address 172.16.1.254 255.255.255.0

  ip Nat inside

  ip policy route-map rm-nat

!

//在E0接口上配置172.16.1.254做为IP,同时将ISP提供的地址做为Secondary地址。e0做为inside接口。

在本接口上应用rm-nat这个route-map

ip nat pool pool1 192.168.0.2 192.168.0.3 prefix-length 29

ip nat inside source list 10 pool pool1 overload

//常规NAT配置

ip classless

ip route 0.0.0.0 0.0.0.0 192.168.0.6

ip route 172.16.1.0 255.255.255.0 Ethernet0

access-list 10 permit 172.16.1.0 0.0.0.255

//配置路由及NAT所需要的access-list

access-list 101 permit ip 172.16.1.0 0.0.0.255 any

access-list 101 permit ip any 192.168.0.0 0.0.0.7

//配置route-map所需要的acl。第一句匹配出去的包,第二句匹配返回的包。

route-map rm-nat permit 10

  match ip address 101

  set ip next-hop 172.16.2.254

//配置所需要的route-map,凡是满足access-list 101条件的包均被转发到172.16.2.254(loopback0接口)。 文章录入:csh    责任编辑:csh

(0)

相关推荐

  • 单口NAT的超级详细通俗的解释

    前些天,在网上看到些关于单口nat的配置,发现此配置全部出于一人之手,而且注释的很不明白,cisco官方站上也没有说的很明白,我现在给大家详细解释一下他的原理! 以下对照此帖讲解,可能不太方便,见谅! 首先,什么是单口nat,各位,不知道你们遇到过这种情况没有,就是有一条adsl线路,但是每台机器只有一块网卡,想实现所有机器共享上网,你们说怎么办呢?^_^,可以花5块钱再买块网卡,这当然简单了,但是我们做技术的就要想想其他方法,呵呵呵.挑战一下自己.单口nat说白了就是路由上就一个口,还必须要做

  • 单物理接口NAT的总结

    要想正确地理解单物理接口NAT,需要正确地理解NAT条件和处理顺序.以下配置引用了坛子里的内容,对被引用内容的原作者表示感谢. 一:从inside到outside的NAT 1.有inside和outside接口2.inside接口接收到NAT"感兴趣的包"(由ACL定义)3.检查是否有经过outside接口到外网的路由(先策略路由后常规路由).4.执行NAT,源地址被NAT转换.5.被转换的包经outside接口转发出去. 二:从outside到inside的NAT 1.NAT表中是否

  • 一份超级详细的Vue-cli3.0使用教程【推荐】

    主要内容: 零配置启动/打包一个 .vue 文件 详细的搭建过程 重点推荐:使用图形化界面创建/管理/运行项目 安装: 卸载旧版本: 如果你事先已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先卸载它: npm uninstall vue-cli -g Node版本要求: 3.x需要在 Node.js 8.9或更高版本(推荐8.11.0+),点击这里可以安装node 大多数人都安装过了node,使用下面的命令行 查询你的node版本 : node -v 如果你的版本不够,可

  • 基于logback 实现springboot超级详细的日志配置

    前言 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用).其中性能最高的应该使 logback 了,而且 springboot 默认使用的也是 logback 日志,所以本篇将会详细的讲解 logback 的日志配置方案. 本篇主要内容如下: •logback 配置文件的构成 •如何将日志输出到文件 •如何按时间,按大小切分日志 •如何将让一个日志文件中只有

  • python中pygame安装过程(超级详细)

    安装时是需要设置python环境变量的,下载python的时候底下有个小框框(没有默认选中) Add Python 3.7 to PATH需要选择的,如果没有选择的话,需要自己设置,我一般比较懒,卸载了python重新下载的,让下载器自动设置. 然后是python版本问题 有人疑问这是64位还是32位,看那个[64bit]是64位,至于后面的on32是在windows上使用的意思,在Linux上使用就显示别的了. 然后检查pip的安装 如果显示No module named -pip 那么就是p

  • python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例

    PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于显示信息,给用户提示,一般叫做label域,第二列需要用户进行选择或输入,一般叫做field域,label与field的关系就是label关联field QFormLayout表单布局的使用实例 import sys from PyQt5.QtWidgets import QApplication

  • Android Studio下载、安装和配置+SDK+tools下载(无敌超级详细版本)

    下载: Anderson Studio是Google为Android提供的官方IDE工具,下载地址:http://www.android-studio.org/ 下载3.4.1.0版本地址:ctrl+f 查找3.4.1.0 直接下载3.4.1.0的下载地址:https://dl.google.com/dl/android/studio/install/3.4.1.0/android-studio-ide-183.5522156-windows.exe 安装环境要求 : 其中JDK的最低版本是1.

  • 超级详细实用的pycharm常用快捷键

    1.注释(添加/消除)(Ctrl + /) 这里说下Python的单行注释是 # , 多行注释是 '''注释内容''' ,  java的单行注释是 // , 多行注释 /* 注释内容 */,  文档注释 /** 注释内容 */ 这里说的注释快捷键主要用于多行注释, 当你想把一段代码暂时注释掉的时候, 可以直接选中这段代码, 利用此快捷键, 想恢复的时候用同样的操作即可. 2.代码右移/左移(Tab / Shift + Tab) Python中对代码的缩进非常严格, 会直接导致语法错误, 正常的缩

  • C++输入流和输出流 超级详细

    目录 1.简单介绍 2.C++输入流和输出流 1.简单介绍 C++ 又可以称为"带类的 C",即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象).在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf() .gets() 等函数从键盘读取数据,使用 printf() .puts() 等函数向屏幕上输出数据: 使用 fscanf() .fgets() 等函数读取文件中的数据,使用 fprintf() .fputs() 等

  • idea构建web项目的超级详细教程

    目录 1.idea构建web项目 1.新建一个空项目 2.新建java模块,名为webDemo1 3.选择webDemo1右键,选择Add Framework Support 4.在WEB-INF下新建文件夹classes和lib 5.打开项目结构(Project Structure) 6.项目配置 7.模块配置 8.Facets配置,这里制定了web目录不是一个普通的文件夹,而是web项目 9. 配置Artifacts 10. 添加Tomcat 11.配置Deployment. 12.添加项目

随机推荐