static stateless 2-way NAT on Linux with iptables的应用实例

前面几天,我完成了一个static stateless 2-way NAT,写了几篇文章,但是着重于理论分析,本文来展示一个应用实例。在具体展示实例之前,先说一个static stateless 2-way NAT和Linux原生conntrack NAT的区别,static stateless 2-way NAT并不会限制连接的数量,因为它不用维护连接状态,也就没有了最大值的限制,其次,如果static stateless 2-way NAT的算法更好些,它的效率会更高。在哈尔滨长春旅游的那些天,我曾经想过,能不能用这种stateless的方式实现一个NAPT呢?后来觉得很难,因为在TCP/IP协议层面,一个特定的连接中的5元组是不能发生变化的(UDP协议视情况而定),这就要求NAPT在完成5元组唯一性映射的时候需要识别出一个连接,这就不再是stateless了,而是stateful了,一个例子就可以说明这种情况,假设连接A的数据包a的5元组被映射到了{sip-1,dip-1,tcp,sport-1,dport-1},此后这个连接断开了,问题是如果过去很久以后又有相同5元组的TCP连接来到怎么办呢?解决这个问题的办法就是为一个entry维护一个timer,这样...这样还不如直接用conntrack NAT呢....
       首先给出一个简单的拓扑图:
<client>eth0:192.168.10.1
|
|
eth0:192.168.10.254
<FWD>[NAT BOX]
eth1:192.168.184.254
|
|
eth0:192.168.184.1
<FWD>                           
eth1:192.168.1.1
|
|
<server>eth0:192.168.1.8
在上面简单的拓扑中,我希望的是在client可以拉取1.2.1.2上的网页,而1.2.1.2是映射到server上的,此外,端口由12345映射到80。这个映射是完全无状态的,用我的static stateless 2-way NAT来完成。
       在我还没有做好iptables接口之前,我使用procfs文件系统接口,那个时候还没有dev支持,命令如下:
echo ‘+1.2.1.2 192.168.1.8 dst tcp port-map 12345 80 ‘ >/proc/net/static_nat
echo ‘+192.168.184.250 192.168.184.154 src tcp‘ >/proc/net/static_nat
后来有了更为方便的iptables接口,事情起了变化,我可以用熟悉的iptables命令来配置了,依然在nat表配置规则:
[email protected]:~# iptables-save
# Generated by iptables-save v1.4.21 on Sun Dec 28 03:23:22 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [1484:204554]
-A PREROUTING -j STATIC-2-WAY-NAT --mapaddr 192.168.184.250-192.168.184.154 --type src --proto all --mapport 0-0 --dev eth1
-A POSTROUTING -j STATIC-2-WAY-NAT --mapaddr 1.2.1.2-192.168.1.8 --type dst --proto tcp --mapport 12345-80 --dev eth0
COMMIT
# Completed on Sun Dec 28 03:23:22 2014
[email protected]:~#
除了可以完成配置之外,我保留了一个统计信息,可以看出有多少个数据包以及多少个字节经历了NAT。统计信息的查看方式如下:
[email protected]:~# cat /proc/net/static_nat Source trans table:
From:192.168.184.250 To:192.168.184.154    [ALL STATIC] [eth1] [Bytes:1080  Packet:23]
From:192.168.1.8     To:1.2.1.2            [TCP AUTO] Port map[From:80    To:12345] [eth0] [Bytes:124  Packet:3]

Destination trans table:
From:1.2.1.2         To:192.168.1.8        [TCP STATIC] Port map[From:12345 To:80   ] [eth0] [Bytes:180  Packet:4]
From:192.168.184.154 To:192.168.184.250    [ALL AUTO] [eth1] [Bytes:5348  Packet:90]
[email protected]:~#
展示统计信息的粒度是很重要的,当然,如果能表示都有哪些数据包经历了NAT并可以打印数据包的超级详细信息,那是再好不过的了,但是那样会损失大量的时间和空间,所以只能求取舍了。

时间: 2025-01-02 21:57:40

