iptables是linux自带的防火墙,功能很强大,但我一般不用它,因为限制比较严格。前段时间需要做一个NAT的包转发,于是就想到了这个工具。
要使用iptables的NAT功能,首先,要启动它的包转发功能,其实就是将/proc/sys/net/ipv4/ip_forward这个文件内容修改为1。但一般这个文件都是被占用的状态,不能够修改,因此,使用如下命令修改:
# echo "1" > /proc/sys/net/ipv4/ip_forward
如此,修改成功了。注意这样修改在每一次系统重新其中之后,该文件的内容仍然会是0,因此我们可以再rc.local中添加这样一句:
# cat /etc/rc.local
….
echo "1" > /proc/sys/net/ipv4/ip_forward
….
ok添加完成。
现在,iptables能够进行包转发了,但是如果使用iptables 的命令,仍然没有用,这是为什么呢?因为,没有启动iptables的守护进程,在此,我们启动iptables的守护进程:
#/etc/init.d/iptables start
启动之后,iptables会默认添加一些规则,这个时候会发现linux已经无法连接,且无法ping通,怎么去掉这些限制呢?
我们可以使用iptables的选项,清空这些规则表,命令如下:
# iptables -F
okay,清空了,现在可以连接,也可以ping通了。
我们先扎起就可以为iptables添加一些策略了,用于NAT数据包的转发。
使用如下命令,对数据包进行转发:
#iptables -t nat -A POSTROUTING -s x.x.x.x/24 -j SNAT –to-source y.y.y.y
这条命令的含义是将源IP为x.x.x.x这个c类网络地址过来的数据包全部转发至ip y.y.y.y,当然,这个前提是,你的linux要有两块网卡。
好了,nat做好了,但是我发现,每当我重启,这些配置就没有了。原来,我没有将配置保存,可以使用如下命令保存配置:
#iptables-save
再次reboot,发现nat还是无法转发,奇怪,使用ps查看进程,发现linux中iptables的守护进程没有启动,原来,iptables没有自启动,用一下命令将iptables加入自启动:
#chkconfig on iptables
现在,iptables就完成nat的工作了。
有一些朋友可能说,我的外网网口是dhcp的,如何做nat呢?我又不像自己敲命令,怎么办呢?这好办,我将以上这些内容写了一个shell脚本,分享给大家:
# Iptables   NAT shell script . Create by Rice.
#!/bin/bash
service iptables start
iptables -F
echo "1" > /proc/sys/net/ipv4/ip_forward
local_ip=($( ifconfig | grep addr: | grep -v "x.x.x.x" | grep -v "127.0.0.1" | awk -F ‘Bcast’ ‘{print $1}’ | awk -F ‘addr:’ ‘{print $2}’ ))
iptables -t nat -A POSTROUTING -s x.x.x.x/24 -j SNAT –to-source $local_ip
注意,这个脚本中内网的ip地址最好是固定的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注