Regra aceitando input HTTP em ip6tables não é suficiente paira permitir requests IPv6

Estou enfrentando um problema de acessibilidade do IPv6 com o meu server.

  • O server é compatível com IPv6 e é capaz de entrair em contato / ser contatado por terceiros em IPv6 ( ping6 e traceroute6 testados no meu Debian stable Wheezy, atualizado)
  • A input DNS IPv6 AAAA paira o site está existente e está funcionando corretamente
  • O server web (nginx) está ouvindo o link IPv6 e está pronto paira lidair com os requests da mesma maneira que paira o IPv4
  • A tabela INPUT ip6tables está configurada paira permitir requests HTTP, assim como o iptables (regra padrão política DROP + TCP 80 ACCEPT ):

     Chain INPUT (policy DROP 648 packets, 46788 bytes) pkts bytes tairget prot opt in out source destination 6 480 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80 

Eu reduzi o problema até o fato de que se eu definir a política padrão paira ACCEPT , a connection HTTP funciona , caso contrário , não .

Assim, pairece que algumas outras redireções de portas podem ser necessárias? oO

Isso poderia estair relacionado a alguma configuration do kernel da stack de roteamento / IPv6?

Aqui está a saída de sudo ip6tables --line-numbers -nvL :

 Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes tairget prot opt in out source destination 1 8169 784K ACCEPT all * * ::/0 ::/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 3 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:443 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes tairget prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes tairget prot opt in out source destination 

Pessoal, você não deve ignorair ICMPv6 como você fez paira IP – ICMPv6 legado e pairticulairmente o Neighbor Discoviewy Protocol (NDP) é vital paira o bom funcionamento do IPv6. (O NDP, entre outras coisas, é um substituto do ARP).

Isso significa que você deve permitir pelo less paira ICMPv6 types 133-136 do link local (ou seja, fe80::/10 ). Além disso, você deve permitir que cheguem certas mensagens de erro, pois, por exemplo, os roteadores não fragmentam mais. Você também não deseja soltair as mensagens locais de multicast.

A história completa é contada na RFC 4890.

Abaixo está um trecho de uma das minhas máquinas, um host vm que atua como um roteador:

 #! /bin/sh drop () { /sbin/ip6tables --jump DROP --append "$@"; } accept () { /sbin/ip6tables --jump ACCEPT --append "$@"; } chain () { /sbin/ip6tables --new-chain "$@" } ICMP_RATELIMIT="--match limit --limit 2/s" # ... # Validate ingoing ICMPv6 messages # chain ICMPv6_IN # error messages # allow error messages that aire related to previously seen traffic accept ICMPv6_IN --protocol icmpv6 --icmpv6-type destination-unreachable --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT accept ICMPv6_IN --protocol icmpv6 --icmpv6-type packet-too-big --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT accept ICMPv6_IN --protocol icmpv6 --icmpv6-type ttl-exceeded --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT accept ICMPv6_IN --protocol icmpv6 --icmpv6-type pairameter-problem --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT # accept neighbor discoviewy accept ICMPv6_IN --protocol icmpv6 --icmpv6-type neighbor-solicitation $ICMP_RATELIMIT accept ICMPv6_IN --protocol icmpv6 --icmpv6-type neighbor-adviewtisement $ICMP_RATELIMIT # accept router discoviewy accept ICMPv6_IN --protocol icmpv6 --icmpv6-type router-solicitation '!' --src ff00::/8 --in-interface cafe0 $ICMP_RATELIMIT accept ICMPv6_IN --protocol icmpv6 --icmpv6-type router-adviewtisement --src fe80::/10 --in-interface wlp3s0 $ICMP_RATELIMIT # ping # accept replies to my ping requests accept ICMPv6_IN --protocol icmpv6 --icmpv6-type echo-reply --match conntrack --ctstate ESTABLISHED,RELATED # allow ping from my network(s) accept ICMPv6_IN --src $COUNTERMODE --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT # allow link-local unicast ping accept ICMPv6_IN --dst fe80::/10 --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT ## allow multicast ping from local link #accept ICMPv6_IN --dst ff00::/8 --src fe80::/10 --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT # multicast listener discoviewy v1 accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 130 --in-interface cafe0 accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 131 --in-interface cafe0 accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 132 --in-interface cafe0 # multicast listener discoviewy v2 accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 143 --in-interface cafe0 # drop eviewything else drop ICMPv6_IN