首页 > 代码库 > Iptables Nat转发

Iptables Nat转发

Iptables Nat

iptables子命令:

规则:

-A:添加

-I:插入

-D:删除

-R:修改

链:

-N:新建一条自定义的链

-X:删除一条自定义的空链

-F:清空链中的规则

-Z:清空链中的计数器

-E:重命名自定连的名称

-P:修改链的默认规则

显示:

-L:

-n,-v,--line-numbers

-S:

规则定义:iptables -t table -A|-I|-R chain 匹配条件 -j target

匹配条件:

通用匹配:-s,-d,-i,-o,-p

扩展匹配:

隐含扩展

-p tcp

--sport --dport --tcp-flags

--syn

-p udp

--sport --dport

-p icmp

--icmp-type

echo-request:8

echo-reply:0

显示扩展

-m state

--state

-m multiport

--sports,--dports,--ports

-m iprange

--src-range,--dst-range

-m string

--algo {bm|kmp},--string,--hex-string

-m connlimit

--connlimit-above

-m limit

--limit n(/second|minute|hour|day),--limit-burst

-m time

--datestart,--datestop

--timestart,--timestart

--weekdays

-j

ACCEPT DROP REJECT LOG REDIRCT SNAT DNAT MASQUERADE MARK RETURN 自定义链


四表:raw mangle nat filter

五链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING


 主机防火墙:INPUT,OUTPUT

 网络防火墙:

 路由:对于Linux主机来说,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启了路由功能.

 路由表的生成:

 静态:手动添加

 动态:基于路由协议学习,RIP2,OSPF


 NAT:网络地址转换

 A:10

 B:172.16-172.31

 C:192.168.0-192.168.255


 NAT:工作在网络层和传输层

 Proxy:工作在应用层


 iptables -P FORWARD DROP


 网关必须和本地ip在同一局域网内

 一个请求进来首先交给本机,本机未匹配到再交给网关.

 172.16.0.177---{172.16.0.192|192.168.30.11}-----192.168.30.129


 # iptables -A FORWARD -d 192.168.30.129 -m state --state ESTABLISHED -j ACCEPT

 # iptables -A FORWARD -d 192.168.30.129 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT


 NAT:

 Basic Nat:静态NAT.

 NAPT:动态NAT,网络地址端口转换.

 源地址转换:SNAT,用于让内网主机访问互联网.

 目标地址转换:DNAT,让互联网上的主机访问本地内网中的某服务器上的服务.


 Iptables 基于SNAT和DNAT这两个目标实现地址转换技术.

 -j SNAT --to-source

添加到post链.


# iptables -t nat -nL

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination      


PREROUTING:主要做DNAT 

POSTROUTING  OUTPUT  主要做SNAT


 #SNAT实例;

 所有来自172.16.0.0/24的ip全部做SNAT,转换为 192.168.30.129 

       

 # iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j SNAT --to-source 192.168.30.129


 -j:MASQUERADE 地址伪装


 -j:DNAT --to-destination DIP[:PORT]


 支持端口映射


 # iptables -t nat -A PREROUTING -d 172.16.0.192 -p tcp --dport 80 -j DNAT --to-destination 192.168.30.129


 访问本地扯淡2222端口,做DNAT跳到192.168.30.129的22端口.

 # iptables -t nat -A PREROUTING -d 172.16.0.192 -p tcp --dport 2222 -j DNAT --to-destination 192.168.30.129:22


 UDP多端口转发:

 有两种写法,多端口的匹配可以使用":"匹配范围,也可以使用"-"匹配范围.

 第一种:

 #-A PREROUTING -d 192.168.30.129 -p udp --dport 41861:41868 -j DNAT --to-destination 172.16.10.192:41861-41868

 #-A POSTROUTING -s 172.16.10.192 -p udp --dport 41861:41868 -j SNAT --to-source 192.168.30.131

 匹配端口范围,但是nat转发时会端口错乱,有时转发可能并未达到想要的结果.

 第二种:

 一个端口一条的匹配.


本文出自 “蚂蚁” 博客,请务必保留此出处http://215687833.blog.51cto.com/6724358/1954138

Iptables Nat转发