鸟哥的 Linux ADSL 私房菜


连上 Internet
最近更新日期:2003/09/19
 
呼呼!终于要来到修改 Linux 网络参数的章节了!在前面的 网络基础 章节内我们知道了主机要连上 Internet 需要一些正确的网络参数设定,这些设定在 Windows 系统上面的修改则在 局域网络的架构 里面进行了说明。在这一章当中,我们则主要以固定 IP 的设定方式来修改 Linux 的网络参数,同时,也会介绍如何使用 ADSL 的拨接方式来上网,此外,因为 Cable modem 使用者也不在少数,所以我们也说明一下 Cable modem 在 Linux 下的设定方式喔!
 
Linux 网络相关设定档案
安装网络卡
  :手动安装网络卡驱动程序dmesg,
  :使用 Private IP 测试网络卡之运作手动设定, 档案设定
连上 Internet 的方法
  :固定 IP 上网方式: 非拨接上网之方式
  :Cable Modem 上网方式
  :ADSL 拨接上网方式
  :拨接程序 rp-pppoe 讯息错误处理
设定内部保留 IP 与 DNS IP
  :/etc/hosts,
  :/etc/resolv.conf,
无法联机的自我检查几大问题详解
课后练习
参考数据

Linux 网络相关设定档案
安装网络卡:
    网络卡是个硬件啊,所以要驱动他的话,核心就需要有支持该网络卡的芯片组才行。一般来说,目前新版的 Linux 预设可以支持的网络卡芯片组数量已经很完备了,包括大厂的 3COM, Intel 以及初阶的 RealTek, D-Link 等网络卡芯片都已经被支持,所以使用者可以很轻易的设定好他们的网络卡。不过,如果万一不幸核心没有支持该网络卡的话,那么您可以透过 (1)重新编译核心或者是 (2)编译网络卡驱动模块 ( Modules ),并且加载该模块,好让核心可以支持网络卡这块硬件啦!但是,重编核心或编译网络卡核心模块都不是简单的工作,所以万一您的网络卡真的不被预设的 Linux 网络芯片所支持,那么鸟哥真的建议直接换一块被 Linux 支持的网络卡吧,例如很便宜的螃蟹卡!免得花了太多时间在硬件确认上面,划不来的! ^_^ 如果您是照鸟哥推荐的,使用 RLT 8139 芯片 ( RealTek 8139 ) 的网络卡 ( 就是螃蟹卡 ) ,那您应该在安装 Linux 的时候就已经捉到网络卡了,那真是恭喜您啦!因为您的网络卡应该已经可以正常的工作啰!那如果在安装的时候并没有捉到网络卡呢?该如何是好?那也不用担心,因为您也可以事后才安装网络卡的驱动程序呀!不过,因为 Linux 并不像 Windows 是那样的随插即用,所以需要动一些手术的!
     
    如果很不幸的,您使用的是比较罕见的一些网络卡,或者是 Linux 核心支持度不太够的网卡,以致于在安装 Linux 时,并无法捉到这张卡,那也不用担心,我们可以使用较为简单的核心模块编译来支持这张网卡。底下我们以 D-Link 530 这一张曾被称为 Linux 恶魔卡的网络卡来进行模块的编译,如果您使用的是其它厂牌的网络卡,其实编译过程与底下的流程是类似的喔!
     

    手动安装网络卡驱动程序
     
    如前面所说的,我们的 Linux 预设核心里面,已经建立了很多的网络卡驱动程序模块了!所以啰!编译网络卡模块之前的首要工作就是先确认一下您的网络卡的芯片组是否有被支持呢?如果有支持的话『那么自然不需要编译模块了咯』! D-Link 530 这块网络卡的芯片组就是有名的 via-rhine ( 有的时候也写成是 viarhine ),先来找一找有没有这块网卡的模块吧。核心预设的网络卡模块路径在底下可以发现:
     
    1. 先察看一下核心版本,因为不同的版本模块放置的路径不同。
    [root@test /root]# uname -r
    2.4.20-18.9
    上面是以 Red Hat 9 为范例, 他的核心是 2.4 版喔。
     
    2. 核心模块的路径:
    [root@test /root]# cd /lib/modules/`uname -r`/kernel/drivers/net
    上面是 2.4 版的路径
    [root@test /root]# cd /lib/modules/`uname -r`/net
    上面是 2.2 版的路径,请依照您的实际核心来查询。
     
    [root@test net]# ls -l via*
    -rw-r--r--    1 root     root        17892 Sep  7  2001 via-rhine.o
    太好了!被支援到呢!
     
    如果幸运的话,那么您的网络卡就已经被支持,可以跳过编译的过程,直接进行模块的加载吧!万一您连自己的网络卡到底有没有被 Linux 捉到都不知道,那么可以使用底下的方法来测试:
     
    [root@test /root]# dmesg | grep eth
    divert: allocating divert_blk for eth0
    eth0: RealTek RTL8139 Fast Ethernet at 0xc4844000, 00:50:fc:20:f1:4c, IRQ 10
    eth0:  Identified 8139 chip type 'RTL-8139C'
    eth0: Setting 100mbps full-duplex based on auto-negotiated partner ability 45e1.
    divert: allocating divert_blk for eth1
    eth1: Digital DC21041 Tulip rev 33 at 0xc4852000, 21041 mode, 00:80:C8:5A:87:10, IRQ 9.
     
    看到上面的信息了吗?因为我有两张网络卡,一张是螃蟹卡 ( eth0 ) 另一张则是很旧很旧的 10 Mbps 的网络卡,Linux 预设就捉到了!所以我也就不需要重新编译核心模块!不过,万一捉不到呢?亦即上面没有显示出 eth0 或者 eth1 等信息,那就表示 Linux 无法找到该硬件,呵呵!底下就得来编译啰!
     
    1. 下载网络卡驱动程序模块:

    2. 万一不幸的,您的网络卡的驱动模块恰好不在 Linux 的预设支持当中,例如买到了杂牌的卡或是特别想要的卡 ( 例如 D-Link 530 TX ) ,那您就必须要注意这些卡的包装上面是否有提及『支持 Linux 』字样!如果有支持的话就可以买了,因为一定会有驱动程序附在上面的磁盘中的,以鸟哥的 FNW-9702-T 为例,他就有附上一块驱动程序片,里头有一个 linux 目录,里面就是安装驱动程序的原始码啦!如果找不到驱动程序的话,您可以到下面的网站去找找看有没有您需要的驱动程序源文件,当然啰!最好还是到您买的 那张网络卡的公司去下载完整的驱动程序码!例如上面提到的 D-Link 530TX的驱动程序原始码,在底下的友讯网站就有提供下载!  
    3. 确定所需套件存在:

    4. 在开始编译核心模块之前,因为驱动程序需要配合核心来编译,所以会使用到 kernel source 或者是 kernel header 的数据,此外,也需要编译器 ( compiler ) 的帮助,因此,先确定您的 Linux 系统当中已经有底下的套件存在 ( 注:每一个版本的 Linux 套件名称都不相同,我这里是以 Red Hat 9 来做说明,如果您的 Linux 不是 Red Hat 9 ,不要紧,只要看到 kernel 字样有出现,应该就没有问题! ) 而由于很多的核心模块预设都是由 /usr/src/linux 这个 kernel source 的目录来取得所需要的信息,偏偏目前很多的 Linux 版本都是使用 /usr/src/linux-2.4 这个目录来连结,所以很多时候您会发现找不到档案的错误讯息,因此,可以使用这样的方式来进行连结目录的制作:
      假设核心的 Open source 目录为 /usr/src/linux-2.4.20-18.9
      [root@test root]# cd /usr/src
      [root@test src]# ln -s linux-2.4.20-18.9 linux
      另外,如果没有安装上述的某些套件时,请拿出您的原版光盘,然后以 rpm 将他安装上您的 linux 系统吧! ^_^
       
    5. 编译下载的模块

    6. 上述的工作确认过后,并且由友讯网站下载了驱动程序后 ( 注:我下载的是完整的驱动程序片,也就是 DEF-530TX Shipping Driver 那个驱动程序,不过该档案 530tx.zip 是给 windows 用的,所以还需要在 Windows 底下解压缩后,才会得到 dlkfet-4.24.tar.gz 这个档案吶! ) 就可以准备来进行模块的编译了。
      1. 将刚刚取得的 dlkfet-4.24.tar.gz 放置到 /tmp 底下
      [root@test root]# cp dlkfet-4.24.tar.gz /tmp
      [root@test root]# cd /tmp
      [root@test tmp]# tar -zxvf dlkfet-4.24.tar.gz
      [root@test tmp]# cd dlkfet-4.24
       
      2. 开始编译:
      [root@test dlkfet-4.24]# make
      到此为止,会产生一个档案模块,称为: rhinefet.o
      [root@test dlkfet-4.24]# cp rhinefet.o  \
      > /lib/modules/`uname -r`/kernel/drivers/net
      [root@test dlkfet-4.24]# depmod -a
      特别留意,上面的路径为 2.4.xx 版本的核心!并且将该模块写入属性相依档案。
      当然啰,如果您是使用其它的网络卡,那么所得到的网络卡驱动程序自然就会成为 filename.o 啦!同样将他移动到模块放置的目录后,执行 depmod -a 即可。(注:如果您的模块原始码文件名为 driver.c ,并且没有 Makefile 的辅助,那么使用『gcc -DMODULE -D__KERNEL__ -O6 -c driver.c』来编译出 driver.o 也是可以的作法!)
       
    7. 模块测试:

    8. 核心模块编译完成之后,当然就得需要测试看看能不能正常的运作了。测试的方法很简单,因为我们已经进行了 depmod -a 了,所以可以直接以 modprobe 来进行模块的加载:
      1. 加载模块的测试:
      [root@test root]# modprobe rhinefet
      请注意,不要写完整的档名, .o 不需要写,那个 rhinefet 就是
      刚刚编译出来的 rhinefet.o 咯!
      [root@test root]# lsmod
      Module                  Size  Used by    Tainted: P
      rhinefet                14208   2
      ....(略)....
       
      2. 设定开机时加载模块
      [root@test root]# vi /etc/modules.conf
      # 加入底下这一行
      alias eth0 rhinefet
       
      3. 也可以重新开机是看看能否正常的启动模块:
      [root@test root]# sync; sync; reboot
      如果可以出现上述的画面,那么表示模块可以被正确的加载,同时,如果模块已经正确的加载了,那么就可以直接写入开机设定档 /etc/modules.conf 了。注意一下,在上面的例子当中,我们使用的是 rhinefet 这个模块,如果您的模块名称并非这个名称,请依照您的实际状态来修改,不要在 /etc/modules.conf 照抄我的设定啊!不然.....不要怪我~
       
    基本上,这样就已经编译成功,并且也将该模块挂上系统了,接下来就是需要测试一下这个网络卡是否能够正确的来运作啦!
     

    使用 Private IP 测试网络卡之运作:手动设定, 档案设定
     
    要测试网络卡是否能够工作,就是给网络卡一个私有 IP 来测试即可!而测试的方法又很简单,可以直接以手动下达指令的方式来启动网络卡,也可以使用设定文件来设定好网络参数。底下我们以 192.168.1.2 这个私有 IP ,加上 255.255.255.0 这个 C Class 的 netmask 来测试看看,此外,也以 eth0 为预设的 Gatewaydev ( 通讯闸装置 ):
     

      手动设定
       
      ifconfig 的详细说明我们在下一章再来详谈,这里先谈一谈他的简易用法啰:
       
      [root@test root]# ifconfig eth0 192.168.1.2
      [root@test root]# ifconfig
      eth0      Link encap:Ethernet  HWaddr 00:10:DC:F1:D8:C5
                inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
                UP BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:100
                RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
                Interrupt:17 Base address:0xd400 Memory:fb060000-fb060038
       
      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                UP LOOPBACK RUNNING  MTU:16436  Metric:1
                RX packets:41739 errors:0 dropped:0 overruns:0 frame:0
                TX packets:41739 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:4252360 (4.0 Mb)  TX bytes:4252360 (4.0 Mb)
       
      [root@test root]# ping 192.168.1.2 -c 3
      PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
      64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.106 ms
      64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.016 ms
      64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.013 ms

      --- 192.168.1.2 ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 1998ms
      rtt min/avg/max/mdev = 0.013/0.045/0.106/0.043 ms
       
      [root@test root]# ifconfig eth0 down

       
      使用 ifconfig 后面加上网络卡代号,并且加上 IP ,就可以设定好网络卡的相关网络参数了!不过,要注意的是那个网络接口有个 lo 的咚咚存在是吧!没错啦!在网络基础里面谈到的 loopback 就是这个接口啰!他的预设 IP 就是 127.0.0.1 咯。再来使用 ping 来测试该网络卡是否能够正常的响应,呵呵!这样就算测试成功了。再来先将网络卡关掉,然后底下再以档案模式的方法来测试一下网络卡啰!另外, ifconfig 也可以直接修改 IP ,例如上面的案例中,如果在网络卡启动的状态下,想要将 IP 改为 192.168.1.200 ,则下达『ifconfig eth0 192.168.1.200 』即可!
       

      档案设定
       
      在档案的设定里面,我们会动用到的档案其实只有 /etc/sysconfig/network-scripts/ifcfg-eth0 ,不过,底下我们连同通讯闸(Gateway)也一同设定妥当,同时更改主机名称,所以还会动用到 /etc/sysconfig/network 这个档案哩!修改一下先:
       
    上述的两种方法中,请特别留意的是,手动以 ifconfig 这个指令来修改 IP 或者是网络卡参数是可行的,您可以在任何时刻手动的修改。不过,如果原先以 ifup eth0 的方式来启动网络卡之后,再以 ifconfig 来进行 IP 的修改,那么网络的的启动与关闭就得使用 ifconfig 了,不能够使用 ifdown eth0 来关闭了!否则会显示找不到该网络卡的错误讯息喔!反正大原则就是:先以档案的型态 ifcfg-eth0 来设定好您的网络参数,而如果想要暂时更动网络参数的话,那么就使用 ifconfig 来进行修改,如此一来,未来重新开机之后,还是会以 ifcfg-eth0 的设定为准

连上 Internet 的方法:
设定内部保留 IP 与 DNS IP: /etc/hosts, /etc/resolv.conf,
无法联机的自我检查几大问题详解
课后练习
参考数据:
连上 Internet

2002/07/24:首次释出日期
2003/08/18:重新校正,并且修正部分书写方式
2003/08/20:新增课后练习部分
2003/09/19:加入前往参考用解答

2002/07/24 以来统计人数


Designed by VBird during 2001-2004.  Aerosol Lab.