我想阻止 Linux 机器上特定用户的传出 IPv6 连接。我不想禁用整个系统的 IPv6。我该怎么做?我可以使用 ip6tables 来实现,并使用 icmp6-adm-prohibited 或 icmp6-no-route 或 icmp6-addr-unreachable 拒绝 OUTPUT 连接,但由于某种原因,这会导致每次建立连接时延迟约 1 秒(等待 1 秒后才尝试 IPv4)。如果建立多个连接,此延迟会累积。
答案1
我认为这不容易实现
任何建立网络连接的客户端都会首先发出 DNS 请求以获取目标服务器的地址。
大多数应用程序使用系统libc
库来建立连接。当系统库发现系统同时配置了 IPv4 和 IPv6 地址时,它会请求域名的 A 和 AAAA 记录。
如果目标域具有 IPv6 地址,应用程序将首先尝试使用 IPv6 进行连接,如果 IPv6 失败,则回退到 IPv4。
您注意到的就是这个回退延迟。
您需要有一个自定义的libc
,它只解析某些用户的 A 记录和其他用户的 A+AAAA 记录。