目的现在有一个小局域网其中有一个Linux Box上有modem可以拨号上Internet 要求局域网上的所有机器可以通过Linux Box上internet 实施步骤 准备PPP拨号连接参考拨号上网的问题 网络的基本配置应该完全正常保证局域网内网络的连接没有问题 准备内核通常内核没有编译进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 重新配置网络 a 分配IP伪装地址拨号上网顶多只有一个有效IP地址所以Linux Box上的网以及其他机器上的网卡上都只能分配伪装IP地址好在IETF保留了一大堆伪装地址可一个A类网络地址 (网络掩码 ) 十六个B类网络地址 (网络掩码) 二百五十六个C类网络地址 (网络掩码) 按照VLSM(可变长子网掩码)你可以不太在意网络掩码比如可自定义一个/ /等等但/肯定是不对的 配置后的网络举例如下 / +| eth ++ modem+ +linux box+ppp to isp| ++ + | 需要注意的是有很多ISP如col都用到了IP Masquerade技术它们给拨号上网用户分配的也是伪装地址所以你要避免你的设置与它们的分配重复 b 设置网关及DNSLinux Box上的缺省网关在ppp建立后应该分配在ppp上参见ppp的配置说明 局域网上其他机器的缺省网关应指向Linux Box如为这时候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_IPV=yes整个文件看起来像这样 NETWORKING=yes FORWARD_IPV=yes HOSTNAME=hostyourdomainname DOMAINNAME=yourdomainname GATEWAYDEV= GATEWAY= 如果用proxy的话没有必要打开这个选项(当然打开这个选项对proxy没有大的影响)打开这项可以让局域网上的其他伪装地址透明地访问Internet不利之处正如raner 所说针对具体的应用级协议要有相应的模块支持已知的支持有Ping(ICMP)HTTPftp NNTPtraceroutetelnetIRCPOP&SMTPVRMLWAISArchieReal Audio PlayerGopher True Speech PlayerInternet Wave PlayerInetrnet PhonePowwowCUSeeMeVDOLive PCanywhereSocket WatchLinux netacct package等用Proxy的最大好处是可以缓存以前浏览过的内容两种方式都用上也许是个好注意(如果要计帐收钱可能不太方便)另外这种情况下把GATEWAYDEV/GATEWAY空着好了千万别设成eth拨号上网后pppd 的defaulteroute选项会自动通知内核把ppp设成缺省网关的 设置IP包转发策略/规则 只有打开了FORWARD_IPV=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 提醒一下,设定策略顺序很重要。tW.wingwit.cOM自己用man ipfwadm读详细信息吧,或去读HOWTO,理解所以然。 6 设置proxy服务 可以做proxy的软件很多,主要有squid,socks,FWTK(TIS Firewall Toolkit)以及apach(也可以做 proxy哟).我觉得socks,FWTK更偏重于防火墙的运用,我一般用支持cache的squid,Redhat5.1就带 它,无须修改配置,缺省的就可以了(看看/etc/nf, 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 +---------+ h1|+-------+Linux Box+---- 192.168.10.2--+ +Router+--+同步设备+---DDN 用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 (~eschenk/l)软件,我没用过,无法给出提示信息。可以考虑用webppp(~edward/webppp/)让用户自己去拨号。还可以考虑在Linux Box上做个DHCP服务,自己去看man dhcpd吧。 Jim 整理 |