情况
我有一个 Windows SBS 2008 机箱,作为 DC/DNS/DHCP/Exchange/File Server 运行在 192.168.1.0/24 网络上。可以说,SBS 机箱的 IP 是不可变的。过去,我的前任曾尝试让 2 个 NIC 运行,并在其上使用 2 个 IP(这是非常不受支持的),从那时起,尝试更改任何网络属性都会导致它在提示重新启动时出现蓝屏 - 发生这种情况时,我们不得不从快照中恢复,似乎没有办法解决这个问题。
我们最近启动了一个项目来摆脱 SBS 并构建一个真正的 2008/2012(待定)域,该域具有 2 个 DC、一个用于 Exchange 的单独 VM、一个用于文件共享等等(耶!)但先决条件是我们转换到新的 IP 范围(我们将与总部建立 VPN,从而允许我们将这些服务中的许多卸载到他们的网络上)。
这让我陷入了一种棘手的境地——我需要将路由器、工作站、终端......几乎所有网络上的东西(DC/DNS/DHCP/Exchange/File 服务器除外)放到不同的范围内,同时保持与在 SBS 上运行的那些服务的连接,而 SBS 必须保持在 192.168.1.0/24 上。
问题的另一个复杂之处在于 - 我们这里有 2 个网关。一个由 SBS 使用,另一个... 几乎所有其他网关 - 这是为了允许来自外部的 SMTP 和 HTTPS 流量到达它。
计划
好的,下面是我计划做的 - 我已经设置了一个虚拟机,其中安装了 Ubuntu 12.04 的最小版本,并且在每个网络范围内都安装了 NIC。它设置了静态路由以在其各自的接口上到达每个网络,并且我计划通过 DHCP 推出另一条路由,允许不同范围内的客户端通过 Linux 机器路由相互联系。
例如我有路线:
客户端位于 10.0.0.20
destination 192.168.1.0 mask 255.255.255.0 gateway 10.0.0.10 interface 10.0.0.20
Linux 路由器位于 10.0.0.10 和 192.168.1.10
destination 192.168.1.0 mask 255.255.255.0 gateway 0.0.0.0 interface 192.168.1.10
destination 10.0.0.0 mask 255.255.255.0 gateway 0.0.0.0 interface 10.0.0.10
DC 为 192.168.1.200
destination 10.0.0.0 mask 255.255.255.0 gateway 192.168.1.10 interface 192.168.1.200
同时,我会将当前每个人正在使用的互联网网关(不是为 DC 设置的网关)移动到 10.0.0.0/24 网络,这样 10.0.0.0/24 客户端在其范围内有一个默认网关,192.168.1.0/24 客户端(实际上只是 DC)在其范围内有一个默认网关(此时 192.168.1.0/24 网络中唯一剩下的就是 DC 及其网关)。
问题
是的,我正要问一些事情!我想确认 DC 是否可以在不同范围内为这些客户端提供 DHCP。研究让我这里,这似乎表明在某种情况下,没有 DHCP 中继服务器就是不可能的(假设我正确地将“网络段”解析为与子网非常类似),但也提到了超级范围,这听起来像是可能会回答这个问题(因为它将地址分配给其他范围之外的任何设备......我想)。
在我看来,当客户端请求地址时它还没有地址,那么它如何确定它是否与 DC 位于同一个“网段”中?
以 TL;DR 格式澄清 - 我可以从位于 192.168.1.200/24 的 DHCP 服务器向客户端提供 10.0.0.0/24 地址以及其他网络属性(如静态路由、DNS 和默认网关)吗?我需要使用超级作用域来执行此操作吗?
此外,如果您发现我的计划有任何其他问题,请不要保持沉默!
附录
使用 @HopelessN00b 建议的 DHCP 帮助工具,我能够相当顺利地完成此操作!有几个问题 -
- 客户端都在同一个网段中,无需通过第 3 层交换机即可访问 DHCP 服务器。这导致我的所有客户端都获取 192 个地址,因为它们直接与服务器通信。我想保留列出的 192 个范围,因为 a) 如果我今天早上发现我搞砸了,那么很容易回滚;以及 b) 作为仍在 192 个子网上的那些服务的便捷列表;但我能够通过为与整个范围的地址相匹配的范围创建排除范围来巧妙地解决这个问题(即,范围从 192.168.1.20 到 192.168.1.200,我创建了一个从 192.168.1.20 - 192.168.1.200 的排除范围)。这让我感觉有点肮脏,但它有效,并且 192 个子网只需要存活几周,我们就可以迁移服务。
- 今天早上我发现一些设备不支持通过 DHCP 选项 121 接收静态路由(即:WYSE 终端)。它们很乐意使用 10.61.73.x 地址,但无法路由到 192.168.1.x 上的终端服务器。由于终端服务器本身很乐意使用路由,因此我暂时将它们静态设置在 192 子网中,这解决了它们的问题。
@us10610 想知道我在 Linux 上为 DHCP-Helper 使用的配置 - 它非常简单 -/etc/default/dhcp-helper
包含我从默认值修改的一行:DHCPHELPER_OPTS="-b eth1"
eth1
是与 DHCP 服务器共享子网的 NIC。然后它愉快地从其他 NIC 接受 DHCP UDP 并将它们广播到eth1
答案1
您绝对可以使用 DHCP 服务器来为不属于其的范围提供服务,只要流量可以在两个子网之间流动。
诀窍在于 DHCP 请求通常仅向客户端所在的广播域提供,为了解决这个问题,你需要放置一个IP 帮助程序地址在客户端所连接的网络设备上,以便它将 UDP 流量(例如客户端的 DHCP 请求)转发到指定的 IP 地址(DHCP 服务器的 IP 地址)。
我在回答之前确实检查过了;这在用作交换机或路由器的 Linux(和 Ubuntu)机器上是可能的,但我不确定精确的语法和/或可能需要哪些额外的软件包来做到这一点。 但是,我确实找到了这个页面,其中建议了一个要使用的程序以及如何使用它,因此这可能是您开始的好地方。
答案2
在具有多个段的网络中,您可以使用“IP 助手”向 dhcp 服务器实施定向广播。“助手”在第 3 层边界(路由器、SVI......)实施,并且每个单独的段都需要它。
我不确定 Linux 路由器上的语法,但在 Cisco 多层交换机或路由器上它是;
Interface vlan 1099
ip address 10.10.99.1 255.255.255.0
ip helper address 10.10.1.254 (*dhcp server address)
祝你好运,请发布 Linux 语法,因为我想知道它是如何工作的:)