momo zone

调核人的blog

chrome 浏览器走ipv6还是ipv4?

我想大部分一定是觉得应该优先ipv6。我原来也是这么认为,但chrome实际不是。(IE和firefox浏览器是的)。

这个问题在过去的旧版本不存在,因为它只是单纯根据主机的网络配置设置Default address family,然后chrome安装这个选项进行全局的ipv6,ipv4选择。关键是这个选项原来是可以手动指定的。但在较新的版本中即使有ipv6网络也是指定的’UNSPECIFIED’。

这样的情况下chrome在AAAA地址可以到达,A地址也可以到达时 选取最优的地址来访问。比如访问www.youtube.com,那么实际上抓包既可以看到ipv6流量也可以看到ipv4流量。

那么这会带来一个问题,主要是GFW,试想访问一个双栈站点,ipv4被reset了,ipv6即使不被墙 本地也会因为ipv4连接重置而主动重置ipv6的连接。导致整个应用异常。我试图通过修改dns配置,修改chrome代码的方式(对chrome代码了解不多,也只是在Default address family动一下)让它在有AAAA的情况下完全通过ipv6访问,但都不成功。最后只有一个笨方法就是用iptables禁止ipv4的地址外出。这个方法最大的缺点是缺乏动态性,也就是你要知道哪些域名既有AAAA也有A 只有这样才能把A的封掉。perl脚本如下:

#! /usr/bin/env perl
use 5.010;
use strict;
use warnings;

use Net::DNS;
use IO::Select;

my @dlist;

defined $ARGV[0] or die "miss list";

if ( ! open FILE ,$ARGV[0]){
	die "open file error";
}

while (){
	chomp;
	push @dlist, $_;
}
close FILE;

my $F_TYPE="A";
my $tmout = 30;
my @ready;
my @rr_list;

my $res = Net::DNS::Resolver->new;
my $sel = IO::Select->new();

foreach (@dlist){
	my $bgquery = $res->bgsend($_, $F_TYPE);
	$sel->add($bgquery);
}
print "dname nr:",$sel->count(),"\n";

while($sel->count()){
	@ready = $sel->can_read($tmout);
	if (@ready){
		foreach (@ready){
			my @ans = $res->bgread($_)->answer;
			foreach my $rr (@ans){
				if ($rr->{'type'} eq $F_TYPE){
#					print $rr->{'address'} ,"\n";
					push @rr_list, $rr->{'address'};
				}
			}
			$sel->remove($_);
			$_=undef;
		}
	}else{
		warn "timeout\n";
	}
}

my %saw;
@saw{@rr_list} = ();
my @rr_uniq = sort keys %saw;
system "/usr/sbin/iptables -F";
foreach ( @rr_uniq){
	system "/usr/sbin/iptables -A OUTPUT -d $_ -j DROP";
}
Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: