我有一个程序可以通过 IPv4(TCP 和 UDP)和 IPv6(TCP 和 UDP)进行通信。我想阻止该程序使用 IPv4。
我尝试了Windows防火墙:
除了阻止 IP 子协议(例如 TCP、UDP、封装的 IPv6、GRE)之外,它还会阻止IPv4
本身。
换句话说,我需要阻止 IPv4:
- IPv4/TCP
- IPv4/UDP
- IPv4/ICMPv4
- IPv4/GRE
- IPv4/L2TP
同时允许 IPv6:
- IPv6/TCP
- IPv6/UDP
- IPv6/ICMPv6
- IPv6/GRE
- IPv6/L2TP
我可以阻止程序使用 IPv4 吗?
笔记:如果做不到,那么不要害怕将其添加为答案。对问题给出正确答案并不丢人。
答案1
请注意,下列操作并非每次都有效。
在 Windows 防火墙中为您的程序添加一条阻止规则,针对任何协议的远程范围 0.0.0.0 到 255.255.255.255。
如果程序设计如此,它将转而使用 ipv6。
如果您想要相反的操作,强制使用 ipv4,则可以阻止 ipv6 范围 :: 到 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
例如,这适用于更新 Visual Studio Community 2017,因为更新程序默认使用 ipv6,并且下载速度有时会严重降低。
答案2
除非客户端本身支持,否则无法使用 Windows 防火墙执行此操作。大多数应用程序将使用RFC 3484以确定在两种协议都可用的情况下使用的最佳协议。一个很好的解释是:
您的选择可以是:
- 如果应用程序支持,则强制使用协议(例如,uTorrent 支持仅 IPV6 模式)
- 使用支持协议偏好的第三方防火墙每个应用程序。
- 使用支持协议偏好的第三方防火墙基于端口。
这是一个不寻常的要求,所以我不知道有任何第三方防火墙支持它。