当前位置: > Linux服务器 > iptables >

iptables 实现NAT转发数据包

时间:2014-12-10 23:25来源:linux.it.net.cn 作者:IT

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地址最好是固定的。



(责任编辑:IT)
------分隔线----------------------------