⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0340dhcp.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		当你的 Linux 主机具有多个介面时,你的一个设定可能会让多个介面同时来监听,那就可能会发生错误了。<br /><br />

		举例来说,我们现在的设定是 192.168.1.0/24 这个在 eth0 上头的网域,假设你还有一个介面 eth1 在 192.168.2.0/24 好了,
		那万一你的 DHCP 同时监听两块介面的话,想一想,如果 192.168.2.0/24 网域的用户端发送出 dhcp 封包的要求时,
		他会取得什么 IP ?所以棉,我们就得要针对 dhcpd 这个执行档设定他监听的介面,
		而不是针对所有的介面都监听啊!您说是吧!^_^!那如何处理呢?在 CentOS (Red Hat 系统) 可以这样做∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/sysconfig/dhcpd</span>
DHCPDARGS=<span class=term_write>"eth0"</span>
</pre></td></tr></table>

		这样做就好了,这是因为启动 dhcpd 的 script 会主动的呼叫这个参数档案。如果是在其他版本的 Linux 当中,
		你可以直接修改 /etc/init.d/dhcpd 这个 script 档案内容,找到『 daemon /usr/sbin/dhcpd ... 』那一行,
		并新增网路卡代号即可,例如∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/init.d/dhcpd</span>
<span class=term_say># 约在第 58 行左右会找到∶</span>
        daemon /usr/sbin/dhcpd <span class=term_write>${DHCPDARGS}</span> 2>/dev/null 
</pre></td></tr></table>

		在上述的特殊字体部分,你可以持续加入想要增加的监听介面啦!更多的功能可以参考『 man dhcpd 』的解释。
		不过这个动作在较新的版本上面已经不需要了,因为新版本的 dhcp 会主动的分析伺服器的网段与实际的 dhcpd.conf 设定,
		如果两者无法吻合,就会有错误提示,人性化多了。 ^_^!
		接下来我们可以开始启动 dhcp 试看看棉!<br /><br />
	</div>

	<hr /><a NAME="server_start"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">DHCP 伺服器的启动与观察</span><br />
	<div class=block2>
		开始来启动 dhcp 吧!另外你要注意的是∶dhcpd 使用的埠口是 port 67 ,并且启动的结果会记录在 /var/log/messages
		档案内,你最好能去观察一下 /var/log/messages 所显示的 dhcpd 相关资讯才好。<br />

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>1. 就启动吧!</span>
[root@linux ~]# <span class=term_command>/etc/init.d/dhcpd start</span>

<span class=term_hd>2. 看看埠口启动的情况</span>
[root@linux ~]# <span class=term_command>netstat -tlunp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name
udp        0      <span class=term_write>0 0.0.0.0:67</span>    0.0.0.0:*       7294/dhcpd

<span class=term_hd>3. 看看登录档的输出资讯</span>
[root@linux ~]# <span class=term_command>tail -n 30 /var/log/messages</span>
Dec 5 10:58 linux dhcpd: Internet Systems Consortium DHCP Server V3.0.1
Dec 5 10:58 linux dhcpd: Copyright 2004 Internet Systems Consortium.
Dec 5 10:58 linux dhcpd: All rights reserved.
Dec 5 10:58 linux dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Dec 5 10:58 linux dhcpd: <span class=term_write>Wrote 0 deleted host decls to leases file.</span>
Dec 5 10:58 linux dhcpd: <span class=term_write>Wrote 0 new dynamic host decls to leases file.</span>
Dec 5 10:58 linux dhcpd: <span class=term_write>Wrote 0 leases to leases file.</span>
Dec 5 10:58 linux dhcpd: <span class=term_write>Listening on LPF/eth0/00:40:fa:25:2a:db/192.168.1/24</span>
Dec 5 10:58 linux dhcpd: dhcpd startup succeeded
</pre></td></tr></table>

		看到这些就是成功的象徵啦!恭喜你啊!真是『福气啦!』不过,万一你看到的登录档是类似底下的模样呢?<br />

<table class="term"><tr><td class="term"><pre>
Dec 5 11:11 linux dhcpd: <span class=term_write>/etc/dhcpd.conf line 10</span>: semicolon expected.
Dec 5 11:11 linux dhcpd: <span class=term_write>subnet</span>
Dec 5 11:11 linux dhcpd: <span class=term_write>^</span>
Dec 5 11:11 linux dhcpd: Configuration file errors encountered -- exiting
</pre></td></tr></table>

		这表示应该是第 10 行左右有点问题,问题点应该是没有分号 (semicolon) 而已。而分号应该是在指数符号 (^) 指的地方,
		也就是 subnet 附近而已,很容易分辨吧!那如果是出现如下的模样呢?<br />

<table class="term"><tr><td class="term"><pre>
** You must add a <span class=term_write>ddns-update-style statement to /etc/dhcpd.conf</span>.
   To get the same behaviour as in 3.0b2pl11 and previous
   versions, add a line that says "ddns-update-style ad-hoc;"
   Please read the dhcpd.conf manual page for more information. **
</pre></td></tr></table>

		这表示你忘记在 /etc/dhcpd.conf 里面加入 ddns-update-style 的参数宣告啦!
		瞧一瞧这个输出资讯,就能够晓得你的设定错误所在,根据错误来处理你的 dhcp 设定档吧!<br /><br />
	</div>

	<hr /><a NAME="server_host"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">内部主机的 IP 对应</span><br />
	<div class=block2>
		如果您有仔细的瞧过前几章的<a href="0110network_basic.php">网路基础</a>的话,那么应该还会记得那个 
		<a href="0130internet_connect.php#problem_hosts">/etc/hosts</a> 
		会影响内部电脑的连线速度很大吧!那么我现在使用 DHCP 之后,糟糕!我怎么知道哪一部 PC 
		连上我的主机,那要怎么填写 /etc/hosts 的内容呢?这真是太简单了!就将所有可能的电脑 IP 
		都加进去该档案呀! ^_^ !以鸟哥为例,在这个例子中,鸟哥的分配的 IP 至少有 192.168.1.5, 192.168.1.21 ~ 
		192.168.1.100 ,所以 /etc/hosts 可以写成∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts</span>
127.0.0.1     localhost.localdomain localhost
<span class=term_write>192.168.1.254  vbird-server
192.168.1.5    static-ip
192.168.1.21   dynamic-021
192.168.1.22   dynamic-022
.....
192.168.1.100  dynamic-100</span>
</pre></td></tr></table>

		这样一来,所有可能连进来的 IP 都已经有纪录了,哈哈!当然没有什么大问题棉! ^_^
	</div>
</div>


<hr /><a NAME="client"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">DHCP 用户端的设定</span><br />
<div class=block1>
	DHCP 的 Client 端,可以是 Windows 也可以是 Linux 呢!由于鸟哥的领域内刚好有两部 Client 
	端的电脑,一部为 Linux (CentOS 4.4) 另一部为 Windows xp ,这里就提一下,分别是怎样设定的呢?<br /><br />

	<hr /><a NAME="client_linux"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">Linux 用户端</span><br />
	<div class=block2>
		Linux 的网路参数设定还记得吧?不记得的话就得要打屁股了!在<a href="0130internet_connect.php#connect_auto"
		target="_blank">连上 Internet 章节</a>内我们谈过自动取得 IP 的方式,设定真的很简单∶<br />

<table class="term"><tr><td class="term"><pre>
[root@client ~]# <span class=term_command>vi /etc/sysconfig/network-scripts/ifcfg-eth0</span>
DEVICE=eth0
<span class=term_write>BOOTPROTO=dhcp</span>  <span class=term_say>&lt;==就是他!指定这一个就对了!</span>
ONBOOT=yes

[root@client ~]# <span class=term_command>/etc/init.d/network restart</span>
</pre></td></tr></table>

		改完之后,就将我们的整个网路重新启动即可 (不要使用 ifdown 与 ifup ,因为还有预设路由要设定!)
		。请注意,如果您是在远端进行这个动作,您的连线『肯定会挂掉!』,因为网路卡被您关了嘛!
		呵呵!所以请在本机前面才进行喔!如果执行的结果有找到正确的 DHCP 主机,那么几个档案可能会被更动喔∶<br />

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>1. DNS 的 IP 会被更动呢!查阅一下 resolv.conf 先∶</span>
[root@linux ~]# <span class=term_command>cat /etc/resolv.conf</span>
; generated by /sbin/dhclient-script
search vbird.tsai          <span class=term_say>&lt;==是否记得设定过 domain-name 呢?</span>
nameserver 168.95.1.1      <span class=term_say>&lt;==这就是我们原本的设定值。</span>
nameserver 139.175.10.20

