网络地址转换(NAT)是用于将一个地址域(如:专用Intranet)映射到另一个地址域(如:Internet)的标准方法。NAT允许一个机构专用 Intranet中的主机透明地连接到公共域中的主机,无需内部主机拥有注册的(以及越来越缺乏的)Internet地址。 Internet工程任务组意识到目前地址空间(即所谓的IPv4)即将会耗尽已经有近十年时间了。尽管即将出现的IPv6被视作为解决Internet 不断发展的长期解决方案,但是在过去几年中还提出了其它一些短期解决方案。
我这里写的主要是如何配置一个NAT 服务器,关于NAT 的知识,大家不妨到网上google 一下,
有很多讲这个的咚咚。如果连这个也懒得去做的话,我就推荐你去中国IT 认证实验室linux 架站文
件系列中的一篇NATserver(http://www.chinaitlab.com/www/special/linux11.asp),你也可以在这里
(http://linux.vbird.idv.tw/)找到它的原文,不过是繁体的,看起来可能有些麻烦。在我看来这个作
者是一个很牛的人,却自称菜鸟,佩服!如果有时间的话,可以将他所写的一系列的文章都看看,
您会受益匪浅的!
好了下面开始讲如何配置NAT 服务器,我的环境是这样的:
服务器端:
1. 操作系统:Linux 2.6 核心
2. 双以太网卡:eth0 用于连接内部网络,内部IP 为:10.20.10.174
eth1 用于连接外部网络,外部IP 为:159.226.41.140
3. 使用iptables 配置NAT 服务
客户端:
1. Windows XP 客户端
2. Linux 客户端
配置步骤:
服务器端配置:
一. 首先将双网卡都驱动起来,并配置好其对应的IP 地址。
如果您的机器这部分已经配置好了的话,就可以直接进入第2 步,使用iptables 配置NAT 服务
了,否则请随着我一步步来。配置双网卡,最好一个个的来,而且最好两个网卡不是同一个型号的
芯片。具体为什么我也不清楚,有的人说不这样容易出错。这部分内容可以参考这两篇文章,讲述
的很是详细。安装网卡(http://www.chinaitlab.com/www/special/linux3.asp#3),在架设NAT 时安装
双网卡(http://www.chinaitlab.com/www/special/linux11.asp#9)
二. 使用iptables 模块配置NAT 服务:
以上是我的一些简单的配置,对于复杂的配置,您可能还需要加入许多的内容哟.
我这里写的主要是如何配置一个NAT 服务器,关于NAT 的知识,大家不妨到网上google 一下,
有很多讲这个的咚咚。如果连这个也懒得去做的话,我就推荐你去中国IT 认证实验室linux 架站文
件系列中的一篇NATserver(http://www.chinaitlab.com/www/special/linux11.asp),你也可以在这里
(http://linux.vbird.idv.tw/)找到它的原文,不过是繁体的,看起来可能有些麻烦。在我看来这个作
者是一个很牛的人,却自称菜鸟,佩服!如果有时间的话,可以将他所写的一系列的文章都看看,
您会受益匪浅的!
好了下面开始讲如何配置NAT 服务器,我的环境是这样的:
服务器端:
1. 操作系统:Linux 2.6 核心
2. 双以太网卡:eth0 用于连接内部网络,内部IP 为:10.20.10.174
eth1 用于连接外部网络,外部IP 为:159.226.41.140
3. 使用iptables 配置NAT 服务
客户端:
1. Windows XP 客户端
2. Linux 客户端
配置步骤:
服务器端配置:
一. 首先将双网卡都驱动起来,并配置好其对应的IP 地址。
如果您的机器这部分已经配置好了的话,就可以直接进入第2 步,使用iptables 配置NAT 服务
了,否则请随着我一步步来。配置双网卡,最好一个个的来,而且最好两个网卡不是同一个型号的
芯片。具体为什么我也不清楚,有的人说不这样容易出错。这部分内容可以参考这两篇文章,讲述
的很是详细。安装网卡(http://www.chinaitlab.com/www/special/linux3.asp#3),在架设NAT 时安装
双网卡(http://www.chinaitlab.com/www/special/linux11.asp#9)
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0 IPV6INIT=no ONBOOT=yes USERCTL=no PEERDNS=yes GATEWAY= TYPE=Ethernet DEVICE=eth0 BOOTPROTO=none NETMASK=255.0.0.0 IPADDR=10.20.10.174 设定对内的网卡eth0 的参数,要了解各个参数的意义,请查阅/usr/share/doc/initscripts-*/sysconfig.txt $ vi /etc/sysconfig/network-scripts/ifcfg-eth1 IPV6INIT=no ONBOOT=yes USERCTL=no PEERDNS=yes GATEWAY=159.226.41.190 TYPE=Ethernet DEVICE=eth1 BOOTPROTO=none NETMASK=255.255.255.192 IPADDR=159.226.41.140 设定对外的网卡eth1 的参数。 $ vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=HPCOG-ASL 设定机器的网络信息,比如主机名,是否启动网络等。 $ vi /etc/resolv.conf nameserver 159.226.39.1 nameserver 10.0.0.5 设定DNS 服务器 $ vi /etc/modprobe.conf alias eth0 8139too alias eth1 3c59x 设定eth0 为第一个网卡模块的别名,eth1 为第二块网卡的别名。 $ modprobe 8139too 3c59x && lsmod 启动两个网卡模块 $ /etc/rc.d/init.d/network restart 重新启动网络,应该也可以使用ifup eth0 eth1 这个命令来实现。 $ /sbin/ifconfig 查看网络配置信息 $ /sbin/route 查看路由信息。 |
#!/bin/bash #filename: nat.sh ##################Introduction#################### # 1. The file content if for configuring linux NAT server. # 2. Execution: # $ mkdir -p /usr/local/nat # $ cp nat.sh /usr/local/nat/nat.sh # $ chmod u+x /usr/local/nat/nat.sh # $ /usr/local/nat/nat.sh # or you can let it run automatically when machine reboots. # $ vi /etc/rc.d/rc.local # append "/usr/local/nat/nat.sh start" to it. # 3. modified by lirui 2005/08/10 # 4. mail me: colin719@gmail.com ################################################## IPTABLES='/sbin/iptables' EXTERNAL='eth1' EXTERNIP='159.226.41.141' INTERNAL='eth0' INTERNIP='10.20.10.0/24' #reset the three default ipchains $IPTABLES -P INPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT #reset the nat table $IPTABLES -t nat -P PREROUTING ACCEPT $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -P OUTPUT ACCEPT #flush the ipchains and nat table $IPTABLES -F $IPTABLES -t nat -F #delete non-default rules of ipchains and nat table $IPTABLES -X $IPTABLES -t nat -X #reset zero $IPTABLES -Z $IPTABLES -t nat -Z start(){ echo "Starting FireWall" #load necessary modules echo "Starting modprobe necessary modules for iptables" for i in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/* ; do t=`echo $i | sed 's//..o$//g'` mod=`basename $t` /sbin/modprobe $mod done #enable ICMP packet (ping) $IPTABLES -A INPUT -p icmp -j ACCEPT #enable communication inside local domain $IPTABLES -A INPUT -i $INTERNAL -s $INTERNIP -j ACCEPT $IPTABLES -A OUTPUT -o $INTERNAL -d $INTERNIP -j ACCEPT #enable ip masquerade echo "1" >/proc/sys/net/ipv4/ip_forward $IPTABLES -t nat -A POSTROUTING -o $EXTERNAL -s $INTERNIP -j MASQUERADE # $IPTABLES -t nat -A POSTROUTING -s $IPDOMAIN -j SNAT --to $OUTIP # $IPTABLES -t nat -A PREROUTING -d $EXTERNIP -p tcp --dport 21 -j DNAT --to $FTPIP # $IPTABLES -t nat -A PREROUTING -d $EXTERNIP -p tcp --dport 80 -j DNAT --to $WEBIP # Attention: there are no security!!! } stop(){ echo "Stopping firewall" for i in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/* ; do t=`echo $i |sed 's//..o$//g'` mod=`basename $t` /sbin/modprobe -r $mod done #disable ipv4 packet forwarding echo "0" >/proc/sys/net/ipv4/ip_forward } restart(){ stop start } #see how we were called case $1 in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage:$0 { start | stop | restart }" exit 1 esac |