我在 Windows 机器上遇到了路由问题。Windows 机器有三个 NIC,其 IP 为:
- 10.87.6.27(未设置网关)
- 10.87.11.27(未设置网关)
- 10.87.60.51(网关 = 10.87.60.254)
当我联系 10.87.11.0/24 中的主机(例如 10.87.11.212)时,Windows 计算机将流量发送到 10.87.60.254,后者将其路由到 10.87.11.212。由于 Windows 计算机的 NIC 直接位于 10.87.11.0/24(即 10.87.11.27),因此我希望它将流量直接发送到该主机,而不是通过 10.87.60.254。
我更改了路由表上的度量。通过检查路由表,我预计 Windows 框会将流量直接发送到 10.87.11.212。我在这里忽略了什么?
“route print”命令给出以下输出: 输出路线打印
“tracert”命令给出以下结果:输出追踪路线
答案1
这会变得有点技术性和枯燥,抱歉。
这是因为主机模型在现代操作系统中设计。能改变,但应该仔细考虑。稍后会详细介绍。
什么?
“主机模型”是一种设计 TCP/IP 堆栈内部的方法。例如,当单播数据包到达主机时,IP(-Stack) 必须首先确定该数据包是否是本地目的地。如果 IP 堆栈是用弱宿主模型,它接受任何本地目的地的数据包,而不管接收该数据包的网络接口是什么。
但如果 IP 堆栈是通过强宿主模型,只有当数据包中的目标地址与接收数据包的 NIC 分配的 IP 地址匹配时,它才会接受数据包。从技术上讲,更多的正确的。
为什么?
这弱宿主模型提供(自然而言)“更好”的网络连接。例如,很容易找到到达主机的数据包或很容易将数据包发送到本地绑定网络。但它也使主机很容易受到基于多宿主的网络攻击。
在许多配置中,当系统运行弱主机模型并连接到 VPN 时,同一子网上的其他系统能够破坏 VPN 连接的安全性。运行强主机模型的 IP-Stack 在设计上可以抵御此类攻击。
好吧...但是...
Vista 之前的 Windows 中的 IP (v4) 实现使用弱主机模型。过去的美好时光。Vista 和 2008 TCP/IP 堆栈默认更改为 IPv4 和 IPv6 的强主机模型。稍后将详细介绍如何回到过去。
Linux 中的 IPv4 实现默认为弱主机模型。个人说明:据我所知,这主要是因为向后兼容性和“当您需要更多安全性时,只需启用它”的理念(某些发行版也默认启用强模型)。
反向路径的源验证在RFC 1812并且arp_ignore
可以arp_announce
用来调整内核的行为。
但...分离!!
现在是写关于分离以及为什么这对于网络数据包来说是个好主意的有趣时机——因为它们都是平等创建的。在过去,将管理流量与生产流量分开是一个非常好的想法,现在仍然是。弱主机模型的问题在于,同一网段上的任何人都可能从您(大多数)宽松的管理流量安全规则中受益。
因此,今天人们更加注重如何“正确”地分离它(HOST 流量与 GUEST 流量)或流量角色(BBMC 与 OS 流量),以及——最重要的是——强大而安全的身份验证。
禁用所有好东西!1
可以通过命令行禁用弱主机模型:
netsh interface ipv4 set interface [INDEX] weakhostsend=enabled
netsh interface ipv4 set interface [INDEX] weakhostreceive=enabled