V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leavic
V2EX  ›  问与答

iptables 规则会对 IPV6 数据起作用吗?

  •  
  •   leavic · 2014-07-24 21:05:36 +08:00 · 1850 次点击
    这是一个创建于 3774 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景: http://www.lifetyper.com/2014/07/the-bogus-empty-response-from-dns-hijack-of-gfw.html

    简单的说,就是我发现GFW会对114的DNS也做劫持,返回一个Response Code为0(表示没有错误),但RRs为空(没有有效解析数据)的劫持数据包,最终导致域名解析失败.

    然后我写了条iptables规则,在路由器上过滤这种ResponseCode显示没错误,但RRs为空的响应数据包.在IPV4下工作正常.

    问题:一旦我启用Windows中网卡的IPV6,所有通过IPV6发出的DNS请求好像都没有响应了.

    抓包看到是不停的在发出解析请求到路由器,但一个返回都没有.可就是在一个返回都没有的情况下,等了比较长的时间(大概10来秒),好像Ping和Firefox又获得了域名的IP(可是抓包没看到).

    我基本确定是那条iptables的规则影响了IPV6下的DNS解析,可是我的规则里甚至还专门去检测了是IPV4协议,标准20字节长度的IP头才继续匹配,为什么会对IPV6产生影响呢?
    IPV6的防火墙不是应该由IP6tables来管理吗?iptables我记得只对IPV4起作用啊,实在想不出原因了,特来请教.
    第 1 条附言  ·  2014-07-24 22:07:21 +08:00
    问题暂时解决了,但原因没找到,因为我的网络并不是真的支持IPV6,仅仅是路由器和Windows之间支持.
    我只能猜测OpenWRT是不是对IPV6数据的处理是先还原成IPV4再用IPV4的规则进行匹配,结果刚好拦下了IPV6的数据,而且用ip6tables查看还看不到这个规则,但实际就是在起作用.

    之所以这么说,是因为我在路由上,在之前的过滤规则之前,又插入了一条规则,对所有开始第一字节是60(IPV6表示)的IP包全部放行,而且这条规则优先度最高.结果这样就解决了问题.

    所以现在看来,openwrt上的iptables好像真的会接管从windows过来的ipv6数据,但这个机制到底是怎么工作的我实在想不清楚.
    第 2 条附言  ·  2014-07-24 22:36:55 +08:00
    好吧,是个错觉,添加IPV6的放行规则也无效,我实在搞不懂了.
    第 3 条附言  ·  2014-07-25 16:41:15 +08:00
    这次真的搞定了,总结一下:

    1.路由对外的DNS查询还是走IPV4的,不管是查询A记录还是AAAA记录.

    2.绝大部分域名都没有AAAA记录,刚好和这个匹配规则对上了,所以AAAA记录的查询一直等不到返回包,但A记录的可以.

    3.Windows默认只使用IPV6,即使有A记录返回了,也还是会继续等AAAA记录,直到重试多次确定没有返回结果之后才会用IPV4的A记录.

    4.这就是为什么看起来解析变得更慢的原因了,因为这个规则挡掉了windows一直在等待的AAAA记录.

    5.GFW劫持包的主要特征其实不是RRs=0,而是把RD=1的请求位在响应中改成了0,增加对这一位的匹配就OK了.
    10 条回复    2014-07-24 21:38:34 +08:00
    AstroProfundis
        1
    AstroProfundis  
       2014-07-24 21:06:26 +08:00
    ip6tables
    izoabr
        2
    izoabr  
       2014-07-24 21:12:06 +08:00
    用同样的规则,Insert一条到你那条规则前面,做一下ulog,看看包有什么不一样的。
    leavic
        3
    leavic  
    OP
       2014-07-24 21:16:39 +08:00
    @izoabr 我是在windows下用wireshark抓包的,Openwrt没有ulog.这条规则已经是最后insert进去的了,再insert一条抓包看了一下,结果没区别.
    leavic
        4
    leavic  
    OP
       2014-07-24 21:17:36 +08:00
    @izoabr 我还专门用ip6tables看了一下PREROUTING表,确实是空的,实在不明白为什么会影响到IPV6.
    izoabr
        5
    izoabr  
       2014-07-24 21:26:10 +08:00
    @leavic 哦,看来条件有限,另外GFW也能干扰IPV6吧?
    izoabr
        6
    izoabr  
       2014-07-24 21:27:05 +08:00
    leavic
        7
    leavic  
    OP
       2014-07-24 21:30:47 +08:00
    @izoabr 这个只是让我意外发现了几个以前没发现的GFW污染IP,对付的方法和IPV4下一样,还是用iptables的string模块匹配过滤.
    这次要对付的是伪造正常ResponseCode但没有RRs的空响应包,其实这本来没啥难度的,IPV4下规则都生效了,就是不知道怎么惹到IPV6了.OpenWRT有IPV6支持,Windows又很蛋疼,一旦发现IPV6支持的路由就默认只使用IPV6,结果就完了.
    恐怕还得想办法改改规则.
    izoabr
        8
    izoabr  
       2014-07-24 21:34:41 +08:00
    @leavic 你看看是不是本地有DNS Cache

    #ipconfig /flushdns
    leavic
        9
    leavic  
    OP
       2014-07-24 21:35:33 +08:00
    @izoabr 和这个完全无关....
    izoabr
        10
    izoabr  
       2014-07-24 21:38:34 +08:00
    @leavic 哦,那就不懂了,只能精神上支持你了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2845 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:24 · PVG 17:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.