Linux:阻止某些应用程序/主机名的IPv6

问题和目标

我们没有从我们的ISP获得IPv6,因此我有一个IPv6隧道工作正常但当然不是很快.并不是真的可靠.我希望“以防万一”提供IPv6,但我希望某些主机(域)仅与IPv4连接.

默认协议

在我看来,所有应用程序都首先尝试IPv6;这可能是一个glibc设置.如果违反此默认值(对于所有应用程序),我会没事的.

Netfilter的

使用Netfilter阻止IPv6地址/网络是可能的,但有两个问题:

>当应用程序在尝试IPv4之前等待IPv6超时时,是否会导致延迟?
>有些域似乎是混乱的,看起来像混乱.如果可以避免,将google.com和youtube.com分开似乎是你不想做的事情.

我只是注意到ip route的手册页说的路由类型无法访问:

The local senders get an EHOSTUNREACH error.

Netfilter DROPs或REJECTs会发生同样的情况吗?这样的错误不应导致相关的延迟.

DNS过滤

另一种解决方案(如果可能的话,相当简单)可以过滤某些域的AAAA记录.如果这不是(轻松)可能:是否可以连接DNS服务器和Netfilter,以便我知道“IP地址X属于域Y”,以便我可以将其添加到Netfilter?还有什么比记录所有东西和点击日志更优雅?

要走的路?

有哪些(其他)可能性,最简单的是什么?

解决方法

您可以使用 /etc/gai.conf控制地址选择.配置文件已有详细记录,并且已包含默认值,因此您可以开始调整.

这里有趣的默认值是:

label  ::1/128       0
label  ::/0          1
label  2002::/16     2
label ::/96          3
label ::ffff:0:0/96  4
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10

最后一行给出了所有IPv4地址的最低优先级.

如果要为所有IPv4提供更高的首选项,可以将其更改为:

precedence ::ffff:0:0/96  100

如果您只想对特定的IPv4地址或块提供更高的优先级,您也可以指定它们.请记住,您必须使用十六进制的IPv4映射IPv6.

因此,要优先考虑所有IPv6的203.0.113.0/24,您需要添加:

label ::ffff:cb00:7100/120 5
precedence ::ffff:cb00:7100/120 100

重新启动运行的应用程序,让他们获取您所做的更改.

在Debian派生系统上,/ etc / gai.conf已经存在.在Red Hat派生系统上,它不存在,但是示例文件位于/usr/share/doc/glibc-common-*/gai.conf;只需将其复制到/ etc.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...