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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
1月前
|
网络协议 安全 网络安全
Cisco-网络端口地址转换NAPT配置
Cisco-网络端口地址转换NAPT配置
|
1月前
|
安全 网络安全 数据安全/隐私保护
Cisco-网络地址转换动态NAT
Cisco-网络地址转换动态NAT
|
1月前
|
安全 网络安全 数据安全/隐私保护
Cisco-网络地址转换静态NAT
Cisco-网络地址转换静态NAT
|
3月前
|
负载均衡 算法 Linux
在Linux中,LVS-NAT模型的特性是什么?
在Linux中,LVS-NAT模型的特性是什么?
|
3月前
|
负载均衡 算法 Linux
在Linux中,LVS-NAT模式的原理是什么?
在Linux中,LVS-NAT模式的原理是什么?
|
3月前
|
负载均衡 Linux 网络虚拟化
在Linux中,什么是NAT,常见分为那几种,DNAT与SNAT有什么不同,应用事例有那些?
在Linux中,什么是NAT,常见分为那几种,DNAT与SNAT有什么不同,应用事例有那些?
|
4月前
|
Linux 网络安全 虚拟化
Ngnix04系统环境准备-上面软件是免费版的,下面是收费版的,他更快的原因使用了epoll模型,查看当前Linux系统版本, uname -a,VMWARE建议使用NAT,PC端电脑必须使用网线连接
Ngnix04系统环境准备-上面软件是免费版的,下面是收费版的,他更快的原因使用了epoll模型,查看当前Linux系统版本, uname -a,VMWARE建议使用NAT,PC端电脑必须使用网线连接
|
5月前
|
Linux 网络安全
NAT 技术与 Linux iptables
NAT 技术与 Linux iptables
|
6月前
|
安全 网络安全 网络架构
计算机网络地址转换(NAT)
网络地址转换(NAT)允许多个主机共享一个或一组公共IP地址,同时保护内部网络的隐私和安全。NAT通常由路由器或防火墙设备执行,它充当内部网络和外部网络之间的中间人,将内部主机的私有IP地址映射到一个或多个公共IP地址上。
97 0
|
6月前
|
网络协议
地址重叠时,用户如何通过NAT访问对端IP网络?
地址重叠时,用户如何通过NAT访问对端IP网络?