[管理员摘要]如何通过DHCP结交朋友而不怕APIPA


向本地网络上的设备颁发IP地址的服务似乎是最简单和最熟悉的服务之一。 但是,我的年轻同事仍然偶尔会遇到诸如“计算机接收到一些奇怪的地址”之类的问题,并且在一个网段中出现第二台DHCP服务器会引起一些刺激或网络问题。


为了使阅读本材料的人员不会有这样的疑问,我想整理一堆有关IP地址发布机制,故障安全配置的功能和配置示例的基本信息。 是的,也许经验不足的专家会对刷新神经连接感兴趣。


有趣的,不是很实际的问题的一些理论和解决方案-正在削减。


在现代局域网中,地址的发布通常由具有协议支持的专用服务来完成。 其中最流行的是DHCP(动态主机配置协议)。


Zeroconf或为什么我们需要某种DHCP


原则上,专门为小型网络创建了称为Zeroconf的技术堆栈。 它使您无需任何集中式服务和服务器,包括但不限于发布IP地址。 他们关闭(或几乎关闭)以下问题:


获取IP地址 (自动专用IP寻址或APIPA)。 系统本身根据MAC地址和伪随机数生成器从169.254.0.0/16网络(范围的开头和结尾的/ 24网格除外)分配IP。 该系统使您可以避免冲突,该网络的地址称为本地链接-包括因为这些地址未路由。


按名称搜索 。 系统宣布其网络名称,每台计算机都与DNS一起使用该网络名称,并将条目存储在其缓存中。 Apple使用mDNS(多播DNS)技术,Microsoft使用LLMNR(链接本地多播名称解析),在“ 域,地址和Windows:混合,但不要摇晃 ”一文中提到。


搜索网络服务 。 例如,打印机。 也许最著名的协议是UPnP ,它可以在路由器本身上打开端口。 该协议相当复杂,它使用一整套附加组件,例如使用http,这与第二种众所周知的协议DNS-SD (DNS服务发现)不同,后者仅使用SRV记录,包括在使用mDNS时。


拥有Zeroconf的所有优点-无需任何神圣的知识,您只需在物理级别上连接计算机即可构建工作网络-甚至可能会干扰IT专家。



有点烦人,不是吗?


在Windows系统上,要在所有网络适配器上禁用自动调整,必须在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters部分中创建一个名称为IPAutoconfigurationEnabled的DWORD参数并将其设置为0。


当然,Zeroconf仅适用于小型隔离网络(例如,您遇到了一个带笔记本电脑的朋友,通过Wi-Fi将它们连接起来,让我们玩Diablo II,而又不浪费任何服务器的时间),我也想将本地网络连接到Internet 。 为了不受每台计算机的静态设置的影响,创建了特殊的协议,其中包括当今的英雄-DHCP。


DHCP及其祖先


用于发布IP地址的协议的第一种实现方式出现于30年前,被称为RARP (反向地址解析协议)。 如果我们稍微简化其操作原理,它看起来像这样:客户端向网络的广播地址发出请求,服务器接受它,在数据库中找到客户端的MAC地址和IP的绑定,并发送IP响应。



RARP协议的方案。


一切似乎都正常。 但是该协议有其缺点:必须在本地网络的每个网段中配置服务器,在该服务器上注册MAC地址,并且根本不可能将其他信息传输到客户端。 因此,为了替代它,创建了BOOTP协议(Bootstrap协议)。


最初,它用于无盘工作站,该工作站不仅需要提供IP地址,而且还需要向客户端传输其他信息,例如TFTP服务器的地址和下载文件的名称。 与RARP不同,该协议已经支持中继-将请求转发到“主”服务器的小型服务。 这使得可以同时在多个网络上使用一台服务器。 仍然需要手动配置表和大小限制以获取更多信息。 结果,现代的DHCP协议进入了现场,它是BOOTP的兼容扩展(DHCP服务器支持旧版客户端,反之则不然)。


与过时协议的一个重要区别是能够临时发布地址(租赁)并将大量不同的信息传输到客户端的能力。 这是由于获得地址所需的琐碎过程而实现的。 如果在旧协议中该方案很简单,具有请求-响应的类型,那么现在该方案如下:


  • 客户端通过广播请求搜索服务器,并请求其他设置。
  • 服务器通过提供IP地址和其他设置来响应客户端。
  • 客户端通过广播请求确认接收到的信息,并在确认中指示所选服务器的IP地址。
  • 服务器通过向客户端发送请求来与客户端达成一致,在收到请求后,客户端已经配置了网络接口或拒绝了该网络接口。


客户端与转发服务器和服务器的通信方案。


您可以在“ DHCP数据包的结构,格式和用途 ”资料中详细了解服务器-客户端交互方案以及请求和响应的结构


在几次采访中,他们问我:“ DHCP使用什么传输和端口?” 以防万一,我们回复:“ UDP服务器:67,UDP客户端:68”。

即使建立家庭网络,DHCP服务器的许多实现也已为许多人所用。 实际上,现在服务器是:


  • 在几乎所有路由器上,尤其是SOHO。
  • 在Windows Server系统上。 您可以在官方文档中了解服务器及其配置。
  • 在* nix系统上。 也许最受欢迎的软件是ISC DHCP服务器 (dhcpd)和Dnsmasq “收割机”。

有许多特定的实现,但是,例如,服务器设置在SOHO路由器上受到限制。 除经典的“ IP地址,掩码,网关,DNS服务器”外,这主要涉及其他设置。 正是这些附加选项引起了对协议操作的最大兴趣。 完整列表可以在相应的RFC中找到,但我将分析一些有趣的示例。


惊人的DHCP选项


在本节中,我将讨论MikroTik设备上DHCP选项的实际使用。 我将立即引起注意的是,并非所有选项都设置得很明显,参数的格式在Wiki中进行了描述。 还应注意,客户仅在他们要求时才应用选项。 在某些服务器中,您可以强制发送设置:例如,在ISC DHCP服务器中, dhcp-parameter-request-list指令负责此操作,而在Dnsmasq- * * --dhcp-option-force中负责 。 MikroTik和Windows不知道如何。


选项6选项15。让我们从一个简单的例子开始。 设置数字6是分配给客户端的DNS服务器,15是DNS后缀。 如我在“ 我们如何通过Wi-Fi减少人员 ”一文中所述,分配DNS后缀在使用非域网络中的域资源时会很有用。 在扰流板下配置MikroTik。


设置MikroTik,选项15
#  15.  —   HEX . /ip dhcp-server option add code=15 name=dns-suffix value=0x57687920616c6c207468697320736869743f #   /ip dhcp-server option sets add name=dns option=dns-suffix #   DHCP-  . /ip dhcp-server network set [find comment="wi-fi client dhcp"] dhcp-option-set=dns 

当不同的客户端不得不发行不同的DNS服务器时,知道DNS服务器也是一种选择已变得非常有用。 由于多种原因,“发出一台服务器并为端口53制定不同的dst-nat规则”形式的决定不适合。 部分配置再次位于扰流板下方。


设置MikroTik,选项6
 # ,  ,  ip    /ip dhcp-server option add code=6 name=google value="'8.8.8.8'" add code=6 name=cloudflare value="'1.1.1.1'" #  /ip dhcp-server lease add address=10.0.0.2 dhcp-option=google mac-address=11:11:11:11:11:11 server=dhcp add address=10.0.0.3 dhcp-option=cloudflare mac-address=22:22:22:22:22:22 server=dhcp 

选项66选项67 。 这些设置从BOOTP返回,并允许您指定用于网络启动的TFTP服务器和映像。 对于小型分支机构,将Mikrotik和无盘工作站安装到那里,然后将准备好的ThinStation映像扔到路由器上,非常方便。 DHCP配置示例:


 /ip dhcp-server option add name="option66" code=66 value="s'192.168.88.1'" add name="option67" code=67 value="'pxelinux.0'" /ip dhcp-server option sets add name="set-pxe" options=option66,option67 

选项121249 。 它们用于将其他路由传输到客户端,在某些情况下,这比在默认网关上注册路由更方便。 设置几乎相同,只是Windows客户端更喜欢后者。 要配置该参数,必须将路由转换为十六进制,并在一行中收集目标网络掩码,网络地址和网关。 另外,通过RFC,您必须添加默认路由。 调音选项位于扰流板下方。


路线设定

假设我们需要向客户端添加一条类似dst-address = 10.0.0.0 / 24 gateway = 192.168.88.2的路由,而主网关将为192.168.88.1。 让我们将其全部用十六进制表示:


设定数据十二月十六进制
面膜240x18
目的网络10.0.0.00x0A 00 00
网关192.168.88.20xc0 a8 58 02
默认网络0.0.0.0/00x00
默认网关192.168.88.10xc0 a8 58 01

让我们一齐收集所有这些快乐并获取设置:


 /ip dhcp-server option add code=121 name=classless value=0x0A0000c0a8580200c0a85801 

在文章“ Mikrotik,DHCP无类路由 ”中了解更多信息。


选项252。自动代理服务器配置。 如果由于某种原因组织使用了不透明的代理,则可以通过特殊的wpad(pac)文件与客户端进行配置,这将很方便。 代理自动配置(PAC)材料中介绍了设置此类文件的示例。 不幸的是,MiroTik没有内置的Web服务器来承载此文件。 您可以为此使用hotspot包或metarouter功能,但最好将文件放在其他位置。


