IPv6回退到IPv4

目前,我通过IPv4连接到互联网,我使用的是来自sixxs.net的隧道,我已经有了一个子网,其中一个IPv6分配给了我的eth0接口。

所以,eth0有IPv4和IPv6:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 00:02:XX:XX:61:36 brd ff:ff:ff:ff:ff:ff inet XXX.XXX.0.22/24 brd XXX.XXX.0.255 scope global eth0 inet6 2a01:XXXX:XXXX::1/64 scope global valid_lft forever preferred_lft forever 

当我试图连接到一些例如。 网站是IPv6准备好了,没事的,IPv6是首选,但是如果发生了什么事情,而且IPv6是不可用的,我想回退到IPv4。 那可能吗?

或者,即使程序不支持(例如-4选项),也可能临时强制用户IPv4而不是IPv6?

这应该已经发生,因为它的意思是你的networking的默认行为。

然而,在实践中,有一两件小事可能阻碍。 这是如何工作的:

  1. 你想访问一个URL,让我们说www.kame.net 。 您的DNS应该请求AAAA以及Alogging。

  2. 如果返回AAAAlogging,则尝试连接到IPv6地址。

  3. 如果不能build立连接(主机离线,IPv6连接closures等),或者不存在AAAAlogging,则使用IPv4。

以下问题可能会发生:

  1. 没有返回AAAA地址的错误configuration的或旧的DNS服务器将意味着从不使用IPv6。

  2. 如果configuration错误的IPv6networking(例如具有可路由的IPv6地址(不是链路本地地址),但没有发现RA),或者RA 实际上没有连接到互联网,则TCP / IP堆栈可能需要长达90秒超时并回到IPv4,使其几乎无用。

如果您正在编写自己的应用程序,并执行自己的DNS查找,这也是您应该写入应用程序的行为。 如果情况也是这样,那么支持IPv6比这个更复杂一些(例如,我们的日志parsing器,build立在IPv4上,有一个固定的,32位的IP地址字段。实现了我们的第一个IPv6networking)。