Cisco与Linux的NAT

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:
Linux一直以来都使用基于连接跟踪的有状态NAT,虽然xtables-addons里面实现了无状态的静态NAT,即RAWNAT,和Cisco的NAT实现相比还是不够灵活,本文给出一个全局意义的解释,虽然这种解释对于实际的配置没有什么帮助,但是可以帮助你更好地理解Linux和Cisco的系统构建。

1.Cisco的方案

Cisco路由器显式的将inside和outside的概念邦定于物理接口,然后根据数据流的方向来定义NAT规则。使能NAT以后,系统中就会存在一张两个方向的NAT映射表,该表的表项如何填充取决于NAT是静态的还是动态的,如果是静态的,那么两个映射表在配置完成后填充,如果是动态的,那么表项在数据包第一次匹配到access-list的时候填充。Cisco的NAT配置如下:
内网出去时的源地址转换:
ip nat inside source(dynamic,static)/ip nat inside destination(static)
内网出去时的目标地址转换:
ip nat inside destination(dynamic,static)/ip nat outside source(static)
外网进内网的目标地址转换:
ip nat outside destination

2.Linux的方案

Linux从内部规定了数据包必须经过的5个HOOK点,在这些HOOK上执行,Linux的接口仅仅是一个match,NAT完全根据逻辑意义的字段进行配置,和物理接口没有任何关系。Linux的系统中没有类似Cisco的全局的NAT双向映射表,Linux的NAT表仅仅是一个target,针对所有match都匹配的数据包起作用,协议栈不会针对每一个数据包来查询NAT表以获得是否需要NAT的信息。Linux的NAT配置如下:
内网出去的目标地址转换:
iptables -t nat -A POSTROUTING $MATCHES -o $outside  -j SNAT --to-source
内网出去的目标地址转换:
iptables -t nat -A PREROUTING $MATCHES -i $inside  -j DNAT --to-destination
外网进内网的目标地址转换:
iptables -t nat -A PREROUTING $MATCHES -i $outside  -j DNAT --to-destination

3.对比

上述分析可见,Linux的NAT是针对matches在数据包的内核路径特定方向上做的一个动作,matches是必须的(即使它是空),而Cisco的NAT则是针对不同进出网络的方向的数据所做的动作,matches被独立抽出来作为一个access-list只针对动态NAT有效。
        对于Linux的实现而言,由于IP本身就是一个match,所以没有办法直接使用一条iptables规则实现类似Cisco的static nat,iptables的nat的match和target都涉及到了地址本身,也就是说强制执行下面的逻辑:只要满足某些情况,就执行某个动作!对于nat而言,执行的动作只有转换到转换后的地址,此时必须需要一个明确的match,否则将针对所有的过路包进行相同的转换,目前的iptables无法支持变量,也不支持“与”和“或”,因此远没有Cisco的nat灵活。
        对于Cisco的实现而言,动态nat和Linux的iptables实现类似,只是把match剥离出来了,此处的match就是access-list,其动作就是一个pool,这个和iptables的target是一致的,至于inside和outside,只是Cisco为接口定义的角色,不是核心。Cisco的static nat可以理解为下面的逻辑:请将源地址A转换为源地址B,同时反向将目标地址从B转换为A!这是一个祈使句,而不是Linux iptables的条件句,因此Cisco的static nat是在两个方向有效的,如果是inside的source nat,由于映射是立即生效的,所以相当于outside的destination nat也添加了,而对于Cisco的动态nat,则必须限定数据的发起方向了。
        最后我们来看一下Cisco和Linux的NAT图示:
a.Cisco NAT:


b.Linux NAT:



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1268873


相关文章
|
4月前
|
网络协议 Linux 网络架构
Linux三种网络模式 | 仅主机、桥接、NAT
Linux三种网络模式 | 仅主机、桥接、NAT
172 0
|
6月前
|
Linux 虚拟化
VMware安装Linux虚拟机之NAT模式网络配置图文详解
VMware安装Linux虚拟机之NAT模式网络配置图文详解
148 0
|
6月前
|
网络架构
【Cisco】NAT地址转换
【Cisco】NAT地址转换
38 0
|
9月前
|
Ubuntu 网络协议 Linux
嵌入式Linux开发环境搭建之七---正确设置网络使开发板ping同Ubuntu(使用NAT方式,推荐)
嵌入式Linux开发环境搭建之七---正确设置网络使开发板ping同Ubuntu(使用NAT方式,推荐)
516 0
|
Linux
Linux配置NAT
Linux配置NAT
125 0
|
负载均衡 监控 网络虚拟化
Cisco双ISP双链路NAT接入案例
Cisco双ISP双链路NAT接入案例
263 1
Cisco双ISP双链路NAT接入案例
Linux网络NAT配置和远程连接(CentOS7)
Linux网络NAT配置和远程连接(CentOS7)
Linux网络NAT配置和远程连接(CentOS7)
|
Linux 网络安全 KVM
linux KVM的网络设置方法(bridge和nat)(二)
linux KVM的网络设置方法(bridge和nat)
321 0
linux KVM的网络设置方法(bridge和nat)(二)
|
XML Linux KVM
linux KVM的网络设置方法(bridge和nat)(一)
linux KVM的网络设置方法(bridge和nat)
472 0
linux KVM的网络设置方法(bridge和nat)(一)
|
Linux
linux中 设置网络模式NAT 设置固定静态ip地址
linux中 设置网络模式NAT 设置固定静态ip地址
207 0
linux中 设置网络模式NAT 设置固定静态ip地址