选项82 。 最有用的选项之一不仅适用于客户端,而且适用于DHCP中继。 允许您传输有关客户端连接到的交换机端口以及交换机本身ID的信息。 反过来,基于此信息,服务器可以已经向客户端发布了一组特定的设置或只是对其进行了记录-为了找到客户端的连接端口,不必连续访问所有交换机(尤其是不在堆栈中的所有交换机)。


在路由器上配置DHCP中继后,客户端信息中将出现“ 代理电路ID”和“ 代理远程ID”字段,其中第一个是交换机端口标识符,第二个是交换机标识符。



使用选项82发行地址。


信息以十六进制格式给出。 为了方便起见,您可以使用脚本来分析DHCP日志。 例如,在Technet脚本库中发布了一个名为Microsoft的解决方案的解决方案,名为“ Decorating DHCP Options 82 ”。


选项82还积极地用于提供商的计费系统中,并保护网络免受外界干扰。 这一点更详细。


添加可靠性和安全性网络


由于协议的简单性和广播请求的存在,对基础结构进行了有效的攻击-主要是MITM类型(“中间人”)。 通过提高DHCP服务器或中继来进行攻击:毕竟,如果您控制网络设置的发布,则可以轻松地将流量重定向到受损的网关。 为了促进攻击,使用了DHCP饥饿(假装是客户端或中继,攻击者强制“本机” DHCP服务器用尽其IP地址)。 您可以在“ 攻击DHCP ”一文中了解有关攻击实施的更多信息,而DHCP监听是一种保护方法。


这是一个交换功能,使您可以将DHCP服务器“绑定”到特定端口。 其他端口上的DHCP响应将被阻止。 在某些交换机中,可以在包装中检测到Option 82(表明存在继电器)时使用Option 82进行配置:丢弃,更换,保持不变。


在MikroTik交换机中,网桥设置中启用了DHCP侦听:


 # dhcp-snooping  option 82 /interface bridge add name=bridge set [find where name="bridge"] dhcp-snooping=yes add-dhcp-option82=yes #    /interface bridge port add bridge=bridge interface=ether1 add bridge=bridge interface=ether2 trusted=yes 

其他交换机中的配置类似。


值得注意的是,并非所有MikroTik型号都对DHCP侦听功能提供完整的硬件支持-只有CRS3xx具备。

除了保护免受恶意黑客攻击外,此功能还可以缓解网络上出现另一台DHCP服务器时的麻烦(例如,当SOHO路由器用作带有接入点的交换机时,重置其设置)。 不幸的是,在找到SOHO设备的网络中,并不总是具有受管路由器的有效电缆网络结构。 但这是另一个问题。



进行漂亮的切换是健康的关键。


其他保护方法包括端口安全性 (将特定的MAC地址“绑定”到路由器端口;如果检测到来自其他地址的流量,则将阻止该端口),对DHCP请求和响应的数量进行流量分析或限制其数量,当然,各种IPS \ IDS系统。


如果我们不仅谈论网络保护,而且谈论可靠性,那么故障保护DHCP的功能也将摆在您面前。 确实,DHCP的简单性通常是关键服务之一,如果失败,则可能会使组织的工作瘫痪。 但是,如果您仅安装两台具有相同设置的服务器,则IP地址冲突只会导致此。


看来您可以在两台服务器之间划分分配区域,让一个分配一半的地址,而另一个分配另一地址。 这只是瘫痪的基础架构的一半要比整体好一点。


我们将分析更实际的选择。


在2012年开始的Windows Server系统上,DHCP冗余系统在负载平衡模式(主动-主动)或容错模式(主动-被动)下即开即用。 有关技术和设置的详细说明,请参见官方文档 。 我注意到容错是在区域级别配置的,因此不同的区域可以在不同的模式下工作。



在Windows中配置DHCP服务器故障转移。


ISC DHCP服务器使用故障转移对等伪指令来配置容错能力;建议独立地同步数据-例如,使用rsync。 在文章“ Centos7上的两个DHCP服务器... ”中阅读更多内容。


如果您基于MikroTik做出容错解决方案,那么您就不会没有技巧。 解决问题的一种方法是在MUM RU 18上宣布,然后发布在作者的博客上。 简而言之:配置了两个服务器,但是具有不同的“延迟阈值”参数(响应延迟)。 然后,只有当第一个失败时,服务器才会以较小的延迟和较长的延迟发布地址。 再次必须使用脚本完成信息同步。


就个人而言,一次,当路由器“偶然地”出现在网络上并同时连接到WAN和LAN接口的局域网时,我几乎激动了一下。


告诉我,您是否必须处理DHCP麻风病?

Source: https://habr.com/ru/post/zh-CN467333/


All Articles