分类:
2010-05-25 17:38:21
iptables是linux系统上一个重要的工具可以做很多ip包的处理。比如包过滤防火墙、端口映射、共享上网等。很多网站都有介绍iptables用法,端口映射也有介绍但是很多细节点都没有介绍到,我在这里介绍几个注意的细节点。
注意:linux系统默认情况下转发功能是关闭的
修改/proc/sys/net/ipv4/ip_forward 把内容改为1 允许转发。
1、做端口转发不一定非要是双网卡,其实单网卡也是可以做端口转发的。
2、如果做双网卡的端口转发,就“内部实际提供服务的机器”网络配置不同,使用的iptables语句也是不同的。对于“内部实际提供服务的机器”如果和做端口转换的机器的内网ip在同一个网段内,并且“内部实际提供服务的机器”的网关就是做端口转换的机器的内网ip,这种情况下只需要一条语句:
iptables -t nat -A PREROUTING -d "对外公网ip" -p tcp --dport "对外端口" -j DNAT --to "内部实际提供服务的ip":"实际提供服务的端口"
3、对于“内部实际提供服务的机器”如果和做端口转换的机器的内网ip不在同一个网段内,或者“内部实际提供服务的机器”的网关不是做端口转换的机器的内网ip,这种情况下就需要条语句:
iptables -t nat -A PREROUTING -d "对外公网ip" -p tcp --dport "对外端口" -j DNAT --to "内部实际提供服务的ip":"实际提供服务的端口"
iptables -t nat -A POSTROUTING -d "内部实际提供服务的ip"-p tcp --dport "实际提供服务的端口" -j SNAT --to "运行iptables机器的内网ip"
其实就是把公网用户对虚拟服务的访问,通过地址转换变为"运行iptables的内网地址"对实际提供服务的内网服务器的访问。为什么要多第二条语句就是因为回去的包没有通过做转换的机器,造成不能做自动的反地址转换。
4、端口转发其实就是做DNAT转换,在做DNAT转换的那个机器上(也就是iptables运行的那个机器)有记录相关转换的对应关系,回去的包如何转换用户不用管系统会处理。
5、做端口转换的情况下,iptables 的3条链中nat的链才能对端口进行防火墙过滤,其他的链无法控制。