您的位置:首页 > 运维架构 > Linux

Linux下netfilter/iptables使用(V3.0)

2014-04-18 18:05 295 查看
官方文档/usr/share/doc/iptables/html/NAT-HOWTO.html

参考http://os.51cto.com/art/201103/249046.htm
http://os.51cto.com/art/201103/249054_all.htm http://www.server110.com/linux/201309/1417.html
1.概念

NAT网络地址转换,分为SNAT,DNAT,即源地址转换和目标地址转换,分别用于上行链路和下行链路。

netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。并且系统缺省的表是"filter"。但是在使用NAT的时候,我们所使用的表不再是"filter",而是"nat"表,所以我们必须使用"-t nat"选项来显式地指明这一点。

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

PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;

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

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

2.命令

一般语法如下:

iptables [-t table] command [match] [target]

-j MASQUERADE

用于外网口public地址是DHCP动态获取的(如ADSL)

3.处理流程

PREROUTING DNAT翻译——>再过滤(FORWARD)——>最后路由

路由——>再过滤(FORWARD)——>最后才进行POSTROUTING SNAT地址翻译

_____ _____

/ \ / \

PREROUTING -->[Routing ]----------------->POSTROUTING----->

\D-NAT/ [Decision] \S-NAT/

| ^

| |

| |

| |

| |

| |

| |

--------> Local Process ------

4.linux下nat定义与网络协议中的nat/pat协议的对应关系为

静态NAT协议,一个内网ip对应一个外网ip。

动态NAT协议,若干个内网ip,对应一个外网IP。

5.命令举例

# 删除刷新缺省表如”filter”, 其它表如”nat”需清楚标明:

iptables --flush # 刷新所有过滤规则和NAT表.

iptables --table nat --flush

iptables --delete-chain

#删除所有非缺省的规则链和nat表

iptables --table nat --delete-chain

配置静态NAT协议

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

伪ip:192.168.1.100

真实ip:202.110.123.100

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

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

动态NAT协议

1.地址池建议参考http://www.server110.com/linux/201309/1417.html

上行

更改所有来自192.168.1.0/24(子网)的数据包的源ip地址为1.2.3.4-1.2.3.6(外网IP地址池)

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6

下行

将所有目的地址为1.2.3.4-1.2.3.6的数据转发给192.168.1.0/24子网

iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.1-192.168.1.254

2.上联口为动态ip的情况(DHCP / PPPoE)

## Masquerade everything out ppp0.

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

注意:

MASQUERADE只能用于postRouting链,那么下行的时候,数据该怎么办呢

另外,该选项如果增加对端口的要求,则只能适用与TCP或者UDP。

3.PAT

此协议是思科私有协议,中移动不要求。目前依靠IPtablse不能实现。因为针对端口的映射

iptablse命令为

## Change source addresses to 1.2.3.4, ports 1-1023

# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023

要求必须为UDP或者TCP协议。

但实际业务需求超出此范围,因此不实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: