📄 dhcp-3.html
字号:
<P><P>若你想要取得给 linuxppc 使用的预先编译好之 dhcpcd 程序,请寄信到<P><P><P><A HREF="mailto:reshapiro@mediaone.net">reshapiro@mediaone.net</A>。<P>我也提供了二元码的 RPMs 包装档:<P><P><P><A HREF="javascript:if(confirm('ftp://ftp.linuxppc.org/pub/linuxppc/contrib/linuxppc-R4/RPMS/ \n\nThis file was not retrieved by Teleport Pro, because it did not meet the project\'s file type specifications. \n\nDo you want to open it from the server?'))window.location='ftp://ftp.linuxppc.org/pub/linuxppc/contrib/linuxppc-R4/RPMS/'" tppabs="ftp://ftp.linuxppc.org/pub/linuxppc/contrib/linuxppc-R4/RPMS/">ftp://ftp.linuxppc.org//pub/linuxppc/contrib/linuxppc-R4/RPMS/</A><P>请不要使用该目录之下的 dhcpcd-1.3.8-2.ppc.rpm 档案,它已经停止维护了。可靠的版本是 dhcpcd-0.70-0.ppc.rpm(给 linuxppc 2.1.24 使用的)以及 dhcpcd-1.3.8-3.ppc.rpm (给 linuxppc 2.1.102 和以上的版本使用的)。版本 1.3.9 的 rpm 包装档近期内应该会提供出来。同时我还依照版本 0.65 和 0.70(由 Hariguchi 所发展)的方式对版本 1.3.9 (由 Viznyuk 所发展) 做了一些修改(就是 附加上 -c 的命令列选项)。(请注意,标准的 Viznyuk dhcpcd 并不包含这样的内容。)<P><P><H2><A NAME="ss3.7">3.7 “记号环”(Token Ring)网络</A></H2><P><P>若你尝试在“记号环”网络上执行 dhcpcd 程序,将无法正常运作。以下是Henrik Stoerner <CODE>(henrik_stoerner@olicom.dk)</CODE> 提供给我的解决方案。<P><P><P>问题出在 dhcpcd 只认识“乙太网络”( Ethernet)卡。若它发现到“记号环”网络卡,则它会拒绝做任何的事情,并且报告说“界面不是乙太网络”。<P><P><P>解决方案就是使用一个简单的修正码来变更 dhcpcd 的原始程序码。我已经将此修正码放在一个小型的网页上,并提供 RedHat 的 RPM 包装档和一个预先编译好的二元档:<A HREF="javascript:if(confirm('http://eolicom.olicom.dk/~storner/dhcp/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://eolicom.olicom.dk/~storner/dhcp/'" tppabs="http://eolicom.olicom.dk/~storner/dhcp/">http://eolicom.olicom.dk/~storner/dhcp/</A><P><P><P>这个修正码已经送到了 dhcpcd 的维护者手上了,因此,它有希望被未来发行的 dhcpcd 版本所采用。<P><H2><A NAME="nameserver"></A> <A NAME="ss3.8">3.8 最後,请完成以下的动作</A></H2><P><P>在你的机器重新开机之後,你应该设定网络的界面。请输入:<P><CODE>ifconfig</CODE><P>你应该会看到如下的内容<P><HR><PRE>lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:302 errors:0 dropped:0 overruns:0 frame:0 TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0eth0 Link encap:Ethernet HWaddr 00:20:AF:EE:05:45 inet addr:24.128.53.102 Bcast:24.128.53.255 Mask:255.255.254.0 ^^^^^^^^^^^^^^^^^^^^^^^ UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24783 errors:1 dropped:1 overruns:0 frame:1 TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96 Interrupt:10 Base address:0x300 </PRE><HR><P><P><P>如果,你在 inet addr 之後看到一些正常的数字,这表示你已经设定好了。如果,你看到的是 0.0.0.0 也不要绝望,它只是 dhcpcd 在取得 IP 位址前暂时的设定值。如果,过了几分钟之後,你仍然看到 0.0.0.0 ,请参考 <A HREF="#troubleshooting">疑难排除</A>。DHCPcd 是一个“监控程序”(daemon),所以只要你的机器还活著,它将会持续保持执行的状态。它每三小时会与 DHCP 服务器再联络一次,尝试续约 IP 位址的租期。它会将所有的讯息记录在 syslog 档案中(在 Slackware 上,为 /var/adm/syslog;在 RedHat/OpenLinux上,为 /var/log/syslog)。<P><P><P>最後要做一件事。你必须指定名称服务器。有两个方式可以完成这个步骤,你可以要求网络服务供应商,告知名称服务器的 IP 位址,然後再将此位址填入 /etc/resolv.conf 档中,或者,你也可以让 DHCPcd 从 DHCP 服务器取得资料,然後在 /etc/dhcpc 目录下产生档案 resolv.conf。我决定使用 DHCPcd 来产生档案 resolv.conf 的内容,方法如下:<P><P><P>备份旧的 /etc/resolv.conf 档案<P><CODE>mv /etc/resolv.conf /etc/resolv.conf.OLD</CODE><P>如果目录 /etc/dhcpc 不存在,你可以自行产生此目录<P><CODE>mkdir /etc/dhcpc</CODE><P>然候将 /etc/resolv.conf 以“符号链结”至 /etc/dhcpc/resolv.conf<P><CODE>ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf</CODE><P><P> 如果这个方式无法正常运作,请尝试使用下面的方法(下面这个修正方法是 nothing@cc.gatech.edu 所建议的,其内容修改自 Henrik Stoerner所提供的修正方法)<P> <P><A NAME="error3"></A> <P>我还必须执行下面这个步骤,只因为我的 dhcpcd 不会产生档案 /etc/dhcpc/resolv.conf。我在 /etc/sysconfig/network-scripts/ifup 档案中,做了以下的修改(虽然改的不是很好,但是它已经可以为我解决这个问题了):<P><P><P><P><HR><PRE>elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE} echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^ echo "failed." exit 1</PRE><HR><P>我把它修改成:<P><HR><PRE>elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^^^ echo "failed." exit 1</PRE><HR><P><P><P><B>注意</B> ! (bang) 这个符号<CODE>if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];</CODE><P><P><P><P><P>总算大功告成,可以坐下来享受成果了 :-)。<H2><A NAME="ss3.9">3.9 其它注意事项</A></H2><P><P>以下的步骤不是绝对必要,但是对某些人而言,可能就派得上用场。<P><B>a) </B>如果,你只是偶尔才会有网络连线的需求,你可以使用命令列的方式来启动dhcpcd(要完成这个步骤,你必须拥有 root 的身份):<P><P><CODE>/usr/sbin/dhcpcd</CODE><P>当你想要关掉网络,请输入<P><CODE>/usr/sbin/dhcpcd -k</CODE><P><P><H2><A NAME="troubleshooting"></A> <A NAME="ss3.10">3.10 疑难排除</A></H2><P><P>如果,你按照了上述的步骤,却仍然无法存取网络,很可能是因为:<P><P><P><B>I. 你的网络卡设定不正确。 </B><P><P>在开机的过程中,你机器将会侦测你的网络卡,并且应该会显示下面几行的讯息内容:<P><HR><PRE>eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10.3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov</PRE><HR><P>如果,你的 Linux 系统不会出现上面这个讯息,这表示,你的网络卡可能无法被辨识。假使,你使用的是一般的乙太网络卡(NE2000 兼容),你应该会拿到一片 DOS 工具磁片,你可以用它来设定网络卡。尝试设定各个 IRQs 值,一直到 Linux 可以辨识到你的网络卡(IRQ 的值设定通常为 9,10,12)。<P><P><P><B>II. 所使用的 DHCP 服务器支持 RFC 1541 标准/我的 DHCP 服务器是 Windows NT</B><P><P>尝试执行 dhcpcd ,请输入<P><CODE>dhcpcd -r</CODE><P>使用 ifconfig 来检查看看,是否你的网络界面已经设定好了(最初你所看到的是 Inet.addr=0.0.0.0,你得等待几秒的设定时间)。<P><P>如果这个方法可以解决你的问题,则你应该在相关的开机命令稿中加上 "-r" 选项,譬如将 <CODE>/sbin/dhcpcd</CODE> 修改成 <CODE>/sbin/dhcpcd -r 。</CODE><P><P><P>以 RedHat 为例,你必须编辑 /etc/sysconfig/network-scripts/ifup 这个命令稿,并将它修改成:<P><HR><PRE> IFNAME=$[ {DEVICE} \ "/sbin/dhcpcd -r -c /etc/"- etc etc. </PRE><HR><P><P><P><B>III. 在开机期间会产生错误讯息 "Using DHCP for eth0 ... failed",但是,系统却能正常运作。</B><P><P><P>你很可能使用的是 RedHat 的系统,而且,你并未仔细地按照说明操作 :-)。你在 if 叙述中遗漏了 ! (bang) 这个符号。跳到 <A HREF="#error3">此处</A> ,检视如何来修正它。<P><P><P><B>IV. 我的网络卡运作了几分钟之後,便没有反应了。</B><P><P><P>可能是 gated(“闸道监控程序”(gateway daemon)) 所回报的信息,弄乱了 Linux 主机的路由,才会造成这样的问题。检查是否 gated 正在执行中:<P><P><P><CODE>ps -auxww | grep gate</CODE><P><P><P>如果真的是这样,你可以使用 RedHat 的 RPM 管理程序将它移除,或是手动将它从 /etc/rc.d/ 中移除。<P><P><P><B>V.在开机时可以辨识到我的乙太网络卡,但是,在我的讯息记录中,仍然会出现 "NODHCPOFFER" 的讯息。同时,这个状况也会发生在我的 PCMCIA 乙太网络卡上。</B><P><P><P>你必须确定,网络卡使用的是 10BaseT 连接埠(就像电话线的插座)。你最好检查一下,开机时网络卡的设定,到底是使用那个连接埠。例如:<P><HR><PRE>eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. ^^^^^^^^^^^^3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov</PRE><HR><P><P><P>我曾听过使用膝上型电脑的人抱怨,他们使用 PCMCIA 工具(特别是 ifport)将连接埠设定为 10Base2 (“细同轴线网络”(thinnet)),也会有这样的问题。如果你不想重新设定网络卡和重开机。你必须确定你使用的是 10BaseT 的连线。<P><P><P><B>VI. 没有服务器回应我 DHCP 用户端的广播要求(由 Peter Amstutz 提供)</B><P><P><P>在某些系统上,你的广播要求中必须包含你机器的主机名称。以 dhcpcd 为例,你可以执行'dhcpcd -h foohost'。或许,你可以使用你在网络上的帐户名称,来做为该主机名称。<P><P><P><B>VII. 我已经按照所有的步骤完成了设定,但是,我的机器仍然无法连线。</B><P><P><P>“缆线数据机”(cable modem)通常会记住你网络卡的乙太网络位址,所以,若你要连接新的电脑或更换网络卡,你必须以某种方法来“教导”你的 cable modem 认得新的电脑/网络卡。通常你可以先关掉 cable modem ,电脑开机後再使用 cable modem,或是以电话请求技术的支持,告知对方你的电脑已经更换了网络卡。 <P><P><P>你的防火墙规则(ipfwadm 的规则)不允许埠编号 67/68( DHCP 使用来散布设定信息)的流量。请仔细检查你的防火墙规则。<P><P><P><B>VIII. 我使用的是 MediaOne Express 所提供的服务,但是我仍然无法连线。</B> <P><P><P>原因可能是 MediaOne 在 DHCP 中附加了不应该出现的讯息。一般相信,如今这已不再是个问题,但是你却无法使用它,你可以朝这方面来检查。如果你(不)幸使用的是 Windows NT,此时,如果你使用“事件检视器”(Event Viewer),你将会看到如下的警示讯息。<P><P><P>DHCP 接收到一个未知的长度为 005 的 067 选项。原始的选项资料如下所示。<P><CODE>0000: 62 61 73 69 63 basic</CODE><P><P>如果你遇到这样的问题,请到 <A HREF="javascript:if(confirm('ftp://vanbuer.ddns.org/pub/ \n\nThis file was not retrieved by Teleport Pro, because it did not meet the project\'s file type specifications. \n\nDo you want to open it from the server?'))window.location='ftp://vanbuer.ddns.org/pub/'" tppabs="ftp://vanbuer.ddns.org/pub/">ftp://vanbuer.ddns.org/pub/</A> 下载修正的二元码或取得原始码。<P><P><P><P><P><P><P><P><HR><A HREF="DHCP-4.html" tppabs="http://www.linux.org.tw/CLDP/gb/mini/DHCP-4.html"><IMG SRC="next.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/next.gif" ALT="Next"></A><A HREF="DHCP-2.html" tppabs="http://www.linux.org.tw/CLDP/gb/mini/DHCP-2.html"><IMG SRC="prev.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/prev.gif" ALT="Previous"></A><A HREF="DHCP.html#toc3" tppabs="http://www.linux.org.tw/CLDP/gb/mini/DHCP.html#toc3"><IMG SRC="toc.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/toc.gif" ALT="Contents"></A> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -