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

官方文档/usr/share/doc/iptables/html/NAT-HOWTO.html参考http://os.51cto.com/art/201103/249046.htm http://os.51cto.com/art/201103/249054_all.htmhttp://www.server110.com/linux/201309/1417.html1.概念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 –flushiptables –delete-chain#删除所有非缺省的规则链和nat表iptables –table nat –delete-chain配置静态NAT协议该ISP分配给A单位www服务器的ip为:伪ip:192.168.1.100真实ip:202.110.123.100iptables -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协议。

但实际业务需求超出此范围,因此不实现。

将来靠自己双掌;愿你用双掌开拓出美好的梦想。

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

相关文章:

你感兴趣的文章:

标签云: