终于要来到修改 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 |
[root@www ~]# lspci | grep -i ethernet 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) |
[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 .....(以下省略)..... |
一般来说,如果没有特殊需求,鸟哥不是很建议你自己编译网络卡的驱动程序!为啥? 因为想到每次更新核心都得要重新编译一次网卡驱动程序,光是想想都觉得烦~所以,没有被 Linux 预设核心支持的网卡, 就先丢着吧!
Tips: 鸟哥之前买了一张内建网卡的主板,该网卡并没有被当时的 Linux 预设核心所支持,所以就得要自己编译核心啦。因为 CentOS 很少更新核心,所以第一次编译完毕之后就忘记有这回事了。等到过了数周有新的核心出现后,鸟哥很开心的自动升级核心, 然后远程进行 reboot ,结果呢?没有网卡驱动程序了啦!我的主机无法联网,得要到主机前用 tty 登入后才能进行编译~唉~ |
如果你真的很有求知欲,而且该网卡的官网有提供给 Linux 的驱动程序原始码; 或者是你很想要某些官网提供的驱动程序才有的特殊功能;又或者是你真的很不想要再买一张额外的网卡。 此时,就得要重新编译网络卡的驱动程序啰。
Tips: 事实上,如果你要新添购硬件时,请先查阅一下硬件包装上面是否提及支持 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 |
# 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 |
[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 ....(以下省略).... |
我们知道 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 <==就是最大传输单元的设定值,若不更改则可省略 |
[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 那表示出问题啦!赶紧检查有无设定错误。 |
[root@www ~]# vim /etc/resolv.conf nameserver 168.95.1.1 nameserver 139.175.10.20 |
# 检查四:看看 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 |
[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 |
至于其他的档案请参考 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 的话,就得要输入 [email protected],后面的主机名也要写。 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:我们输入的密码就放在这里! |
[root@www ~]# ifconfig [root@www ~]# route -n [root@www ~]# ping GW的IP [root@www ~]# dig www.google.com [root@www ~]# hostname |
[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) |
[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 哩!所以啰,我们也得稍微介绍一下无线网络啦!
Tips: 无线网络的机制非常多,我们现在常听到的主要有 Wi-Fi (可想成是 802.11 相关标准) 以及 WiMAX (802.16, 注4) 等, 在底下我们主要介绍的是目前使用较广泛的 Wi-Fi 相关无线网卡喔!可不要搞错啰! |
我们知道在 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 之类的网卡才是有捉到喔!所以没有加载正确模块啦! |
[root@www ~]# rpm -ivh kmod-rt3070sta* rt2870-firmware* # 这个动作会进行很久,似乎程序在侦测硬件的样子! # 这个咚咚做完之后,请将 USB 网卡插入 USB 插槽吧! [root@www ~]# iwconfig lo no wireless extensions. eth0 no wireless extensions. ra0 Ralink STA |
[root@www ~]# ifconfig ra0 up
|
[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 ....(底下省略).... |
[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 |
[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 |
[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 网络侦错的说明。