其实对于很多人来说,我前面的内容讲述得无论有多么生动,多么引人入胜,他总是能够很淡定、很淡定的等待着。等待着什么呢?他们在等着怎么解决Linux的上网问题,要不然还活什么大劲呢?好了,激动人心的故事即将开场,那就来吧…… 2.7.1 了解IP地址 数据列车在网络轨道上川流不息地穿梭来往。这些列车完全是无人驾驶的,但是它们能准确地把数据包裹传送到目的地是有很大学问的。网络数据传输有一套相当完善的机制。不仅要在包裹上注明收发双方的地址和名字,以及传递方式(挂号信TCP/普通快递UDP)等详细信息,还要提供各种错误检测和处理手段。比现实中的“高铁运输”强一万倍! 谈论网络不能不提大名鼎鼎的IP地址。IP地址是网络设备的数字标签,目前有两大成员,它们是IPv4和IPv6。我简单介绍一下。 IPv4地址是由四个字节组成,格式为A.B.C.D。每个字节又是由8位二进制数字组成,也就是这样的格式xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx。在A.B.C.D中的A、B、C这3个字节一般用来识别子网的网络地址,D这个字节用来表示子网内主机,也称主机地址。但是这不是定论,因为具体到地址中哪几位用来识别网络,哪几位用来识别主机,是要通过子网掩码来运算得出的。 子网掩码也是一个四字节的数。如果换算成二进制的数字,对应网络部份都为1,而主机部份则都为0。比如255.255.255.0这个掩码,它换算成二进制就是: 11111111.11111111.11111111.00000000 |-------------网络部份-----------|主机部份| 将这个子网掩码与主机的IP地址进行按位“与”运算(and运算),就会得到“A.B.C.0”这样的值。这就表明“A.B.C”是网络地址,而最后那个被“与”掉的就是主机地址。 网络地址相同的主机被认为在同一个子网下,而不同的主机地址就把同一子网中的主机区分开来。一个子网中最多只能有254个主机,因为0被用来作为网络地址,而255则被用来做广播地址。如果向某个子网的255这个主机(比如192.168.1.255)发送消息,则整个子网下的所有主机都能收到消息,但前提是发送者也必须在这个子网中。 在实际使用中这种子网掩码的写法有些过于麻烦,于是人们就发明了一种更简单的写法,如192.168.1.1/24。其中的24表示子网掩码的前24位是1,转换下来还是“255.255.255.0”。效果是一样的,表述起来就简单了许多吧? IPv6是被指定为IPv4继任者的下一代互联网协议版本。IPv4只用32位地址,而IPv6使用128位地址。新增的地址空间支持2128(约3.4 ×1038)个位址,号称能让地球上的每一粒沙子都分到一个IP。这一扩展提供了灵活的地址分配策略以及路由转发方式,并消除了对网络地址转换(NAT)的依赖。2011年互联网协会将6月8日定为世界IPv6日,包括Google、Facebook和雅虎在内的众多参与者在那一天对他们的主要服务启用了IPv6支持,以推进互联网工业加速部署,表明对IPv6进行全面支持的决心。 IPv4和IPv6的过渡期存在着兼容问题。一般是通过双栈技术或隧道技术来解决。但是目前IPv6发展的前景并不是那么乐观,由于IPv4的泛在性的问题,以及IPv6并没有在大规模使用的环境之下测试过,这让许多骨干网运营商保持着按兵不动的态度。所以,也就没有所以了…… 2.7.2 相关配置文件 了解了IP地址,接下来我们就来看看如何配置IP地址的相关信息。网络设备地址信息可从网络接口配置文件中获取,它们通常被保存在/etc/sysconfig/network-scripts这个目录下(CentOS是这样设计的)。这里面保存着一些与网络配置有关的脚本,基本上从名字就能看出它们是干什么的。例如ifcfg-eth0就是一个网卡的配置文件,它的基本内容如下: # 表示设定网卡的名称,第一个网卡是eth0,第二个是eth1…… DEVICE=eth0 # 启动时IP取得的协议,static/dhcp/none。static 为固定IP 地址。 BOOTPROTO=static # 广播地址 BROADCAST=192.168.1.255 # IP 地址 IPADDR=192.168.1.23 # 子网掩码 NETMASK=255.255.255.0 # 子网地址 NETWORK=192.168.1.0 # 表示开机的时候启动网卡 ONBOOT=yes # 网卡的类型为以太网类型 TYPE=Ethernet 一个网卡的ip地址就在这里配置。还有一些类似ifup-XXX或ifdown-XXX的文件,它们负责关闭或开启某项网络功能,比如拨号网络等。 在我们寄送信件时,一般是需要在目的地一栏里填上张三李四王二麻子的。这个可识别的地址在网络世界里就是域名了,这样的形式对于用户来讲比较形象,也容易记忆。但是网络传输系统可不能直接用这个东西来找目的地,需要把域名转化成IP地址才行,毕竟计算机只会识数嘛。术业有专攻,域名转IP这事儿咱办不好,得请DNS服务器来完成这个工作。Linux使用/etc/resolv.conf文件来设定DNS服务器,它的内容可以如下所示: nameserver 8.8.8.8 nameserver 202.96.128.86 如果你指定了多个DNS 服务器,那么先后顺序决定了主从服务器。目前最多支持3个域名服务器。8.8.8.8,又吉利又好记的数字,猜猜这是哪家的DNS服务器地址?答案是:Google,他们很幸运地拥有了这个地址。 以上谈到的是Linux操作系统上最基本的配置文件。如果不知道它们的配置选项,Linux网络一定玩不转。 2.7.3 安装网卡 现在的电脑一般都自带有线和无线网卡,在安装Linux操作系统的时候,网络驱动会自动把它们识别出来,然后它们就跟随其他成员一起在Linux系统上安家落户了,你只需根据提示输入IP地址、子网掩码等相关信息就可以完成网络配置安装。Linux网络驱动是根据网卡上的网卡芯片进行支持的,根本不在乎你是一二三牌网卡还是四五六牌网卡。换句话说,即便是不同厂家生产的网卡设备,只要使用了相同型号的网卡芯片,Linux系统就会使用相同的驱动程序。 Linux的设备驱动程序通常是以.c(驱动程序源程序)或.o(编译后的驱动程序模块)形式提供,而不是Windows下的什么.inf、.vxd或者像Setup.exe这样的安装向导。下载相应的驱动源码后,一般使用make命令利用gcc编译产生.ko目标文件,然后使用make install或者手工将这个文件拷贝到/lib/modules/当前内核版本/net目录下。 当然,也有些厂商会将驱动程序以.rpm等方式打包。我们利用rpm方式安装操作就会简单一些。但是不管用哪种形式安装,要注意选择正确的内核版本下的驱动程序。如果你的网卡设备供应商不提供对Linux支持,或者你遇到有关Linux驱动安装使用的问题,没有关系。到各大Linux网络社区去寻求帮助,GNU阵营的编程高手都是活雷锋,会很热心地给你解答。 顺便提一句,现在正经的网卡厂商都会非常积极地提供Linux系统驱动,如果你遇到了那种Linux驱动不了的网卡,只能说你买到山寨货了。直接扔了一点都不可惜! 2.7.4 手工设定IP地址 如果你想手工配置网络接口的IP地址并把它固定下来,目前有三个方法: 1. 利用发行版专用网络接口配置工具来修改IP地址,一般都提供图形界面工具; 2. 直接修改网络接口的配置文件,例如直接编辑/etc/sysconfig/network-scripts/下面的网卡配置文件来进行配置,请参照2.7.2中给出的例子; 3. 修改特定的文件,加入ifconfig 指令来指定网卡的IP地址,例如: # ifconfig eth0 192.168.1.252 netmask 255.255.255.0 如果是Red Hat或Fedora的发行版,可以把ifconfig 的语句写入/etc/rc.d/rc.local文件中。但相对来说还是写入关于网络接口的配置文件中更为安全和可靠;但虚拟网络接口配置只能写入/etc/rc.d/rc.local 中。 2.7.5 自动获取IP地址 在私网中,IP地址一般需要自动获取,而不是主动分配,这样可以避免IP地址的冲突。把ifcfg-eth0文件中的BOOTPROTO=static改成BOOTPROTO=dhcp,然后使用: # setup service network restart 命令就能自动获取IP地址。之后使用ifconfig命令(后面的章节会详细介绍)一般就可以看到IP地址了。如果还是没有获得IP地址,我得问你,在你的局域网中启动DHCP服务器了吗?哈哈,光想着客户端,还没有启动DHCP服务器吧。 2.7.6 固定IP上网方式 在花费了真金白银从ISP运营商那里买了上网服务后,我们首先搞清楚它的上网方式。是拨号上网呢?还是直接插网线就能上网呢?如果运营商提供的是直接插网线上网的方式,他会给你一个IP地址和网关地址。这种方式下,装有Linux操作系统的电脑通过网线可直接连接到墙壁上的RJ45网口。我们可以先做一下上网测试,待测试成功后再把参数值写到相应的配置文件中。 先用ifconfig设置运营商给的IP地址,然后使用以下命令添加默认网关: route add default gw <运营商的网关地址> 之后ping一下外部网络地址,例如8.8.8.8。验证连接没有问题后,将其配置到resolv.conf中成为默认的DNS服务器。这个时候执行ping www.google.com应该就能够成功了。如果没什么问题的话,你就可以把route命令加到启动脚本(rc.local)中了。更好的方法是把默认网关地址直接写入到网络接口配置文件中(还记得ifcfg-eth0不?),添加的内容就是: GATEWAY=[网关IP] …… 既然能上网了,那就访问www.linux.com了解一下Linux最近一段时间发生的故事吧。可是只能有一台电脑上网,还是不爽!别着急,增加一台路由器就能解决问题。这台路由器与墙壁上的RJ45网口连接,然后让你的电脑与这台路由器连接。在这种情况下,你需要把你计算机上的默认网关地址设置为路由的IP地址,也就是: route add default gw <路由器的IP地址>。 2.7.7 ADSL拨号上网方式 有的网络运营商提供的是ADSL宽带上网(也就是用电话线上网)服务。他会赠送你一个不会喵喵叫的猫,实际上这是个带路由功能的上网设备。当使用宽带账号和密码拨号之后,这个猫通过PPPoE协议在以太网卡与服务器之间建立PPP(点对点协议)连接。 也许有人会有疑问,拨号上网也是宽带上网吗?当然是!在这里我们可要搞清楚宽带和拨不拨号是没有关系的。 回归正题。现在你就把装有Linux操作系统的电脑与这个猫相连,给modem上电,"DSL"灯亮了就表示你的线路通了。 接下来该怎么办呢?你若是选择图形界面的话,就自己研究一下。如果选择文本界面,就跟我来操作吧。 首先要确认系统中已经安装了rp-pppoe这个软件包(默认有安装),没有的话就安装一个。之后就可进行PPPoE客户端的配置了。执行pppoe-setup命令(有些系统中可能是adsl-setup命令,其实都是一样的东西): # pppoe-setup Welcome to the ADSL client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... LOGIN NAME Enter your Login Name (default root): ←输入运营商给你的用户名 INTERFACE 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): ←与modem连接的网卡 Do you want the link to come up on demand, or stay up continuously? If you want it to come up on demand, enter the idle time in seconds after which the link should be dropped. If you want the link to stay up permanently, enter 'no' (two letters, lower-case.) NOTE: Demand-activated links do not interact well with dynamic IP addresses. You may have some problems with demand-activated links. Enter the demand value (default no): ←直接回车,接收默认值 DNS Please enter the IP address of your ISP's primary DNS server. If your ISP claims that 'the server will provide dynamic DNS addresses', enter 'server' (all lower-case) here. If you just press enter, I will assume you know what you are doing and not modify your DNS setup. Enter the DNS information here: ←如果你没有什么特别的打算就回车 PASSWORD 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 Please choose the firewall rules to use. Note that these rules are very basic. You are strongly encouraged to use a more sophisticated firewall setup; however, these will provide basic security. If you are running any servers on your machine, you must choose 'NONE' and set up firewalling yourself. Otherwise, the firewall rules will deny access to all standard servers like Web, e-mail, ftp, etc. If you are using SSH, the rules will block outgoing SSH connections which allocate a privileged source port. 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 最后会输出一些你之前设定好的信息汇总,让你确认这是不是就是你要的。如果一切OK,输入“y”就大功告成了。而且还会告诉你接下来应该怎么办,多贴心的设计啊! 为什么这里我介绍得这么详细呢?因为大多数人都是采用这种方式上网的,而前面介绍的那种采用固定IP上网的不是被坑了就是大款!反正是小众^_^。不过家里有路由器的,可以按照我们前面介绍的方法配置上网。