您好,欢迎来到九壹网。
搜索
您的当前位置:首页[Linux用户空间编程-5]:用IPTable实现NAT功能_iptable nat

[Linux用户空间编程-5]:用IPTable实现NAT功能_iptable nat

来源:九壹网

第1章 NAT功能概述

1.1 什么是NAT
1.2 为什么要进行NAT

我们来看看再什么情况下我们需要做NAT。

因为只在应用层以下进行处理,不但可以获得很高的访问速度,而且可以无缝的支持任何新的服务或应用。

还有一个方面的应用就是重定向,也就是当接收到一个包后,不是转发这个包,而是将其重定向到系统上的某一个应用程序。最常见的应用就是和squid配合使用成为透明代理,在对http流量进行缓存的同时,可以提供对Internet的无缝访问。

另一种情况就是4G/5G的DUT,需要在私网和公网之间进行转换。

1.3 NAT的类型

第2章 IP Table概述

2.1 IP Table概述

Lnux系统中,防火墙(Firewall),网址转换(NAT),数据包(package)记录,流量统计,这些功能是由Netfilter子系统所提供的,而iptables是控制Netfilter的工具.
iptables将许多复杂的规则组织成成容易控制的方式,以便管理员可以进行分组测试,或关闭、启动某组规则。

iptable能够为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptable只读取数据包头,不会给信息流增加负担,也无需进行验证。

2.2. Iptable的链和表结构

2.3 五个链(chain)

PREROUTING: 在数据包进入防火墙之后、路由判断之前对数据包进行修改

INPUT: 在数据包被路由到本地之后,但在用户空间程序看到它之前对数据包进行修改

OUTPUT: 用户空间程序处理数据包后,由本地发出,再次被路由之前更改数据包

POSTROUTING: 在所有路由判断之后,对数据包进行修改

注意: 链 是每个数据包流需要经过的不同环节,你可以在不同的环节根据需要设置不同的过滤策略,每个链的默认策略都是Accept

2.4  四个表(table)

**Mangle表:**这个表主要用来mangle包,你可以使用mangle匹配来改变包的一些属性,比如 TOS(TYPE OF SERVICE),TTL (TIME TO LIVE),MARK(后续流量控制TC等)

Filter表:此表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的. iptalbe中,要用 -t 参数指定要操作哪个表,如果没有 -t 参数,就默认对filter表操作.

Raw表: 优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

注意: 表 是规则的集合组,每个表中的规则条目是按顺序匹配的,你可以在数据包经过的不同环节设置规则,表的处理优先级:raw > mangle > nat > filter

2.5 详细的数据包流程

在上图中,NAT的功能发生在三个地方:

2.5 IP Table操作命令处理流程

在用户空间的IP table命令,会通过内核接口,操作内核的Ip_table规则表,并最终操作的是内核空间的Netfilter钩子函数。

第3章 IP Table对Nat的支持命令

3.1 IP Table对NAT的支持概述

netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组 成。并且系统缺省的**表是"filter"。**因为系统缺省的表是"filter",所以在使用filter功能时,我们没有必要显式的指明"-t filter"。

但在使用NAT的时候,我们所使用的表不再是"filter",而是"nat"表,所以我们必须使用**"-t nat**"选项来显式地指明这一点。

同filter表一样,nat表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:

**(2)POSTROUTING:**可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。

(3)OUTPUT:定义对本地产生的数据包的目的NAT规则。

3.1 对规则的操作

加入(append) 一个新规则到一个链 (-A)的最后。

在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。

在链内某个位置替换(replace) 一条规则 (-R)。

在链内某个位置删除(delete) 一条规则 (-D)。

删除(delete) 链内第一条规则 (-D)。

3.3 通过命令指定具体的源地址和目的地址

使用完整的域名,如“www.linuxaid.com.cn”;

3.4 通过命令指定网络接口

可以使用–in-interface/-i或–out-interface/-o来指定网络接口。

3.5 指定协议及端口

可以通过–protocol/-p选项来指定协议,如果是udp和tcp协议,还可–source-port/–sport和 --destination-port/–dport来指明端口。

3.6 内核开关与编译

(1)编译

Linux内核对Nat的支持,是需要打开内核选项的。

编译内核,编译时选中以下选项:
Full NAT
 MASQUERADE target support
 REDIRECT target support

(2)加载ko

要使用NAT表时,必须首先载入相关模块:

modprobe ip_tables

modprobe ip_nat_ftp

iptable_nat 模块会在运行时自动载入。

第4章 实际操作案例解析

需要注意的时,大多数情况下,

而公网到私网的转换是1对多

4.1 源NAT(SNAT)

这里需要注意的是,系统在路由及过虑等处理直到数据包要被送出时才进行SNAT。

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

4.2 目的SNAT(DNAT)

这里需要注意的是,系统是先进行DNAT,然后才进行路由及过虑等操作。

第5章 综合例子

5.1 案例1:使用拨号局域网上网

小型企业、网吧等多使用拨号网络上网,通常可能使用代理,但是考虑到成本、对协议的支持等因素,建议使用ip欺骗方式带动区域网上网。

成功升级内核后安装iptables,然后执行以下脚本:

#载入相关模块
modprobe ip_tables
modprobe ip_nat_ftp
#进行ip伪装
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

5.2 案例2:ip映射

我们假设以下情景:

该ISP分配给A单位www服务器的ip为:

伪ip:192.168.1.100

真实ip:202.110.123.100

该ISP分配给B单位www服务器的ip为:

伪ip:192.168.1.200

真实ip:202.110.123.200

内网接口eth1:192.168.1.1

接口eth0:202.110.123.1

然后我们将分配给A、B单位的真实ip绑定到防火墙的接口,以root权限执行以下命令:

ifconfig eth0 add 202.110.123.100 netmask 255.255.255.0
ifconfig eth0 add 202.110.123.200 netmask 255.255.255.0

成功升级内核后安装iptables,然后执行以下脚本:

#载入相关模块
modprobe ip_tables
modprobe ip_nat_ftp

首先,对防火墙接收到的目的ip为202.110.123.100和202.110.123.200的所有数据包进行目的NAT(DNAT):

iptables -A PREROUTING -i eth0 -d 202.110.123.100 -j DNAT --to 192.168.1.100
iptables -A PREROUTING -i eth0 -d 202.110.123.200 -j DNAT --to 192.168.1.200

iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 202.110.123.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.200 -j SNAT --to 202.110.123.200

这样,所有目的ip为202.110.123.100和202.110.123.200的数据包都将分别被转发给192.168.1.100和 192.168.1.200;而所有来自192.168.1.100和192.168.1.200的数据包都将分别被伪装成由 202.110.123.100和202.110.123.200,从而也就实现了ip映射.

附录:NAT、DNAT和MASQUERADE进一步比较

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务