网络卡的安装,与连接上 Internet 的方法介绍
终于要来到修改 Linux 网络参数的章节了!在第二章的网络基础中, 我们知道主机要连上 Internet 需要一些正确的网络参数设置,这些设置在 Windows 系统上面的修改则在第三章的局域网路架构中说明了。在这一章当中,我们则主要以固定 IP 的设置方式来修改 Linux 的网络参数,同时,也会介绍如何使用 ADSL 的拨接方式来上网,此外,因为 Cable modem 用户也不在少数,所以我们也说明一下 Cable modem 在 Linux 下的设置方式喔! 最后,由于笔记本电脑用户大增,且因为笔记本电脑常使用无线网络,因此本文也加入了无线网络的连接介绍啊!
由前面几章的数据我们知道,想要连上 Internet 你得要设置一组合法的 IP 参数才可以,主要是 IP, Netmask, Gateway, DNS IP 以及主机名称等。那我们也知道,其实整个主机最重要的设置,就是『先要驱动网络卡』,否则主机连网络卡都捉不到时, 怎么设置 IP 参数都是没有用的,你说是吧!所以底下我们就来谈一谈, 你要如何确定网络卡已经被捉到,而 Linux 主机的网络参数又该如何设置?
你怎么确认 Linux 有捉到网络卡?Linux 底下的网络卡的名称是啥?让我们来了解一下吧!
[root@www ~]# dmesg | grep -in eth 377:e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection 383:e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection 418:e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 419:eth0: no IPv6 routers present从上面的第 377 及 383 这两行,我们可以查到这部主机的两张网络卡都使用模块为 e1000,而使用的芯片应该就是 Intel 的网络卡了。此外,这个网卡的速度可达到 1000Mbps 的全双工模式哩 (418行) !除了使用 dmesg 来查找内核侦测硬件产生的信息外,我们也可以通过 lspci 来查找相关的设备芯片数据喔!如下所示:
[root@www ~]# lspci | grep -i ethernet 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)请注意,鸟哥这里使用的是 Virtualbox 仿真的那部主机的环境 (请参考第一章 1.2.2-2),因此使用的是仿真出来的 Intel 网卡。 如果你是使用自己的实际硬件配备安装的主机,那么应该会看到不同的芯片啦!那是正常的!
[root@www ~]# lsmod | grep 1000 e1000 119381 0 <==确实有加载到内核中! [root@www ~]# modinfo e1000 filename: /lib/modules/2.6.32-71.29.1.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 7.3.21-k6-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver .....(以下省略).....上面输出信息的重点在于那个文件名 (filename) 的部分!那一长串的文件名目录,就是我们驱动程序放置的主要目录所在。 得要注意的是,那个 2.6.32-71.29.1.el6.x86_64 是内核版本,因此,不同的内核版本使用的驱动程序其实不一样喔!我们才会一直强调,更改内核后, 你自己编译的硬件驱动程序就需要重新编译啦!
一般来说,如果没有特殊需求,鸟哥不是很建议你自己编译网络卡的驱动程序!为啥? 因为想到每次更新内核都得要重新编译一次网卡驱动程序,光是想想都觉得烦~所以,没有被 Linux 缺省内核支持的网卡, 就先丢着吧!
如果你真的很有求知欲,而且该网卡的官网有提供给 Linux 的驱动程序原代码; 或者是你很想要某些官网提供的驱动程序才有的特殊功能;又或者是你真的很不想要再买一张额外的网卡。 此时,就得要重新编译网络卡的驱动程序啰。
因为我们这里使用的网络卡是 Intel 的 82540EM Gigabit Ethernet 控制芯片,假设你需要的驱动程序得要由 Intel 官网取得最新的版本,而不要使用缺省的内核所提供的版本时,那你该如何处理呢?请注意,鸟哥这个小节只是一个范例简介, 不同的厂商推出的驱动程序安装方式都有点不太一样,你得要参考驱动程序的读我档 (READ ME) 或相关文件来安装才行。 此外,如果缺省驱动程序已经捉到了网络卡,鸟哥是建议使用缺省的驱动程序就好了喔!
另外,由于编译程序需要编译器以及内核相关信息,因此得要预先安装 gcc, make, kernel-header 等软件才行。 但是我们选择的安装模式为『basic server』,这些软件缺省都没有安装的,所以你得要先安装这些软件才行。 这些软件可以简单的通过 yum 使用『yum groupinstall 'Development Tools'』来安装,只可惜你并没有网络啊! 所以就得要通过原本光盘一个一个去处理 RPM 属性相依的问题来解决了~很麻烦的~不然的话,就得要通过更改 yum 设置档,使用本机文件的类型来取得原版光盘的 yum 软件清单啰!鸟哥这里假设你已经安装了所需要的编译器了, 接下来的动作是:
[root@www ~]# tar -zxvf e1000-8.0.30.tar.gz -C /usr/local/src [root@www ~]# cd /usr/local/src/e1000-8.0.30/ # 此时在该目录下有个 README 的文件,记得看一看,这个文件内会说明很多信息, # 包括如何编译,以及这个模块所支持的芯片组哩! [root@www e1000-8.0.30]# cd src [root@www src]# make install最后这个模块会被编译完成且安装放置于如下的文件名: /lib/modules/$(uname -r)/kernel/drivers/net/e1000/e1000.ko。 接下来我们得要重新加载这个新的模块才行呦!
# 1. 先移除已经加载在内存中的旧模块 [root@www ~]# rmmod e1000 # 此时已经捉到的网卡会整个消失不见!因为驱动程序被卸载了嘛! # 2. 加载新模块,并且查阅一下有没有捉到正确的版本! [root@www ~]# modprobe e1000 [root@www ~]# modinfo e1000 filename: /lib/modules/2.6.32-71.29.1.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 8.0.30-NAPI <==就是这里! license: GPL description: Intel(R) PRO/1000 Network Driver请自行与前一小节比对一下,就会发现真的捉到正确的版本啰!不过,这个模块在下次新的内核推出后就会失效! 为什么呢?因为新内核会给一个新的驱动程序嘛!就不是你现在这个 8.0.30 的版本啰。这点还是要再次说明的。
[root@www ~]# vim /etc/modprobe.d/ether.conf alias eth0 e1000 alias eth1 e1000 <==因为鸟哥有两张网卡嘛! [root@www ~]# sync; reboot为了测试一下刚刚的设置是否会生效,通常鸟哥都会尝试一次重新开机,然后开机完成之后观察一下是否有正确的启动网络卡, 并观察一下模块加载的情况,如果一切都顺利,那就太完美了!
[root@www ~]# ifconfig eth0 192.168.1.100 [root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 ....(以下省略)....嘿嘿!真的设置妥当哩!然后利用 ping 这个指令去 ping 一下网域内的其他电脑, 看看能不能有回应,就知道你的网络卡是否 OK 的啦!通常是没有问题的啦!
我们知道 TCP/IP 的重要参数主要是: IP, Netmask, Gateway, DNS IP ,而且千万不要忘记你这部主机也应该要有主机名称 (hostname)!此外,我们也知道 IP 的取得有手动设置、DHCP 处理等。那么这些参数主要是写在哪些设置档?如何对应呢? 底下就让我们来处理一番!
所需网络参数 | 主要设置档文件名 | 重要参数 |
IP Netmask DHCP 与否 Gateway 等 |
/etc/sysconfig/network-scripts/ifcfg-eth0 | DEVICE=网卡的代号 BOOTPROTO=是否使用 dhcp HWADDR=是否加入网卡卡号(MAC) IPADDR=就是IP地址 NETMASK=子网络遮罩啦 ONBOOT=要不要缺省启动此接口 GATEWAY=就是通信闸啦 NM_CONTROLLED=额外的网管软件 鸟哥建议取消这个项目! |
主机名称 | /etc/sysconfig/network | NETWORKING=要不要有网络 NETWORKING_IPV6=支持IPv6否? HOSTNAME=你的主机名 |
DNS IP | /etc/resolv.conf | nameserver DNS的IP |
私有 IP 对应 的主机名称 |
/etc/hosts | 私有IP 主机名称 别名 |
你没有看错,主要需要修改的就是这四个文件而已!因此没有很困难!大家都想太多了!详细的设置后续小节再来讲, 这里先有概念即可。除此之外,还有些文件或许你也应该要知道一下比较好呦!
大概知道上面这几个文件后,未来要修改网络参数时,那就太简单了!至于网络方面的启动指令的话,可以记得几个简单的指令即可喔!
大概你只要知道这些基本的指令与文件,哈哈!网络参数的设置就太简单啦! 不过,最好你还是要了解 shell script ,比较好!因为可以追踪整个网络的设置条件。 why ?这是因为每个 distributions 的设置数据可能都不太相同,不过却都以 /etc/init.d/network 作为启动的 script , 因此,你只要了解到该文件的内容,很容易就追踪得出来你的设置档所需要的内容呢!对吧!
另外,新版的 CentOS 6.x 还有额外推出一个名称为 NetworkManager 的软件机制来管理网络, 不过,鸟哥还是比较喜欢手工打造自己的网络环境,所以很建议将该软件关闭呢!还好,我们安装的『basic server (第一章的 1.2.2-2)』 就这么巧的没有安装该软件!好佳在~^_^
在前几章我们就谈过,台湾地区主要连上互联网的方法有(1)学术网络、(2)ADSL 固接与拨接、(3)Cable modem 等方式,同时,手动设置 IP 参数是很重要的学习,因此,底下的各节中,第一节的手动设置固定 IP 一定要做过一次! 其他的才依照您的环境去设置去学习!
此外,由于目前使用 Linux notebook 的用户大增,而 Notebook 通常是以无线网络来连接的, 所以鸟哥在这里也尝试使用一款无线网络来进行连接设置。至于传统的 56 Kbps 拨接则因为速度较慢且使用度越来越低, 所以在这里就不多做介绍了。
所谓的固定 IP 就是指在你的网络参数当中,你只要输入既定的 IP 参数即可。那么这个既定的 IP 来自哪里呢? 一般来说,他可能来自于:
这样清楚吗?也就是说,我们取得的固定 IP 参数并非一定是 public IP 喔!反正就是一组可接受的固定 IP 就是了! 所以在架设你的环境之前,请先注意所有网络参数的来源正确性啊!好了,那么你的 IP 要如何设置呢?先回去翻翻第三章 3.2.1 里面的图 3.2-1,我们对外网卡 (eth0) 的信息为:
IP: 192.168.1.100 Netmask: 255.255.255.0 Gateway: 192.168.1.254 DNS IP: 168.95.1.1 Hostname: www.centos.vbird
那么要修改的四个文件与相关的启动脚本,以及重新启动后需要用啥指令观察的重点,鸟哥再次的使用一个简单的表格来说明, 你只要记得这几个表格内的重要文件与指令,以后在修改网络参数时,就不会出现错误了!看看吧!
修改的参数 | 设置档与重要启动脚本 | 观察结果的指令 |
IP相关参数 | /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/init.d/network restart |
ifconfig (IP/Netmask) route -n (gateway) |
DNS | /etc/resolv.conf | dig www.google.com |
主机名称 | /etc/sysconfig/network /etc/hosts |
hostname (主机名) ping $(hostname) reboot |
底下我们就分别针对上面的各项设置来进行文件的重新修改啰!
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" <==网络卡代号,必须要 ifcfg-eth0 相对应 HWADDR="08:00:27:71:85:BD" <==就是网络卡地址,若只有一张网卡,可省略此项目 NM_CONTROLLED="no" <==不要受到其他软件的网络管理! ONBOOT="yes" <==是否缺省启动此接口的意思 BOOTPROTO=none <==取得IP的方式,其实关键字只有dhcp,手动可输入none IPADDR=192.168.1.100 <==就是 IP 啊 NETMASK=255.255.255.0 <==就是子网络遮罩 GATEWAY=192.168.1.254 <==就是缺省路由 # 重点是上面这几个设置项目,底下的则可以省略的啰! NETWORK=192.168.1.0 <==就是该网段的第一个 IP,可省略 BROADCAST=192.168.1.255 <==就是广播地址啰,可省略 MTU=1500 <==就是最大传输单元的设置值,若不更改则可省略上面的数据很好理解吧!请注意每个变量(左边的英文)都应该要大写! 否则我们的 script 会误判!事实上鸟哥的设置值只有最上面的 8 个而已,其他的 NETWORK, BROADCAST, MTU 鸟哥都没有设置喔! 至于参数的说明方面,IPADDR, NETMASK, NETWORK, BROADCAST 鸟哥在这里就不再多说,要谈的是几个重要的设置值:
[root@www ~]# /etc/init.d/network restart Shutting down interface eth0: [ OK ] <== 先关闭接口 Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] <== 再打开接口 Bringing up interface eth0: [ OK ] # 针对这部主机的所有网络接口 (包含 lo) 与通信闸进行重新启动,所以网络会停顿再开这样就处理完毕啰,那接下来当然就是观察看看啰!
# 检查一:当然是要先察看 IP 参数对否,重点是 IP 与 Netmask 啦! [root@www ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:655 errors:0 dropped:0 overruns:0 frame:0 TX packets:468 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:61350 (59.9 KiB) TX bytes:68722 (67.1 KiB) # 有出现上头那个 IP 的数据才是正确的启动;特别注意 inet addr 与 Mask 项目 # 这里如果没有成功,得回去看看设置档有没有错误,然后再重新 network restart ! # 检查二:检查一下你的路由设置是否正确 [root@www ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 # 重点就是上面的特殊字体!前面的 0.0.0.0 代表缺省路由的设置值! # 检查三:测试看看与路由器之间是否能够连接成功呢! [root@www ~]# ping -c 3 192.168.1.254 PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data. 64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=2.08 ms 64 bytes from 192.168.1.254: icmp_seq=2 ttl=64 time=0.309 ms 64 bytes from 192.168.1.254: icmp_seq=3 ttl=64 time=0.216 ms --- 192.168.1.254 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 0.216/0.871/2.088/0.861 ms # 注意啊!有出现 ttl 才是正确的回应!如果出现『 Destination Host Unreachable 』 # 表示没有成功的连接到你的 GATEWAY 那表示出问题啦!赶紧检查有无设置错误。要注意,第三个检查如果失败,可能要看你的路由器是否已经关闭?或者是你的 switch/hub 是否有问题,或者是你的网络线是否错误,还是说你的或路由器的防火墙设置错误了?要记得去解决喔! 这三个检查做完而且都成功之后,那么你的 TCP/IP 参数设置已经完毕了!这表示你可以使用 IP 上网啦! 只是还不能够使用主机名称上网就是了。接下来就是要设置 DNS 啰!
[root@www ~]# vim /etc/resolv.conf nameserver 168.95.1.1 nameserver 139.175.10.20我们以中华电信与 SeedNet 在南部的 DNS 服务器之 IP 作为设置的方式!请注意一下,如果你不知道你的最接近的 DNS 服务器的 IP ,那么直接输入 nameserver 168.95.1.1 这个中华电信的 DNS 主机即可!不过如果你公司内部有设置防止 DNS 的要求封包的防火墙规则时,那么你就得要请教贵公司的网管单位告知你的 DNS IP 设置啦!然后赶紧测试看看:
# 检查四:看看 DNS 是否顺利运作了呢?很重要的测试喔! [root@www ~]# dig www.google.com ....(前面省略).... ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 428539 IN CNAME www.l.google.com. www.l.google.com. 122 IN A 74.125.71.106 ....(中间省略).... ;; Query time: 30 msec ;; SERVER: 168.95.1.1#53(168.95.1.1) <==这里的项目也很重要! ;; WHEN: Mon Jul 18 01:26:50 2011 ;; MSG SIZE rcvd: 284上面的输出有两个重点,一个是问题查找的是 www.google.com 的 A (Address) 参数,并且从回答 (Answer) 里面得到我们所需的 IP 参数。最后面一段的 Server 项目非常重要!你得要看是否与你的设置相同的那部 DNS 服务器 IP 才行! 以上面输出为例,鸟哥使用中华电信的 DNS 服务器,所以就出现 168.95.1.1 的 IP 地址啰。
[root@www ~]# vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=www.centos.vbird [root@www ~]# vim /etc/hosts 192.168.1.100 www.centos.vbird # 特别注意,这个文件的原本内容不要删除!只要添加额外的数据即可!修改完毕之后要顺利启动的话,得要重新开机才可以。为什么需要重新开机呢?因为系统已经有非常多的服务启动了, 这些服务如果需要主机名称,都是到这个文件去读取的。而我们知道设置档更新过后,服务都得要重新启动才行。 因此,已经启动而且有读到这个文件的服务,就得要重新启动啊!真麻烦~因此,最简单的方法,就是重新开机。 但重开机之前还需要进行一项工作,否则,你的系统开机会花掉很多时间喔!
[root@www ~]# hostname localhost.localdomain # 还是默认值,尚未更新成功!我们还得要进行底下的动作! # 检查五:看看你的主机名称有没有对应的 IP 呢?没有的话,开机流程会很慢! [root@www ~]# ping -c 2 www.centos.vbird PING www.centos.vbird (192.168.1.100) 56(84) bytes of data. 64 bytes from www.centos.vbird (192.168.1.100): icmp_seq=1 ttl=64 time=0.015 ms 64 bytes from www.centos.vbird (192.168.1.100): icmp_seq=2 ttl=64 time=0.028 ms --- www.centos.vbird ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.015/0.021/0.028/0.008 ms # 因为我们有设置 /etc/hosts 规定 www.centos.vbird 的 IP , # 所以才找的到主机主机名称对应的正确 IP!这时才能够 reboot 喔!重要重要!
上面的信息中,检查的内容总共有五个步骤,这五个步骤每一步都要成功后才能够继续往下处理喔! 至于最重要的一点,当你修改过 /etc/sysconfig/network 里面的 HOSTNAME 后, 务必要重新开机 (reboot)。但是重新开机之前,请务必『 ping 主机名称』且得到 time 的回应才行!
可自动取得 IP 的环境是怎么回事啊?不是很简单吗?当你在 IP 分享器后头的主机在设置时,不是都会选择『自动取得 IP 』吗?那就是可自动取得 IP 的环境啦!那么这个自动取得是怎么回事啊?也不难了解啦,其实就是『有一部主机提供 DHCP 服务给整个网域内的电脑』就是了!例如 IP 分享器就可能是一部 DHCP 主机。那么 DHCP 是啥? 他是:Dynamic Host Configuration Protocol 的简写,顾名思义,他可以『动态的调整主机的网络参数』的意思。详细的 DHCP 功能我们会在第十二章说明的。好了,那么这个方法适合哪些连接的方式呢?大致有这些:
你依旧需要前一小节手动设置 IP 的主机名称设置 (第三步骤),至于 IP 参数与 DNS 则不需要额外设置, 仅需要修改 ifcfg-eth0 即可喔!这样处理吧:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR="08:00:27:71:85:BD" NM_CONTROLLED="no" ONBOOT=yes BOOTPROTO=dhcp
没盖你喔!只要这几个项目即可,其他的都给他注解 (#) 掉!尤其是那个 GATEWAY 一定不能设置! 避免互相干扰!然后给他重新启动网络:
[root@www ~]# /etc/init.d/network restart Shutting down interface eth0: [ OK ] <== 先关闭接口 Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] <== 再打开接口 Bringing up interface eth0: [ OK ] Determining IP information for eth0.. [ OK ] <== 重要!是 DHCP 的特点! # 你可以通过最后一行去判断我们是否有通过 DHCP 协定取得 IP!
我们局域网路内的 IP 分享器或 DHCP 主机,就会立刻帮你的 Linux 主机做好网络参数的规划, 包括 IP 参数与 GATEWAY 等,就通通设置妥当啦!很方便也很简单吧!
终于来到台湾最热门的 ADSL 拨接上网的介绍啦!来谈一谈如何在 Linux 上拨接上网吧! 要拨接上网时,可以使用 rp-pppoe 这套软件来帮忙(注1),所以,你必须要确认你的 Linux distributions 上面已经存在这个玩意儿了!CentOS 本身就含有 rp-pppoe ,请使用原版光盘,或者是使用 yum 来进行安装吧!
[root@www ~]# mount /dev/cdrom /mnt [root@www ~]# cd /mnt/Packages [root@www ~]# rpm -ivh rp-pppoe* ppp* [root@www ~]# rpm -q rp-pppoe rp-pppoe-3.10-8.el6.x86_64 <==你瞧瞧!确实已经安装喔!
当然,很多 distributions 都已经将拨接这个动作归类到图形接口里面去了,所以可能没有提供 rp-pppoe 这个咚咚,没关系,你可以到底下的网站去取得的:
然后再自行手动安装即可。如何安装的过程鸟哥在这里就不谈了,请自行前往基础篇的原代码与 Tarball 章节查阅相关数据吧。 另外请注意,虽然整个连接是由主机的以太网路卡连接到 ADSL 调制解调器上,然后再通过电话线路连接到 ISP 的机房去,最后在主机上以 rp-pppoe 拨接达成连接。但是 rp-pppoe 使用的是 Point to Point (ppp) over Ethernet 的点对点协定所产生的网络接口,因此当你顺利的拨接成功之后, 会多产生一个实体网络接口『 ppp0 』喔!
而由于 ppp0 是架构在以太网路卡上的,你必须要有以太网卡,同时,即使拨接成功后,你也不能将没有用到的 eth0 关闭喔!注意注意!因此,拨接成功后就会有:
虽然 ppp0 是架构在以太网卡上面的,但上头这三个接口在使用上是完全独立的,互不相干, 所以关于 eth0 的使用上,你就可以这样思考:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none NM_CONTROLLED=no IPADDR=192.168.1.100 NETMASK=255.255.255.0 ONBOOT=yes并请记得一件事情,那就是:『千万不要有 GATEWAY 的设置!』, 因为 ppp0 拨接成功后, ISP 会主动的给予 ppp0 接口一个可以连上 Internet 的 default gateway , 如果你又设置另一个 default gateway ,两个网关可能会造成你的网络不通喔!
至于其他的文件请参考 4.2.1 手动设置 IP 的连接方法来处理即可。 当然啦,拨接之前,请确认你的 ADSL 调制解调器 (小乌龟) 已经与主机连接妥当,也取得帐号与密码,也安装好了 rp-pppoe ,然后就来处理吧!
[root@www ~]# pppoe-setup Welcome to the PPPoE client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... LOGIN NAME (从 ISP 处取得的帐号填入处) Enter your Login Name (default root): T1234567 # 注意啊!这个帐号名称是 ISP 给的,其中如果是 SeedNet ,输入如上, # 如果是 Hinet 的话,就得要输入 username@hinet.net,后面的主机名也要写。 INTERFACE (ADSL 调制解调器所接的网卡代号) Enter the Ethernet interface connected to the PPPoE modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethX, where 'X' is a number. (default eth0): eth0 Enter the demand value (default no): no DNS (就填入 ISP 处取得的 DNS 号码吧) Enter the DNS information here: 168.95.1.1 Enter the secondary DNS server address here: <==若无第二部就按 enter PASSWORD (从 ISP 处取得的密码啊!) Please enter your Password: <==输入密码两次,屏幕不会有星号 * 喔! Please re-enter your Password: USERCTRL (要不要让一般用户启动与关闭?最好是不要!) Please enter 'yes' (three letters, lower-case.) if you want to allow normal user to start or stop DSL connection (default yes): no FIREWALLING (防火墙方面,先取消,用自己未来设置的) The firewall choices are: 0 - NONE: This script will not set any firewall rules. You are responsible for ensuring the security of your machine. You are STRONGLY recommended to use some kind of firewall rules. 1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation 2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway for a LAN Choose a type of firewall (0-2): 0 Start this connection at boot time (要不要开机立即启动拨接进程?) Do you want to start this connection at boot time? Please enter no or yes (default no):yes ** Summary of what you entered ** Ethernet Interface: eth0 User name: T1234567 Activate-on-demand: No Primary DNS: 168.95.1.1 Firewalling: NONE User Control: no Accept these settings and adjust configuration files (y/n)? y Adjusting /etc/sysconfig/network-scripts/ifcfg-ppp0 Adjusting /etc/resolv.conf (But first backing it up to /etc/resolv.conf.bak) Adjusting /etc/ppp/chap-secrets and /etc/ppp/pap-secrets (But first backing it up to /etc/ppp/chap-secrets.bak) (But first backing it up to /etc/ppp/pap-secrets.bak) # 上面具有特殊字体的文件主要功能是: # ifcfg-ppp0 :亦即是 ppp0 这个网络接口的设置文件; # resolv.conf :这个文件会被备份后,然后以刚刚我们上面输入的 DNS 数据取代; # pap-secrets, chap-secrets:我们输入的密码就放在这里!这样设置就成功啦!很简单吧!唯一需要注意的是在上面的 username 那个地方,千万注意, 因为 hinet 与 seednet 的设置是不一样的!千万小心呢!否则会无法连上线呦!此外, 由于我们在未来还会有 firewall 的建置,所以这里不太需要使用到防火墙啦!否则也可能无法连上 Internet 呦!另外,注意一下,一般拨接需要的身份认证机制通过的是 chap 与 pap(注2), 在 rp-pppoe 这套软件中,就将两种认证机制所需的数据通通记录下来啦!那就是 chap-secrets, pap-secrets, 你可以分别察看两个文件的内容,就知道那是啥咚咚了!
[root@www ~]# ifconfig [root@www ~]# route -n [root@www ~]# ping GW的IP [root@www ~]# dig www.google.com [root@www ~]# hostname比较特殊的是,因为 ADSL 拨接是通过点对点 (ppp) 协定,所谓的点对点,就是你的 ppp0 直接连接到 ISP 的某个点 (IP) , 所以,理论上,ppp0 是个独立的 IP ,并没有子网络!因此,当你察看 ppp0 的网络参数时,他会变成这样:
[root@www ~]# ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:111.255.69.90 P-t-P:168.95.98.254 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:59 errors:0 dropped:0 overruns:0 frame:0 TX packets:59 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:7155 (6.9 KiB) TX bytes:8630 (8.4 KiB)如上所示,那个 inet addr 就是你的 IP ,而 P-t-P 就是 Gateway 的意思啦!你也会看到, Mask 是 255.255.255.255 哩! 没有子网络呦!要仔细看清楚哩!
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-ppp0 DEVICE=ppp0 ONBOOT=no ....(其他省略).... [root@www ~]# chkconfig pppoe-server off
很快的,这样你就已经做好 ADSL 拨接上网的动作了!很快乐吧!但是不要忘记了,你的主机若还没有更新 (update) 系统,恐怕资安方面会有些问题哩!所以,赶紧往下两个章节读读去!
除了使用实体 RJ-45 线路来连接网络之外,由于现在笔记本电脑渐渐广为使用,因此在笔记本电脑上面的无线网络 (Wireless Local Area Network, WLAN) 也越来越重要啰~针对无线网络所提出的标准中,早期是 IEEE 802.11b / 802.11g 较为重要,其中 802.11g 这个标准的传输速度已经可以达到 54Mbps 的水准。不过,近期以来还有新的标准,那就是 802.11n (注3) ,这个标准的理论传输速度甚至可达 300Mbps 哩!所以啰,我们也得稍微介绍一下无线网络啦!
我们知道在 RJ-45 的以太网路连接环境中,以 switch/hub 以及网络卡与网络线最重要,该架构中主要以 switch/hub 串接所有的网络设备。那么在无线网络中,当然也需要一个接收信号的设备,那就是无线基地台 (Wireless Access Point, 简称 AP) 了!另一个设备当然就是安装在电脑主机上面的无线网卡啰!
其实无线基地台本身就是个 IP 分享器了,他本身会有两个接口,一个可以与外部的 IP 做沟通,另外一个则是作为 LAN 内部其他主机的 GATEWAY 啰!那其他主机上面只要安装了无线网卡,并且顺利的连上 AP 后,自然就可以通过 AP 来连上 Internet 啦!整个传输的情况可以用下图来示意:
在上图中,我们假设 PC A 与 PC B 这两部主机都有安装无线网卡,因此他们可以扫瞄到局域网路内的 AP 存在,所以可以通过这个 AP 来连上 Internet 啊。在不考虑内部 LAN 连接的情况下,AP 如何连上 Internet 呢?虽然每部 AP 的控制接口都不相同,不过绝大部分的 AP 都是提供 Web 接口来设置的,因此你可以参考每部 AP 的说明书来进行设置,在这里鸟哥就不多说了。
鸟哥就以手边有的设备来说明这个项目,使用的设备如下:
比较凄惨的是,CentOS 6.x 缺省不支持 DWA-140 这个 USB 的无线网卡,因此原本我们还得要自行手动下载 USB 无线网卡的驱动程序才行!更怪的是,我们的内核侦测到的模块是 rt2870sta,但实际上该硬件使用的是 rt3070sta模块... 为了这个,搞了鸟哥两、三天的时间去解决问题...还好,由世界上热心的网友回报支持 Linux 的无线网卡网站说明,发现这只 USB 是支持 Linux 的喔!如下网址所示。而且,已经有公司将这个网卡编译成 CentOS 6.x 可以使用的 RPM 文件啰!相关网址如下:
鸟哥最终由上面第二个网址下载的两个文件是:kmod-rt3070sta-2.5.0.1-2.el6.elrepo.x86_64.rpm, rt2870-firmware-22-1.el6.elrepo.noarch.rpm。鸟哥将他放置于 /root 底下,等一下再来安装。
如果你留心一下图 4.3-1 ,那么就可以发现一件事情,那就是:『如果 AP 不设置任何连接限制,那任何拥有无线网卡的主机都可以通过这个 AP 连接上你的 LAN 』, 要知道,通常我们都会认为 LAN 是信任网域,所以内部是没有防火墙的,亦即是不设防的状态,呵呵! 如果刚好有人拿着笔记本电脑经过你的 AP 可以接收信号的范围,那么他就可以轻易的通过你的 AP 连接上你的 LAN ,并且可以通过你的 AP 连上 Internet ,如果他刚好是个喜欢搞破坏的 cracker , 哈哈!那么当他使用你的 AP 去攻击别人时,最后被发现的跳板是谁?当然是你的 AP! 那是谁会吃上官司?够清楚了吧?而且你内部主机的数据也很有可能被窃取啊!
所以啦,『无线网络的安全性一定是具有很大的漏洞的』,没办法, 因为无线网络的传输并不是通过实体的网络线,而是通过无线信号,实体网络线很好控制,无线信号你如何侦测啊?对吧! 因此,请你务必在你的 AP 上面进行好连接的限制设置,一般可以这样做限制的:
当然,上面两种方法你可以同时设置,亦即不但需要连接的密钥,而且在 AP 处也设置能够访问的 MAC 网卡, 嘿嘿!这样一来,就更安全的多了(注5)。底下让我们来介绍一下 AP 里面经常要了解的数据, 那就是 ESSID/SSID 啰!
想一想,如果你有两部 AP 在同一个局域网路内,那么请问一下,当你的无线网卡在上网时,他会通过哪一个 AP 连接出去呢?很困扰,对吧!其实每部 AP 都会有一个连接的名字,那就是 SSID 或 ESSID,这个 SSID 可以提供给 client 端, 当 client 端需要进行无线连接时,他必须要说明他要利用哪一部 AP ,那个 ESSID 就是那时需要输入的数据了!在鸟哥的案例当中,我将我的 AP 设置为 vbird_tsai 这个名字, 并且给予一个密钥密码,设置的方法如同下图所示:
如上图,在登录了 AP 的设置项目后,依序 (1)先选择无线网络里面的『无线网络设置』,然后在右边的窗口当中 (2)填写正确的 SSID 号码,然后按下 (3)保存即可。之后就是密码项目啦!密码项目的设置画面如下:
我们先选择 (1)无线网络加密设置,然后在右边窗口 (2)点击 WPA-PSK/WPA2-PSK 的加密方式,然后 (3)输入加密的密钥长度,鸟哥这里填写的算是简单到爆炸的密码,小朋友不要学喔!填完后按下保存即可。 这个时候我们就会有底下两个数据:
这仅是个范例说明! AP 设置就到此为止,如果您的设置有不同的地方,请自行查找您 AP 的操作手册呦!
无线网卡有很多模式,鸟哥选择的是 USB 无线网卡,所以想要知道有没有捉到这张网卡,就得要使用 lsusb 来检查, 如果内核缺省不支持,还得要自行编译驱动程序才行!如前所述,我们的驱动程序已经捉在 /root 底下了!
[root@www ~]# lsusb Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 003: ID 07d1:3c0a D-Link System DWA-140 RangeBooster N Adapter(rev.B2) [Ralink RT2870] Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub # 是有捉到的!只是,有加载吗?不知道呢!继续往下检查看看!
[root@www ~]# iwconfig lo no wireless extensions. eth0 no wireless extensions. # 要出现名为 wlan0 之类的网卡才是有捉到喔!所以没有加载正确模块啦!因为没有加载正确的驱动程序,现在让我们来安装刚刚下载的 RPM 驱动程序吧!请先将 USB 拔出来, 然后再安装 RPM 文件。安装的方法不要说你忘记了!
[root@www ~]# rpm -ivh kmod-rt3070sta* rt2870-firmware* # 这个动作会进行很久,似乎程序在侦测硬件的样子! # 这个咚咚做完之后,请将 USB 网卡插入 USB 插槽吧! [root@www ~]# iwconfig lo no wireless extensions. eth0 no wireless extensions. ra0 Ralink STA这个 iwconfig 是用在作为无线网络设置之用的一个指令,与 ifconfig 类似!不过,当我们使用 iwconfig 时,如果有发现上述的特殊字体,那就代表该网络接口使用的是无线网卡的意思啊!虽然有时你会看到无线网卡为 wlan0 之类的代号,不过这张网卡却使用 ra0 作为代号,挺有趣的!
[root@www ~]# ifconfig ra0 up
启动网卡后才能以这个网卡来搜索整个区域内的无线基地台啊!接下来,直接使用 iwlist 来使用这个无线网卡搜索看看吧![root@www ~]# iwlist ra0 scan ra0 Scan completed : Cell 01 - Address: 74:EA:3A:C9:EE:1A Protocol:802.11b/g/n ESSID:"vbird_tsai" Mode:Managed Frequency:2.437 GHz (Channel 6) Quality=100/100 Signal level=-45 dBm Noise level=-92 dBm Encryption key:on Bit Rates:54 Mb/s IE: WPA Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK ....(底下省略)....从上面可以看到 (1)这个无线 AP 的协定,并且也能够知道 (2)ESSID 的名号是没错的!当然啦,(3)连加密的机制是 WPA2-PSK 也是能够得知的!这与前一小节的 AP 设置是相符合的!(4)使用的无线频道是 6 号,接下来呢?就得要去修改设置档,这部份很麻烦,请参考如下的网页来设置:
[root@www ~]# ifconfig ra0 down && rmmod rt3070sta [root@www ~]# vim /etc/Wireless/RT2870STA/RT2870STA.dat Default CountryRegion=5 CountryRegionABand=7 CountryCode=TW <==台湾的国码代号! ChannelGeography=1 SSID=vbird_tsai <==你的 AP 的 ESSID 喔! NetworkType=Infra WirelessMode=9 <==与无线 AP 支持的协定有关!参考上述网址说明 Channel=6 <==与 CountryRegion 及侦测到的频道有关的设置! ....(中间省略).... AuthMode=WPAPSK <==我们的 AP 提供的认证模式 EncrypType=AES <==发送认证码的加密机制啊! WPAPSK="123456780aaa" <==密钥密码!最好用双引号括起来较佳! ....(底下省略).... # 鸟哥实际有修改的,就是上面有特别说明的地方,其余的地方都保留默认值即可。 # 更奇怪的是,每次 ifconfig ra0 down 后,这个文件会莫名其妙的修改掉 @_@ [root@www ~]# modprobe rt3070sta && ifconfig ra0 up [root@www ~]# iwconfig ra0 ra0 Ralink STA ESSID:"vbird_tsai" Nickname:"RT2870STA" Mode:Auto Frequency=2.437 GHz Access Point: 74:EA:3A:C9:EE:1A Bit Rate=1 Mb/s RTS thr:off Fragment thr:off Encryption key:off Link Quality=100/100 Signal level:-37 dBm Noise level:-37 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0如果顺利出现上面的数据,那就表示你的无线网卡已经与 AP 接上线了~再来则是设置网络卡的设置档啰!^_^
[root@www ~]# cd /etc/sysconfig/network-scripts [root@www network-scripts]# vim ifcfg-ra0 DEVICE=ra0 BOOTPROTO=dhcp ONBOOT=no <== 若需要每次都自动启动,改成 yes 即可! ESSID=vbird_tsai RATE=54M <== 可以严格指定传输的速率,要与上面 iwconfig 相同,单位 b/s要注意的是那个 ONBOOT=no 的设置,如果你想要每次开机时无线,网卡都会自动启动, 那就将他设置为 yes 吧!否则就设置为 no 啰!要启动再以 ifup ra0 来启动即可! 呼呼!到此为止,你的无线网卡已经可以顺利的给他启动了喔!很快乐吧! ^_^
[root@www ~]# ifup ra0
Determining IP information for ra0... done.
整个流程就是这么简单喔!一般来说,目前比较常见的笔记本电脑内置的 Intel 无线网络模块 (Centrino) 适用于 Linux 的 ipw2200/ipw21000 模块,所以设置上也是很快!因为 CentOS 6.x 缺省就有支持,你不必重新安装无线网卡驱动程序! 那直接通过上述的方式来处理你的无线网络即可!很快速又方便吧!本章结尾的参考数据处, 鸟哥还是列出许多与无线网卡有关的链接,你可以自行前往查阅与你的无线网卡有关的信息喔(注6)! ^_^
其实这个小节也很重要的!因为可以让你在念完理论后,了解一下如何利用那些概念来查找你的网络设置问题喔! 底下我们就针对几个常见的问题来说说看吧!
你或许曾经听过这样的问题:『我在我的内部局域网域内有几部电脑, 这几部电脑明明都是在同一个网域之内,而且系统通通没有问题,为什么我使用 pop3 或者是 ftp 连上我的 Linux 主机会停顿好久才连上?但是连上之后,速度就又恢复正常!』
由于网络在连接时,两部主机之间会互相询问对方的主机名称配合的 IP ,以确认对方的身份。 在目前的互联网上面,我们大多使用 Domain Name System (DNS) 系统做为主机名称与 IP 对应的查找,那就是我们在上面提到的 /etc/resolv.conf 文件内设置的 IP 由来, 如果没有指定正确的 DNS IP 的话,那么我们就无法查找到主机名称与 IP 的对应了。
公开的互联网可以这样设置,但是如果是我们内部网域的私有 IP 主机呢? 因为是私有 IP 的主机,所以当然无法使用 /etc/resolv.conf 的设置来查找到这部主机的名称啊! 那怎么办?要知道,如果两部主机之间无法查找到正确的主机名称与 IP 的对应, 那么将『可能』发生持续查找主机名称对应的动作,这个动作一般需要持续 30-60 秒,因此,你的该次连接将会持续检查主机名 30 秒钟,也就会造成奇怪的 delay 的情况。
这个问题最常发生在内部的 LAN ,例如使用 192.168.1.1 的主机连接到 192.168.1.2 的主机。 这个问题虽然可以通过修改软件的设置来略过主机名称的检查,但是绝大多数的软件都是缺省激活这个机制的, 因此,内部主机『老是连接时期很慢,连接成功后速度就会恢复正常』 时,通常就是这个问题啦!尤其是在 FTP 及 POP3 等网络连接软件上最常见。
那么如何避过这个情况?最简单的方法就是『给予内部的主机每部主机一个名称与 IP 的对应』即可。举例来说,我们知道每部主机都有一个主机名称为 localhost ,对应到 127.0.0.1 ,为什么呢?因为这个 127.0.0.1 与 localhost 的对应就被写到 /etc/hosts 内嘛! 当我们需要主机名称与 IP 的对应时,系统就会先到 /etc/hosts 找寻对应的设置值, 如果找不到,才会使用 /etc/resolv.conf 的设置去互联网找。这样说,你明白了吧? 也就是说,只要修改了 /etc/hosts,加入每部主机与 IP 的对应, 就能够加快主机名称的检查啰!
了解了吗?所以说,你就要将你的 私有 IP 的电脑与电脑名称写入你的 /etc/hosts 当中了!这也是为啥我们在主机名称设置的地方, 特别强调第五个检查步骤的缘故。我们来看一看 /etc/hosts 原本的设置内容吧!
[root@www ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost # 主机的 IP 主机的名称 主机的别名
在上面的情况中很容易就发现了设置的方法了吧!很简单吧!没错!那就是 IP 对应主机名称啦! 那么现在知道为什么我们给他 ping localhost 的时候,地址会写出 127.0.0.1 了吧! 那就是写在这个文件中的啦!而且 localhost 那一行不能拿掉呦! 否则系统的某些服务可能就会无法被启动!好了!那么将我局域网路内的所有的电脑 IP 都给他写进去!并且,每一部给他取一个你喜欢的名字, 即使与 client 的电脑名称设置不同也没关系啦! 以鸟哥为例,如果我还额外加设了 DHCP 的时候,那么我就干脆将所有的 C Class 的所有网段全部给他写入 /etc/hosts 当中,有点像底下这样:
[root@www ~]# vim /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.1.1 linux001 192.168.1.2 linux002 192.168.1.3 linux003 ......... ......... 192.168.1.254 linux254
如此一来,不论我哪一部电脑连上来,不论是在同一个网段的哪一个 IP , 我都可以很快速的追查到!嘿嘿!那么区内网络互连的时候,就不会多等个好几时秒钟啰!
很多朋友常问的一个问题『咦!我可以拨接上网了,也可以 ping 到奇摩雅虎的 IP ,但为何就是无法直接以网址连上 Internet 呢!』嘿!被气死! 前面不是一直强调那个 DNS 解析的问题吗?对啦!就是名称解析不对啦!赶快改一下 /etc/resolv.conf 这个文件吧!改成上层 ISP 给你的 DNS 主机的 IP 就可以啦!例如 Hinet 的 168.95.1.1 及 Seednet 的 139.175.10.20 啰!例如底下的范例(这个范例就可以照抄了! ^_^):
[root@www ~]# vi /etc/resolv.conf nameserver 168.95.1.1 nameserver 139.175.10.20
朋友们常常会在这个地方写错,因为很多书上都说这里要设置成为 NAT 主机的 IP , 那根本就是不对的!你应该要将所有管理的电脑内,关于 DNS 的设置都直接使用上面的设置值即可! 除非你的上层环境有使用防火墙,那才另外考量!
记得我们在前两章提到的网络基础当中,不是讲了很多缺省路由 (default gateway) 相关的说明吗? 缺省路由通常仅有一个,用来做为同一网域的其他主机传递非本网域的封包闸道。 但我们也知道在每个网络设置文件 (/etc/sysconfig/network-scripts/ifcfg-ethx) 内部都可以指定『 GATEWAY 』这个参数,若这个参数重复设置的话,那可就麻烦啦!
举例来说,你的 ifcfg-eth0 用来做为内部网域的沟通,所以你在该文件内设置 GATEWAY 为你自己的 IP , 但是该主机为使用 ADSL 拨接,所以当拨接成功后会产生一个 ppp0 的接口,这个 ppp0 接口也有自己的 default gateway ,好了,那么当你要将封包发送到 Yahoo 这个非为本网域的主机时, 这个封包是要传到 eth0 还是 ppp0 呢?因为两个都有 default gateway 啊!
没错!很多朋友就是这里搞不懂啦!常常会错乱~所以,请注意, 你的 default gateway 应该只能有一个, 如果是拨接,请不要在 ifcfg-eth0 当中指定 GATEWAY或 GATEWAYDEV 等变量,重要重要!
更多的网络调试请参考后续第六章 Linux 网络调试的说明。