文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>slackware 网络配置

slackware 网络配置

时间:2009-04-29  来源:caocwy

第五章 网络配置

http://www.linuxsir.org/bbs/forumdisplay.php?f=73&page=5&order=desc

内容
网络硬件
网络工具
/etc目录的文件
rc.inet1
rc.inet2
NFS(Network File System 网络文件系统)
tcp_wrappers
总结

一、网络硬件

  就像用计算机做其他大多数有趣的事情一样,要让计算机连接到网络上,你就必须使用一些特殊的硬件。

  你需要一个NIC(Network Interface Card 网卡)来连接到一个LAN上,或者一个Modem来连接到Internet供应商那里,或者你两者都需要(也可能每种都要几个,甚至都不需要)。

  为了配置的目的,我们将这些硬件分成两类:PCMCIA(本本族专用的)和非PCMCIA。使用这样不对称的分类的是有原因的,因为目前发布的内核都不支持PCMCIA,你只能通过一个另外的包(比如内核模块)来支持它,其中包含必要驱动程序和一些配置管理软件。而其他的硬件则可以由发布的内核来直接支持。

1. netmods

  内核支持的网络设备的驱动在netmods包中(slackware/n3/netmods.tgz)。如果你没有安装这个包,那你现在就应该把它装上。(关于包的安装请参见第十六章)

  开机时要装载的内核模块保存在/etc/rc.d目录下的rc.modules中。默认的rc.modules文件包含有一个“Network device support”的部分。如果你打开这个文件察看这一部分内容,你就会发现代码首先检查/etc/rc.d下的rc.netdevice文件。如果setup在安装过程中成功的检测到了你的网络设备,这个文件就会被创建。一般如果它存在,那么你很可能不会来读这不分内容(呵呵,有没有悖论的感觉?);反之,继续读吧。

  在那个“if”块下面是一系列的网络设备和modprobe命令,但是每个都被注释掉了。找到你的设备,然后去掉相应的modprobe的注释,最后保存文件。现在用root运行rc.modules就会装载你的网络设备的驱动程序了(当然同时也会加载其他没有被注释掉的模块)。注意有些模块(比如ne2000的驱动)需要参数,你必须选择好有正确参数的那行。

2. PCMCIA网络设备

  PCMCIA网络设备应该比其他设备更加简单。首先你必须确保安装了pcmcia包(slackware/all/pcmcia.tgz)。(关于安装可以参见第十六章。)安装过程中,pcmcia包会在/etc/rc.d下创建一个rc.pcmcia文件,同时创建一个/etc/pcmcia目录,并且把驱动安装到/lib/modules/<kernel version>/pcmcia目录。pcmcia包Cool的地方在于它会自动检测设备的插入和卸载。你应该可以在插入设备的时候听到系统发出“滴”的一声,这表明需要的模块被载入了。如果你卸载了这个设备,则相应的模块也会被自动的释放。

  不幸的是,如果你编译了一个新版本的内核,你很可能需要重新编译pcmcia-cs来更新这些驱动。当然,源代码是包含了的;在source/a/pcmcia目录下有源代码,脚本以及相关的帮助文档。

二、网络工具

1. ifconfig

  现在你的内核总算可以和你的网络硬件对话了,剩下的就是软件需要一种方法告诉内核把信息传过来,如此等等。我们需要对接口进行配置。我们需要ifconfig(8)。

  学习ifconfig的最好方法恐怕莫过于实例。你可以看看rc.inet1文件(在rc.inet1节中有介绍)来学习一下。下面举个最简单的例子:

  # ifconfig eth0 192.168.1.10 broadcast 192.168.1.255 \
  netmask 255.255.255.0

  该行命令启动了eth0(第一个网卡,对于令牌网使用tr0,ppp使用ppp0,……),并设置其IP为192.168.1.10,其广播地址为192.168.1.255(整个192.168.1子网),其网络掩码为255.255.255.0(表示IP前面三个部分用来标识网络,最后一个部分,即.10,用来标识主机)。除非你要做一些特别的事情,你通常都可以使用IP的前三个部分加上一个255来表示广播地址。通常掩码设置成255.255.255.0都是没错的。其实如果你要做一些特别的事情,你基本上在这方面已经有足够的知识了,于是这些话就基本上成了废话。

  ifconfig也可以用来查看当前的网络配置。当你不带参数的运行这个程序,你就能得到你当前所有的网络接口及其配置。

2. route

  内核通过维护一个路由表来决定网络数据该发向哪里。这里我不打算仔细探讨细节方面的内容,只是告诉你可以使用/sbin/route(8)来查看当前的路由表。route -n将会用IP地址代替所有的主机名称,这在DNS服务器出故障或者你对主机名不感兴趣的时候很有用。幸运的是,如果你进行了一个简单的网络安装过程(大多数人都做过),那么2.2的内核自动帮你创建一个必要的路由表项。