static stateless 2-way NAT on Linux with iptables的应用实例的相关文章

在Linux上实现一个可用的stateless双向静态NAT模块

关于Linux上如何配置NAT的资料已经不少,可谓铺天盖地!本文与此无关.本文提供一种iptables之外的方式.iptables?不!why?因为iptables配置的NAT是stateful的,它的实现依赖一个叫做conntrack的模块,什么是conntrack?Oh,NO!这可是我的专长,但我不想在本文中说它,认识我的人都知道,我扯这个话题我能扯上12个小时...都还扯不完.也许你不知道什么是stateful NAT,但是如果你是一个有心人,或者说是一个技术还算精湛的Linux网络管理员

Linux服务器集群架构部署搭建(二)linux防火墙iptables使用及NAT共享

第一章 外网防火墙部署企业应用 1.1 生产中iptables的实际应用 ①iptables是基于内核的防火墙,功能非常强大,基于数据包的过滤!特别是可以在一台非常低的硬件配置下跑的非常好.iptables主要工作在OSI七层的2.3.4层.七层的控制可以使用squid代理+iptables. ②iptabes:生产中根据具体情况,一般,内网关闭,外网打开.大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,所以大并发的情况下,我们使用硬件防火墙的各方面做的很仔细.s

Netruon 理解(11):使用 NAT 将 Linux network namespace 连接外网

学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GRE/VxLAN 虚拟网络 (4)Neutron OVS OpenFlow 流表 和 L2 Population (5)Neutron DHCP Agent (6)Neutron L3 Agent (7)Neutron LBaas (8)Neutron Security Group (9)Neutro

Linux防火墙--iptables学习

iptables是Linux系统提供的一个强大的防火墙工具,可以实现包过滤.包重定向.NAT转换等功能.iptables是免费的,iptables是一个工具,实际的功能是通过netfilter模块来实现的,在内核2.4版本后默认集成到了Linux内核中. 一. iptables的构成 1. 规则(rules) 规则是iptables对数据包进行操作的基本单元.即"当数据包符合规则定义的条件时,就按照规则中定义的动作去处理". 规则中定义的条件一般包括源地址/端口.目的地址/端口.传输协

Linux之iptables原理详解

本文和大家分享的主要是linux中iptables原理相关内容,一起来看看吧,希望对大家学习linux有所帮助. 目录: 一.netfilter与iptables 二.filter.nat.mangle等规则表 三.INPUT.FORWARD等规则链和规则 四.Linux数据包路由原理 五.iptables编写规则 一 .netfilter与iptables (1)Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许

Linux Firewall ---iptables

Linux Firewall---iptables iptables 命令格式: iptables [-t TABLE] {-OPTION} [chain] [rulenum][rule-sepecification] TABLE : raw.mangle.nat.filter 过滤规则应用于filter.NAT规则应用于nat.用于修改分组数据的特定规则应用于mangle.而独立于Netfilter连接跟踪子系统起作用的规则应用于raw. OPTION: Object:chain A(Appe

Linux之Iptables防火墙概述~

Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实现过滤和机制,属于典型的包过滤防火墙(或称之为网络层防火墙). Netfilter和Iptables区别: Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(kernel space,又称为内核空间)的防火墙功能体系. Iptables:指的是Linux防护墙的命令工具,程序通常位于/sbin/iptables,属于"用户态"(User sp

LInux下iptables配置

linux下IPTABLES配置详解 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [[email protected] ~]# iptables -L -nChain INPUT (policy ACCEPT)target       prot opt source                 destination Chain FORWARD (policy ACCEPT)targ

linux块设备驱动之实例

前两篇blog已经基本熟悉了块设备的相关结构,这里来总结下ldd3中提到的一些块设备驱动例题: 1.注册:向内核注册个块设备驱动,其实就是用主设备号告诉内核这个代表块设备驱动 sbull_major = register_blkdev(sbull_major, "sbull"); if (0 >= sbull_major){ printk(KERN_WARNING "sbull: unable to get major number!\n"); return