如何使用iptables来实现NAT

运维 系统运维
如何使用iptables来实现NAT:iptables是一种集成的、便捷的IP信息包过滤系统,如果连接LAN的使用,则更有利于iptables在Linux下控制IP信息包。本文讲述的是如何使用iptables来实现NAT。

如何使用iptables来实现NAT

  一、Iptables 的使用语法

  在使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项::

  1. 对规则的操作

  加入(append) 一个新规则到一个链 (-A)的最后。

  在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。

  在链内某个位置替换(replace) 一条规则 (-R)。

  在链内某个位置删除(delete) 一条规则 (-D)。

  删除(delete) 链内第一条规则 (-D)。

  2. 指定源地址和目的地址

  通过--source/--src/-s来指定源地址(这里的/表示或者的意思,下同),通过--destination/--dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:

  a. 使用完整的域名,如“www.linuxaid.com.cn”;

  b. 使用ip地址,如“192.168.1.1”;

  c. 用x.x.x.x/x.x.x.x指定一个网络地址,如“192.168.1.0/255.255.255.0”;

  d. 用x.x.x.x/x指定一个网络地址,如“192.168.1.0/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。

  缺省的子网掩码数是32,也就是说指定192.168.1.1等效于192.168.1.1/32。

  3. 指定网络接口

  可以使用--in-interface/-i或--out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。

  4. 指定协议及端口

  可以通过--protocol/-p选项来指定协议,如果是udp和tcp协议,还可--source-port/--sport和 --destination-port/--dport来指明端口。

#p#

  二、iptabls的使用实例:

  假如有一个广域网的ip地址为a.b.c.d 网关a.b.c.x 掩码 255.255.255.252

  局域网ip地址为192.168.0.1-192.168.0.255 网关 192.168.0.1

  软件环境为:Linux7.2 选择server安装

  指定eth0:a.b.c.d eth1:192.168.0.1

  添加路油表

  1.   vi /etc/sysconfig/static-routes  
  2.  
  3.   etho net a.b.c.d netmask 255.255.255.252 gw a.b.c.x  
  4.  
  5.   eth1 net 192.168.0.1netmask 255.255.255.0 gw 192.168.0.1  
  6.  

  指定网关

  1.   vi /etc/sysconfig/network  
  2.  
  3.   NETWORKING=yes 
  4.  
  5.   GATEWAYDEV=eth0 
  6.  
  7.   GATEWAY=a.b.c.x  
  8.  
  9.   HOSTNAME=(主机名字)  
  10.  

  起用路由

  1.   vi /etc/sysctl.conf  
  2.  
  3.   net.ipv4.ip_forward=1 
  4.  
  5.   net.ipv4.conf.default.rp_filter=1 
  6.  
  7.   kernel.core_uses_pid=1 
  8.  
  9.   kernel.sysrq=0 
  10.  

  配置iptables的脚本

  建立rc.fw

  1.   #for this to run iptables firewall  
  2.  
  3.   !/bin/sh  
  4.  
  5.   /sbin/modprobe ip_tables  
  6.  
  7.   /sbin/modprobe ip_nat_ftp  
  8.  
  9.   /sbin/modprobe ip_conntrack_ftp  
  10.  
  11.   /sbin/iptables -F  
  12.  
  13.   /sbin/iptables -F -t nat  
  14.  
  15.   /sbin/iptables -X  
  16.  
  17.   /sbin/iptables -Z  
  18.  
  19.   echo"1">/proc/sys/net/ipv4/ip_forward  
  20.  
  21.   /sbin/iptables -P INPUT ACCEPT  
  22.  
  23.   /sbin/iptables -P FORWARD ACCEPT  
  24.  
  25.   /sbin/iptables -P OUTPUT ACCEPT  
  26.  
  27.   iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
  28.  
  29.   iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT  
  30.  

  上面这些是没有任何限制的iptables要想有些安全限制可以自行

  新的联接

#p#

  三、端口的转发

  假如内部有一个www 服务器 一个ftp服务器

  地址分别是192.168.0.8(www)

  192.168.0.9(ftp)

  在上面的脚本里最后添加

  1.   iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 –j DNAT --to 192.168.0.8:80  
  2.  
  3.   iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.0.9:21  
  4.  

  附录:

  -p 指定协议(--protocol)

  --dport 指明端口(--source-port/--sport和 --destination-port)

  -i 或者-o 指定网络接口(PREROUTING链用-i POSTROUTING 用-o)

  -s 指明源地址(--source/--src/源地址destination/--dst/目的地址)

  -A 加入一个新规则到一个链(一般写到最后面)(append)

  -I 在链内某个位置插入(insert)一般最后面

  -R 在链内某个位置替换一条规则

  -D 删除链内第一条规则(delete)

  -d 指明目的地址

  下面是一个iptable的脚本没有安全性能:

  1.   touch /var/lock/subsys/local  
  2.  
  3.   #for this to run iptables firewall  
  4.  
  5.   !/bin/sh  
  6.  
  7.   /sbin/modprobe ip_tables  
  8.  
  9.   /sbin/modprobe ip_nat_ftp  
  10.  
  11.   /sbin/modprobe ip_conntrack_ftp  
  12.  
  13.   /sbin/iptables -F  
  14.  
  15.   /sbin/iptables -F -t nat  
  16.  
  17.   /sbin/iptables -X  
  18.  
  19.   /sbin/iptables -Z  
  20.  
  21.   /sbin/iptables -P INPUT ACCEPT  
  22.  
  23.   /sbin/iptables -P FORWARD ACCEPT  
  24.  
  25.   /sbin/iptables -P OUTPUT ACCEPT  
  26.  
  27.   echo"1">/proc/sys/net/ipv4/ip_forward  
  28.  
  29.   /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
  30.  
  31.   /sbin/iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT  
  32.  

【编辑推荐】

netfilter/iptables系统的安装

如何用iptables实现NAT

iptables常用命令及参数

责任编辑:zhaolei 来源: 163
相关推荐

2011-03-15 14:26:23

iptablesNAT

2011-03-15 09:10:47

iptablesNAT

2011-03-16 09:05:32

RedhatiptablesNAT

2011-03-16 09:05:53

NATiptables

2011-03-16 09:05:33

2011-03-15 16:26:46

iptablesnat

2011-03-17 13:28:49

iptables na

2011-03-16 09:05:34

iptablesnat

2011-03-17 14:09:03

iptables na

2011-03-16 10:59:57

2011-03-15 14:50:03

使用IPTables

2011-03-17 13:55:23

iptablesNAT端口映射

2011-03-17 15:44:21

2011-03-15 15:20:46

2011-01-11 11:30:00

Bandwidth C带宽控制流量控制

2011-09-06 16:31:58

iptablesNAT转发

2011-03-16 13:29:33

iptables 端口

2010-05-27 11:04:32

2011-03-16 16:06:46

iptables日志MySQL

2011-09-27 11:09:13

点赞
收藏

51CTO技术栈公众号