3. netconfig

  netconfig是Slackware安装程序的一部分,但就像大多数安装程序的组件一样,它可以单独运行。netconfig很直观,它会引导你建立一个基本的网络连接。当你对网络配置的那些rc文件不熟悉的时候,这个工具非常有用。运行netconfig的时候,你会看到下面的屏幕提示:

netconfig.gif

  下一步,netconfig会提示你输入计算机的主机名和域名。一般你可以随便设置这两个名字,除非你设置的机器是一台服务器或者是一台很多人都会访问的机器。然后,netconfig会问你如何分配IP:使用静态IP(static IP),DHCP或者仅仅环路(loopback)就可以了。

netconfig.setupip.gif

  如果你的机器不与网络连接,那么直接选择环路就可以了。如果你的计算机要和一个大学或者一个大的办公网络相连,一般你应当选择DHCP。其他情况则选择静态IP。如果你没有选择静态IP,那么设置工作到现在已经完成了。否则你还要接着输入计算机的IP地址、网络掩码、广播地址以及DNS服务器地址。netconfig会告诉你如何得到所有的这些数字的。

4. pppsetup

  Slackware包含了配置拨号连接用的pppsetup。该软件包位于N软件系列中的ppp.tgz中。pppsetup使用的界面和setup程序相同。如果你不记得怎么使用这个界面,你可以参考前面第三章的“setup程序”一节。pppsetup通过一系列的问题来为你配置好/etc/ppp目录下的几个配置文件。以root运行pppsetup,我们来看一下这些问题:

pppsetup.gif

电话号码

  第一个问题是ISP电话号码,你同时应该将拨号方式写在前面。大多数人使用音频拨号(tone)。如果你ISP的号码是555-1013并且使用音频拨号,那么你就应该在对话框输入atdt5551013。

pppsetup.phonenumber.gif

  如果你的电话线需要接电话,而你希望在上网的时候屏蔽掉外来的电话,那就应该输入类似atdt*70,5551013的东西。

  注意逗号不可省略,它会在*70后维持一个1.5秒的停顿,然后再拨号。没有逗号是不行的。(译注:不知道在国内到底有没有用)

调制解调器(Modem)

  下一步,选择Modem的位置。如果你知道在Windows下使用的是哪个COM接口,你在这里选择同样的就可以了。否则你可能要做些尝试。推荐的办法是从ttyS0开始往下逐个尝试。

pppsetup.modem.gif

Modem的波特率(baud rate)

  下一步,选择最与你的Modem最接近波特率。如果你不知道,你可以在Modem的盒子或者所带的文档中找到它。每个选项都有几个例子,所以应该不难找出正确的那个。

pppsetup.baudrate.gif

回拨

  现在你应该用上你的ISP给你的信息了。其实很少有ISP使用回拨,所以你一般都可以选择“NO”。回拨是指你拨了ISP以后,他们拨你的号码让你登陆。(译注:电信就不指望了,真这样的话电话费可以省了:P)

pppsetup.callback.gif

  如果你确实要使用回拨,那你就应该选择“YES”。然后配置程序会提示你输入你的电话号码、登陆的用户名以及密码。你可以先不输入用户名和密码。最后,你还要输入你的ISP使用的认证方式。如果他们使用CHAP或者PAP,那么选择“YES”。你以后还会需要配置他们,这个一会再说。如果ISP不用这两个,那么选择“NO”,然后参考下面的“Chat脚本”那个部分。

Modem的初始串

  除非你使用的是一个很另类的Modem,你一般都可以直接按回车来选择默认的初始串(“AT&FH0”)。不然你就得翻出你的Modem的说明书了。

pppsetup.initstring.gif

域名

  现在你需要输入你的ISP的域名了。这部分内容一般类似于“example.net”,“slackware.com”等等。(好吧,肯定不是slackware.com)

pppsetup.domain.gif

DNS的IP地址

  你的ISP应该会给你提供他们的DNS服务器的地址。你如果已经有了的话直接填到方框里就行了,否则你应该去ISP那里问一下。

pppsetup.dns.gif

认证方式

  这个问题可能也需要一些尝试才能完全搞定。你需要搞清楚你的ISP到底使用的是哪种认证方式:CHAP?PAP?还是其他?最简单的办法就是直接给他们打电话。然而如果你连接以后出现了login和password的提示,一般你应当选择“SCRIPT”,否则还得去问ISP。

pppsetup.authentication.gif

PAP或者CHAP

  如果你的认证方式选择了“PAP”或者“CHAP”,程序会提示你输入用户名。你的ISP应该已经给了你一个用户名,如果还没有,那赶快去找他们,肯定是什么地方出问题了。

  然后你应该在接着的一个对话框输入ISP给你的密码。

Chat脚本

  如果你选择的是“SCRIPT”,你将会看到一个相当长的关于chat脚本的说明。仔细阅读,因为它把所有的东西都说的很清楚了。基本上来说,脚本要求你描述的是ISP将会发给你的信息内容以及你的计算机应当回应的信息内容。

  然后你会进入一个循环,你将不断的输入ISP将会传过来的信息以及你的计算机应该发回的信息。一旦你完成了,只要在一个空的输入框直接按回车,程序就会结束输入。

结束

  终于,你将看到最终生成的ppp配置文件了。其实现在你并不能对这些文件做什么修改,但是你至少可以大致察看一下是不是所有的内容都对了。最后按回车保存配置并退出pppsetup。

  这个屏幕其实也包含了很多关于如何建立和断开连接的信息。最基本的原则是这样的:在root下运行ppp-go是建立连接,一旦你看到了一个本地IP和一个远程IP,那么连接就已经建立了。而ppp-off则会断开连接。

pppsetup.done.gif

三、/etc目录的文件

1. /etc/inetd.conf

  在网络中心的一个操作系统上,同时运行许多服务是不明智的。一般来说对于每个服务,都要有一个对应的程序在某处监听外来的连接,这对一个支持很多服务的服务器来说是一个沉重的负担。而inetd正是为了减少这种负载而创造出来的。inetd其实就是一个“互联网超级服务器(internet superserver)”,它同时监听多个服务,每当收到某个服务的连接请求,inetd就运行相应的服务程序来处理。这样,本来的很多等待连接的服务程序就减少到了一个。

  /etc/inetd.conf是inetd的配置文件。其中指定了连接和服务程序的对应关系。inetd(8)的man文档对此做了详细的描述,但我们还是要来看一下基本的内容:

  ftp stream tcp nowait root /usr/sbin/tcpd wu.ftpd -l -i -a

  这行指定了ftp服务器的配置。注意行的开头是协议名称(“ftp”),行末则是要响应这个连接而运行的命令。在这里,这个对应的服务程序是/usr/sbin/tcpd。这是一个“包装”程序,用来为被包装的程序提供一些基本的安全措施。wu.ftpd则是我们真正的ftp服务程序,只不过被tcpd包装过了,真正的调用由tcpd来进行。关于tcpd的更多信息可以在“tcp包装器”一节中找到。

  就像许多其他系统文件一样,inetd.conf中的注释行以#字符开头。你可以简单的以此来加入或者取消某些服务,然后重新运行inetd就可以了。

2. /etc/resolv.conf

  这个文件用来告诉系统到哪里进行DNS查询。机器用到的所有的DNS服务器都在这里列了出来,同时主机的域名也是在这里指定的。下面是resolv.conf的一个例子(这是从我正在用的笔记本上弄下来的,主机名和域名是ninja.tdn):

  domain tdn
  nameserver 192.168.1.1
  search tdn. slackware.com

  第一行指定了ninja的域名,这是紧跟在主机名后面的东西。第二行就是我们局域网的DNS服务器。在这里你可以同时指定多个DNS服务器,需要域名解析的时候系统会逐个尝试。

  最后一行比较有趣。它假设了我的系统中默认的域名。举个例子,我有两台机器分别叫做zuul.tdn和hejaz.slackware.com,那么我可以直接ping zuul和ping hejaz来ping这两台机器。对于“zuul”,ping程序会首先尝试在后面加一个域名“.tdn”,然后就找到了这台机器。而对于“hejaz”,ping程序在尝试“hejaz.tdn”失败后,就会继续尝试“hejaz.slackware.com”。注意在search这一行上,所有的域名(除了最后一个)都要以一个“.”结尾。如果只有一个,因为它是最后一个,所以不必加“.”。

3. /etc/hosts

  hosts文件是一种简单的域名解析机制。该文件列出了主机名和它们对应的IP。这在小型网络(没有必要使用DNS)或者DNS出问题的时候都很有用。在系统启动的时候,由于DNS不可用,系统对域名解析采用的就是这种机制。我机器上的hosts文件是这样的:

  127.0.0.1 localhost
  192.168.1.32 ninja.tdn ninja

  第一行是本机地址(译注:这就是为什么localhost可以用来代表本机的原因)。实际上你可以给一个IP地址对应多个名称,用空格隔开它们就可以了。因此,在第二行,我就把“ninja.tdn”对应成了192.168.1.32,同时我还把“ninja”也写上了,这样在我偷懒直接输入“ninja”的时候该条就会被用到。

四、rc.inet1

  /etc/rc.d/rc.inet1文件用于设置网络的一些底层方面的内容——初始化设备、设置地址和路又表。Slackware中的rc.inet1有很详细的注释,这里不在赘述。

五、rc.inet2

  /etc/rc.d/rc.inet2用于设置网络的其他内容:运行服务和守护进程,并处理所感兴趣的网络选项。下面列出一块代码作例子:

  # Start the NAMED/BIND name server:
  if [ -f ${NET}/named ]; then
   echo -n " named"
   ${NET}/named -u daemon -g daemon
  fi

  这里重要的一行是第四行,用于运行named(8)程序。其余部分格式基本是固定的:“if”语句检查named程序是否存在,echo那一行在系统启动的时候把要运行named程序的这个消息打印到屏幕上。你会发现rc.inet2中的大多数服务都是以这样的语句块运行的:检查是否有明显的不该运行该程序的原因,然后显示一个运行该程序的消息,最后是运行该程序的实际命令。rc.inet2也被详细的注释过,你可以马上打开看一会。

六、NFS(网络文件系统)

  网络文件系统的目的显然是要在网络上共享不同机器上的文件。NFS最酷的部分在于它能够使用户在一台机器上直接mount另一台机器的共享文件夹,然后用户可以直接把它看作本地的文件。

  这种透明性的实现建立在以下两个基础上。第一,服务器上必须有相关的服务运行:portmap(8)、nfsd(8)和mountd(8)。第二,服务器必须显式的指出准备把哪些文件共享,这一步通过/etc目录下的exports(5)文件完成。

  对于第一个部分,只要安装好tcpip1.tgz,rc.inet2就会帮你搞定剩下的事情。/etc/exports则比较有趣。

  假设在battlecat.tdn上有一个图片目录,而我想把它mount到ninja.tdn。在battlecat上,我们需要在/etc/exports里加上类似这样的一行:

  /var/media/images ninja.tdn(ro)

  于是在ninja上,我只要输入如下命令就可以把这个图片目录mount到本地的/mnt了:

  # mount -t nfs battlecat.tdn:/var/media/images /mnt

  不幸的是,这样一来我就没有了对这个共享目录的写权限——battlecat的/etc/exports中有“(ro)”选项,表示只读。所有类似的选项都应该放在客户端的名称后面,并且放置在一个括号里,不同选项间用逗号隔开。比如:

  /var/media/images ninja.tdn(rw,no_root_squash)

  “rw”显然是可读可写的意思——根据用户和组的映射(详细解释见exports(5)相应的man页面),ninja上的用户可以得到写权限。我不喜欢squash,所以留到man里面解释吧。如果你想用NFS做很多事情,exports(5)会给你带来很大的方便。

七、tcp_wrapper(TCP包装器)

  tcp_wrapper是这样一套基本系统,它可以用来禁止(或者显式的允许)特定的主机对某些服务的访问。简单的说,它的工作原理是这样的:

  inetd(internet super-server)运行很多的服务,其中很多都是由tcpd包装好的。换句话说,tcpd是真正运行这些服务的程序,但是inetd不知道这些(其实它根本不关心)。tcpd根据/etc/hosts.allow和/etc/hosts.deny来判断是否允许传来的连接请求。

  这些文件中的规则可以很复杂,我们假设pyramid.tdn确实很讨厌,根本不让我们可怜的mojo.tdn安静一下。于是mojo.tdn可以这样设置/etc/hosts.deny:

  ALL: pyramid.tdn

  这行的意思很清楚:通过tcpd的保护阻止pyramid使用mojo上的所有服务。除此之外,如果你还想禁止某个域名的所有主机,那么应该这样写:

  ALL: pyramid.tdn, .annoying.domain

  但是等等!我哥们儿Hobbes的机器域名也是.annoying.domain,我不想让他被阻止(我只是不想他之外的那些烦人的人来访问)。这也很简单,我们不动前面的hosts.deny,而是把Hobbes加到hosts.allow中:

  ALL: hobbes.annoying.domain

  更多的细节可以察看tcpd(8)、hosts_access(5)和hosts_options(5)。实际上tcp_wrapper系统比上面所说的更加灵活,并且很值得进一步的研究。

八、总结

相关阅读 更多 +
排行榜 更多 +
摧毁大厦游戏

摧毁大厦游戏

飞行射击 下载
合并动物城手游版

合并动物城手游版

休闲益智 下载
哈士奇大冒险

哈士奇大冒险

休闲益智 下载