前面raner已经讲得很好了,现在我针对一个具体的情况给出解决的参考方法:
现在有一个小局域网,其中有一个Linux Box上有modem可以拨号上Internet,
要求局域网上的所有机器可以通过Linux Box上internet.
实施步骤如下:
1 准备PPP拨号连接,参考拨号上网的问题

2 网络的基本配置应该完全正常,保证局域网内网络的连接没有问题。

3 准备内核,通常内核没有编译进forward/gateway/masquerade等选项,需要重新
  配置并编译。在内核配置里加上以下几项:
  Code maturity level option
      Prompt for development/or ... (允许打开内核里的某些实验性代码选项)
  Networking options:
      Network firewalls
      IP: forward/gatewaying
      IP: firewalling
      IP: firewall packet logging
      IP: masquerading
      IP: ipautofw masquerading (如果你的应用不在已知伪装支持之列,打开此项)
      IP: ICMP masquerading
      IP: transparent proxy support (可选)
      IP: always defragment (强烈推荐)
      IP: accounting
  Network device support
      Dummy net driver support

4 重新配置网络。
  a, 分配IP伪装地址。拨号上网顶多只有一个有效IP地址,所以Linux Box上的网卡
     以及其他机器上的网卡上都只能分配伪装IP地址。好在IETF保留了一大堆伪装
     地址可用:
       一个A类网络地址
       10.0.0.0 (网络掩码 255.0.0.0)
     十六个B类网络地址
       172.16.0.0 - 172.31.0.0 (网络掩码 255.255.0.0)
      二百五十六个C类网络地址
       192.168.0.0 - 192.168.255.0 (网络掩码 255.255.255.0)
     按照VLSM(可变长子网掩码),你可以不太在意网络掩码,比如可自定义一个10.168.1.0/24
     192.168.1.128/25等等,但192.0.0.0/8肯定是不对的。配置后的网络举例如下:

                          192.168.10.0/24
                                 |
                   192.168.10.2--+
                                 |               eth0 +---------+ modem
                                 +--192.168.10.1------+linux box+-------ppp to isp
                                 |                    +---------+
                   192.168.10.3--+
                                 |
                            ......

      需要注意的是,有很多ISP如263,169,col都用到了IP Masquerade技术,它们给拨号上网的
      用户分配的也是伪装地址,所以你要避免你的设置与它们的分配重复

   b, 设置网关及DNS。Linux Box上的缺省网关在ppp建立后应该分配在ppp上,参见ppp的配置说明。
      局域网上其他机器的缺省网关应指向Linux Box,如为192.168.10.1。这时候Linux Box相当于
      一个简单的静态路由器,不过融合了IP Masquerade方式。如果你用Proxy代理服务器而且是用
      集线器(hub)简单组网的话,这一步不是必须的,因为这时由Proxy来转发数据包,Linux Box不
      再需要静态路由转发的功能。DNS通常设置为指向ISP的DNS服务器,也可以指向任一个DNS服务
      器。如果用Proxy的话,在客户端可以不设DNS。在Linux Box上配置一个Cache Only的DNS也许
      会提升一点点性能。

   c, 允许Linux的IP转发功能,编辑/etc/sysconfig/network文件,设置FORWARD_IPV4=yes。
      整个文件看起来像这样:
        NETWORKING=yes
        FORWARD_IPV4=yes
        HOSTNAME=host.your.domain.name
        DOMAINNAME=your.domain.name
        GATEWAYDEV=
        GATEWAY=
      如果用proxy的话,没有必要打开这个选项(当然打开这个选项对proxy没有大的影响)。
      打开这项可以让局域网上的其他伪装地址“透明”地访问Internet,不利之处正如raner
      所说,针对具体的应用级协议要有相应的模块支持,已知的支持有Ping(ICMP),HTTP,ftp,
      NNTP,traceroute,telnet,IRC,POP&SMTP,VRML,WAIS,Archie,Real Audio Player,Gopher,
      True Speech Player,Internet Wave Player,Inetrnet Phone,Powwow,CU-SeeMe,VDOLive,
      PC-anywhere,Socket Watch,Linux net-acct package等。用Proxy的最大好处是可以缓存
      以前浏览过的内容。两种方式都用上也许是个好注意(如果要计帐收钱可能不太方便)。
      另外,这种情况下把GATEWAYDEV/GATEWAY空着好了,千万别设成eth0,拨号上网后,pppd
      的defaulteroute选项会自动通知内核把ppp设成缺省网关的。

