解决方法: 多数组织会从他们的ISP处获取为数不多的可被路由的IP地址。由于这些地址有限,管理员需要找到一种方法来使内部网络内的多台主机共享有限的IP地址访问外部网络。使用私有IP地址是一种常用的允许所有内部网络节点共享地址正确访问内外网络的方法。边缘路由器(例如防火墙)可以接收来自外网的访问并且将其转发到内部网络指定主机,与此同时防火墙/网关也能够将来自内网的数据转发到互联网上去。但是这种转发是十分危险的,因为一些比较新的黑客工具可以假扮内部网络的主机来欺骗外部地址。而iptables则提供了路由策略和转发规则来防止这种情况的发生。 防火墙的FORWARD策略可以帮助管理员控制应该对来自哪些内网主机的数据包进行转发。 例如:要允许整个内网的数据向外部网络转发(这里假设内部网络接口是eth1),防火墙规则应该被设置为: iptables -A FORWARD -i eth1 -j ACCEPTiptables -A FORWARD -o eth1 -j ACCEPT 提示:默认情况下IPv4在红帽企业版Linux内核中的地址转发功能没有开启,这样的话这台Linux服务器就无法成为一台边缘路由器。如果要开启该功能,执行下面的命令: sysctl -w net.ipv4.ip_forward=1 如果是通过shell终端执行的该命令,所设置的参数在下次开机之后会失效。可以通过修改/etc/sysct..conf文件来永久应用该配置,在该文件中找到上述定义,并将0替换成1。并且执行下面的命令来应用配置: sysctl -p /etc/sysctl.conf 通过上面的配置,如果Linux服务器连接两个内部网络,这两个内部网络中的主机可以相互访问,但是他们仍然不能访问外部网络。如果要使内部网络中的节点通过私有IP地址访问外部公共网络,需要对防火墙配置地址伪装功能。这样就能使内部私有网络通过防火墙访问外部公共网络。(在该例子中,外部网络是eth0): iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
NAT是Network Address Translation--网络地址转换,当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC1632中有对NAT的说明。