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 注意,这个脚本中内网的ip地址最好是固定的。 (责任编辑:IT) |