<span class=term_hd>2. 观察一下路由啦!</span>
[root@linux ~]# <span class=term_command>route -n</span>
Kernel IP routing table
Destination     Gateway        Genmask        Flags  Iface
192.168.1.0     0.0.0.0        255.255.255.0  U      eth0
169.254.0.0     0.0.0.0        255.255.0.0    U      eth0
0.0.0.0         <span class=term_write>192.168.1.254</span>  0.0.0.0        UG     eth0
<span class=term_say># 嗯!没错!路由也被正确的捉到了!OK的啦!</span>

<span class=term_hd>3. 察看一下用户端的指令吧!</span>
[root@linux ~]# <span class=term_command>netstat -tlunp</span>
Proto Recv-Q Send-Q Local Address  Foreign Address State  PID/Program name
udp        0      <span class=term_write>0 0.0.0.0:68</span>     0.0.0.0:*              3996/dhclient
<span class=term_say># 你没看错!确实是有个小程式在监测 DHCP 的连线状态呐!</span>

<span class=term_hd>4. 看一看用户端租约所记载的资讯吧!</span>
[root@linux ~]# <span class=term_command>cat /var/lib/dhcp/dhclient-eth0.leases</span>
lease {
  interface "eth0";
  <span class=term_write>fixed-address 192.168.1.100;</span>  <span class=term_say>&lt;==这就是为啥我每次取得的 IP 是固定的。</span>
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.254;
  option dhcp-lease-time 259200;
  option dhcp-message-type 5;
  option domain-name-servers 168.95.1.1,139.175.10.20;
  option dhcp-server-identifier 192.168.1.254;
  option nis-domain "vbird.tsai";
  option broadcast-address 192.168.1.255;
  option domain-name "vbird.tsai";
  renew 3 2006/12/6 18:15:41;   <span class=term_say>&lt;==下一次预计更新 (renew) 的时间点</span>
  rebind 5 2006/12/8 05:26:26;
  expire 5 2006/12/8 14:26:26;
}
<span class=term_say># 这个档案会记录该介面卡所曾经要求过的 DHCP 资讯喔!重要!
# 有没有看出来,他几乎就与你设定的 /etc/dhcpd.conf 类似? ^_^</span>

<span class=term_hd>5. 额外看一下 NIS 的领域名称有没有设定妥当啊?</span>
[root@linux ~]# <span class=term_command>nisdomainname</span>
vbird.tsai   <span class=term_say>&lt;==因为我们有设定 nis-domain 的项目啊!</span>
</pre></td></tr></table>

		有没有发现其实你的用户端取得的资料都被记载在 /var/lib/dhcp/dhclient-eth0.leases 里头啊?
		如果你有多张网卡,那么每张网卡自己的 DHCP 要求就会被写入到不同档名的档案当中去!
		观察该档案就知道你的资料是如何棉!这可也是挺重要的呦!<br /><br />
	</div>

	<hr /><a NAME="client_win"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">Windows 用户端</span><br />
	<div class=block2>
		在 Windows 底下设定 DHCP 协定以取得 IP 实在是很简单喔!我们以目前最常用的 Windows XP 来说明的话,
		你可以依据『开始』-->『设定』-->『控制台』-->『网路和网际网路连线』-->『网路连线』-->『区域连线』
		来开始一步一步的进行下面的动作喔∶<br />
		<ol>
		<li>在点选了上面的区域网路后,你的桌面上应该会出现如下的图示∶<br /><br />

		<a name="fig_02"></a><center><img src="0340dhcp/winxp_01.png"
		title="区域网路的 DHCP 取得方式之设定"
		alt="区域网路的 DHCP 取得方式之设定"><br />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -