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


8

问题与目标

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

默认协议

在我看来,所有应用程序都首先尝试IPv6。这可能是glibc设置。如果将此默认设置颠倒(对于所有应用程序),我会好的。

网络过滤器

使用Netfilter可以阻止IPv6地址/网络,但是存在两个问题:

  1. 在应用尝试IPv4之前,它会等待IPv6超时,这会导致延迟吗?
  2. 有些领域似乎很混乱,似乎有些混乱。如果可以避免,将google.com和youtube.com分开似乎是您不希望做的事情。

我只是注意到手册页中ip route提到了路由类型unreachable

本地发件人收到EHOSTUNREACH错误。

Netfilter DROP或REJECT也会发生同样的情况吗?这样的错误不会引起相关的延迟。

DNS过滤

另一种解决方案(如果可能的话,则比较容易)是为某些域过滤AAAA记录。如果不能(轻松):是否可以连接DNS服务器和Netfilter,以便我知道“ IP地址X属于域Y”,以便可以将其添加到Netfilter?有什么比记录所有内容和重复记录更优雅的了吗?

要走的路?

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


2
您真的不会注意到任何实现Happy EyeballsRFC 6555)的东西,例如现代的Web浏览器。
迈克尔·汉普顿

DNS并非真正以这种方式工作。无论如何,您都可以尝试更可靠的隧道服务。
迈克尔·汉普顿

Answers:


16

您可以使用来控制地址选择/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


以前从未听说过;一个很好的提示,即使它不是DNS解决方案。
Hauke Laging

您要求最简单的方法... :)
迈克尔·汉普顿

4

好的,这是一个完全不同的答案。

将不良的IPv6连接的问题主机/etc/hosts及其对应的IPv4地址放入。

例如:

199.7.53.74 whois.verisign-grs.com

当它们(在这种情况下)或您的IPv6连接性提高时,请记住将它们删除。


1
对于具有单个IP的单个主机,这将很容易。正如我提到的,这是关于**。youtube.com的。因此,许多主机名受到影响。从理论上讲,使用DNS会很容易:“阻止.youtube.com中所有内容的AAAA记录”。您的方法是将所有这些地址放入(可能它们不经常更改其域结构或IP,并且可以每天进行一次脚本检查)/etc/hosts。如果没有人提出“ DNS服务器软件XY可以这样过滤!!” 我可能会结束。
Hauke Laging

我对几乎每个已知的DNS服务器程序包都很熟悉,没有一个程序可以轻松或根本无法完成您想要的操作。现在,如果您想编写自己的自定义代码...,但是真正的解决方案当然是改善IPv6连接性。尝试使用其他隧道代理?
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.