我们没有从我们的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.