5 设置IP包转发策略/规则
  只有打开了FORWARD_IPV4=yes才有效,如果用proxy则设不设没有关系,原因嘛前面已经讲过。
  这时候要用到ipfwadm(ip forward administry)工具,用man ipfwadm看看都有什么参数,
  简单的应用如下:
      ipfwadm -F -p deny   <==首先禁止所有转发
      ipfwadm -F -a m -S 192.168.10.0/24 -D 0.0.0.0/0 <==允许子网192.168.10.0到任何地方
  查看计帐信息:
      ipfwadm -A -a -b -S 192.168.10.x
      ipfwadm -Aln
  提醒一下,设定策略顺序很重要。自己用man ipfwadm读详细信息吧,或去读HOWTO,理解所以然。

6 设置proxy服务
  可以做proxy的软件很多,主要有squid,socks,FWTK(TIS Firewall Toolkit)以及apach(也可以做
  proxy哟).我觉得socks,FWTK更偏重于防火墙的运用,我一般用支持cache的squid,Redhat5.1就带
  它,无须修改配置,缺省的就可以了(看看/etc/squid.conf, http proxy 缺省端口是3128)。客
  户端程序要把proxy指向Linux Box(eth0),各种具体的应用对应到squid的端口上。

7 测试
  首先网内的其他机器应可以ping到linux box eth0上。然后拨号上网,在Linux Box上ping到外面去
  应该没有问题,否则去检查ppp设置。如果设置了FORWARD_IPV4=yes则在其他计算机上也可以ping到
  外面去,装入ftp模块就可以ftp到外面去(insmod ip_masq_ftp),在/lib/modules/2.x.xx/ipv4下看
  看都有那些模块,http是缺省的;如果你打开了Loadable module support/Kernel module loader,则
  内核会自动装入那些模块。否则使用支持proxy的软件如netscape来试试,应该没有问题。
  测试通过后,你可能要考虑把某些配置写到启动配置文件中,如把有关ipfwadm的配置写到
  /etc/rc.d/rc.local里。

8 举一反三
  如果是ISDN终端,配置过程没什么两样;如果是DDN专线,可以变换如下:

                                               有效IP地址
                                                    |
                      IP伪装地址         a.b.c.d ---+
                             |                      |
                             | eth0 +---------+ eth1|
                             +------+Linux Box+-----+
                             |      +---------+     |   +------+  +--------+
               192.168.10.2--+                      +---+Router+--+同步设备+---DDN
                             |                      |   +------+  +--------+ ?/tt>
                           .....                  ......

   用eth1替换上面的ppp0,道理是一样的,配置也差不多。如果Linux Box上只有一个网卡,可以用
   ip alias的方法来做。

9  关于新内核,如2.1.xxx,有很大的变化:如果你不选上IP Firewall就不能选IP Masquerading,
   而且内核firewall的代码有很大的变化,ipfwadm已经不能工作,要换成ipchains,在freesoft
   也可以查找得到。 ipchains的用法大致如下:
       ipchains -F <==清空转发规则
       ipchains -A forward -j MASQ -s 192.168.10.0/24 <==允许192.168.10.0子网去任何地方
       ipchains -L <==列出所有规则
       ipchains -M <==查看当前的伪装连接
   另外pppd也要升级到2.3.5以上。

10 如果你想要Linux Box按需拨号上网的话,去下载Diald软件,我没用过,无法给出提示信息。
   可以考虑用webppp让用户自己去拨号。
   还可以考虑在Linux Box上做个DHCP服务,自己去看man dhcpd吧。

11 其他的工具:
     connect
     C Masqdialer Server
     Windows 95/NT Masqdialer
   顺便推荐一个工具软件iptraf,可以来监视/查看很多网络信息!
   架设sniffer/K-Arp-Ski嘛,可以清楚地看到port映射。
   还有一个traffic-vis,也用到了libpcap库。

12 相关文档:
   Network Administrator's Guide (现在有人正在翻译它)
   FIREWALL-HOWTO (在你的机器上可能已经有了 /usr/doc/HOWTO)
   Setting Up Ip-Masquerading(最新更新!) 针对2.1.xxx内核在kernel21.html
   IP Network Address Translation(NAT)
   另外在配置内核的时候多看看它自带的help!!!

  哈哈,看起来一大堆,其实如果对Linux和网络比较熟悉的话,三下五除二就搞定了!
 
 

本文转自中文Linux论坛