是否可以通过 DHCP 为以太网主机分配仅主机本身的子网掩码,例如 192.168.1.123/32?常见的操作系统是否支持这种配置?
我希望主机将所有流量发送到路由器(而不是直接发送到同一网段上的其他主机),但它们仍然能够通信(因此不存在“客户端隔离”);有效地创建点对点链接,但无需任何客户端配置。
更新:我的目的是配置一个运行 dd-wrt 的家用路由器,这样所有的流量都必须通过路由器上的 IP 堆栈,这样就可以被一些 ipfilter 规则过滤。我希望有一个通用的解决方案,一些实现点对点以太网连接的标准方法,这些连接仍然可以由 DHCP 自动配置,适用于所有通用操作系统。
根据迄今为止的回应,这似乎并不是那么容易;我会阅读更多有关 VLAN 的资料,然后重新考虑我的计划。
答案1
首先,为了创建点对点链接,您至少需要 4 个地址,因此您必须使用 /30 掩码。例如:192.168.1.0/30
- 网络地址:192.168.1.0/30
- 第一点地址:192.168.1.1/30
- 第二点地址:192.168.1.2/30
- 广播地址:192.168.1.3/30
您必须将每个主机放在不同的 /30 子网上,并在网关上实现子网间路由。
编辑:您没有写太多有关您的基础设施或您希望通过此配置实现的可扩展性的内容。我猜您的路由器支持使用子接口。
此外,如果您使用 DHCP 服务器来分配寻址方案,则不需要额外的客户端配置。
答案2
使用 /32 网络掩码(静态设置或通过 DHCP 提供)是云托管提供商为 Linux 虚拟专用服务器采用的常见默认配置。
例如,Google Compute、Rackspace Cloud、CheapVPS、1&1 和 Strato 都这样做。
该配置的优点是,它减少了东西向流量和广播流量,而无需使用附属的基础设施 IP。它对下一跳“网关”提出了某些要求,例如禁用反向路径过滤,以允许同一网段或主机上的设备之间的 VM 间流量从传入接口发回。
Debian 风格 Linux 主机的手动配置如下所示。
在 /etc/网络/接口:
auto eth0
iface eth0 inet static
address 123.123.82.130
netmask 255.255.255.255
broadcast 123.123.82.130
up route add 123.123.92.171/32 dev eth0
up route add default gw 123.123.92.171
Google Compute 实例通过使用选项 121 向子网外网关提供静态主机路由,通过 DHCP 分配相同的配置
对此类配置的支持依赖于发行版的网络脚本。
对此有广泛的支持(例如 NetworkManager),并且这种支持通过对无处不在的 Dracut initramfs 构建工具的以下提交得到证明:
https://github.com/haraldh/dracut/commit/99ccbc30dff9fa51dd3187dc10f8f632e5e54e4b
答案3
可以分配所有内容,但我怀疑这是否可行 - 尤其是对于 Windows 客户端。适用于 Linux 的常识性方法如下:
- 使用地址和正确的子网掩码配置接口
- 删除本地网络路由
- 通过接口添加到网关的显式路由
- 通过网关添加默认路由
通常需要在 DHCP 客户端上手动配置或编写脚本来完成 1 之后的所有操作。
你还应该确保你的网关不会发送ICMP 重定向消息对于主机 - 通常在检测到主机正尝试通过网关访问同一网络内的另一台主机时会执行此操作(信息来自路由器本地面向主机的接口的地址/子网掩码组合)。
答案4
点对点链路中用于与另一台设备通信的最小 IPv4 前缀是前缀/31
。这在RFC 3021,在 IPv4 点对点链路上使用 31 位前缀。
类似地,您可以使用/127
IPv6 网络进行点对点链接。请参阅RFC 6164,在路由器间链路上使用 127 位 IPv6 前缀。