É melhor definir regras nas tabelas ip6 ou desativar o ipv6?

11

Eu tenho a seguinte configuração de rede:

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:e0:1c:73:02:09
          inet addr:10.1.4.41  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::2e0:4cff:fe75:309/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:858600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1069549 errors:0 dropped:0 overruns:5 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:142871181 (136.2 MiB)  TX bytes:717982640 (684.7 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:37952 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3396918 (3.2 MiB)  TX bytes:3396918 (3.2 MiB)

Eu tenho um servidor DHCP na minha rede e posso obter a seguinte concessão:

lease {
  interface "eth0";
  fixed-address 10.1.4.41;
  option subnet-mask 255.255.0.0;
  option routers 10.1.255.253;
  option dhcp-lease-time 120;
  option dhcp-message-type 5;
  option domain-name-servers 82.160.125.52,213.199.198.248,82.160.1.1;
  option dhcp-server-identifier 192.168.22.22;
  renew 3 2014/01/01 18:34:41;
  rebind 3 2014/01/01 18:35:30;
  expire 3 2014/01/01 18:35:45;
}

I can ping 127.0.0.1, ::1, 10.1.4.41:

$ ping 10.1.4.41
PING 10.1.4.41 (10.1.4.41) 56(84) bytes of data.
64 bytes from 10.1.4.41: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 10.1.4.41: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 10.1.4.41: icmp_seq=3 ttl=64 time=0.085 ms
^C
--- 10.1.4.41 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.065/0.075/0.085/0.008 ms

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.055 ms
^C
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.055/0.059/0.066/0.005 ms

$ ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms
^C
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.037/0.046/0.052/0.006 ms

Não consigo executar ping no endereço ipv6 fe80::2e0:4cff:fe75:309:

$ ping6 fe80::2e0:4cff:fe75:309
connect: Invalid argument

Eu configurei algumas regras do iptables (ipv4):

# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N TCP
-N UDP
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A OUTPUT -m conntrack --ctstate INVALID -j DROP

E funciona como esperado para o ipv4. Mas quando eu checo o ip6tables, vejo alguns pacotes chegarem lá:

# ip6tables -nvL
Chain INPUT (policy ACCEPT 381 packets, 27624 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 390 packets, 26296 bytes)
 pkts bytes target     prot opt in     out     source               destination

Eu segui este guia e eles dizem que eu deveria copiar a configuração do iptables (ipv4) e colá-la no ip6tables (ipv6). Mas quando faço isso, nenhum pacote pode passar pela regra RELATED,ESTABLISHEDna tabela ipv6. Todos eles são descartados devido à política de cadeia INPUT ( DROP).

# ip6tables -nvL
Chain INPUT (policy DROP 5 packets, 360 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all      eth0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0
    0     0 ACCEPT     all      tun0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID
    0     0 UDP        udp      *      *       ::/0                 ::/0                 ctstate NEW
    0     0 TCP        tcp      *      *       ::/0                 ::/0                 tcp flags:0x17/0x02 ctstate NEW
    0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
    0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID

Chain TCP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain UDP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Como você pode ver, não há pacotes de saída, por que o Google e o Stack Exchange tentam se conectar à minha máquina? E como eles fazem isso porque nem eu consigo executar ping no meu endereço IPv6?

Eles também dizem que, se meu provedor de serviços de Internet não tiver ipv6 (na concessão, não há entrada ipv6), eu devo desativar o ipv6 e já o fiz antes usando ipv6.disable=1. Fiz uma pergunta semelhante em meta.stackoverflow.come recebi uma resposta que não deveria desativar o ipv6.

Eu não tenho ideia do que fazer. Estou com alguns problemas de conexão, ou seja, às vezes não consigo acessar as páginas na troca de pilhas ou no google, também tenho problemas com o pastebin.com. Em cada caso, existem os mesmos sintomas - depois de digitar um endereço no meu navegador, tenho que esperar algumas vezes alguns minutos para acessar o site e depois de recarregá-lo 2-3 vezes, posso navegar livremente, pelo menos por um período. Certo período de tempo.

Mikhail Morfikov
fonte

Respostas:

13

Seu endereço IPv6 começa com fe80:e, portanto, é um endereço local de link. Esses endereços são utilizáveis ​​apenas no mesmo link que a interface de rede. Como a mesma sub-rede local de link existe em todas as interfaces de rede, você precisará especificar qual interface deseja usar. Por exemplo, quando você deseja executar ping em um endereço local de link.

Tente um dos seguintes ping6exemplos. Ambos fazem o mesmo:

ping6 fe80::2e0:4cff:fe75:309%eth0
ping6 -I eth0 fe80::2e0:4cff:fe75:309

Isso também significa que apenas sistemas no seu link local (sua LAN) podem usar esse endereço local do link para se conectar ao seu sistema. Os roteadores não rotearão esses endereços. Não há como o Google ou o Stack Exchange estar enviando tráfego IPv6 para sua máquina, porque ela não possui um endereço IPv6 acessível e roteável a partir deles.

Então, qual tráfego IPv6 você está vendo na sua interface? Provavelmente coisas como mDNS ( DNS multicast ) e outros protocolos que podem se conectar automaticamente no link local. Por exemplo, Apple Airplay e Windows Home Group .

Suas regras de firewall estão faltando uma coisa muito importante: ICMPv6. O IPv6 usa o ICMP muito mais do que o IPv4, e não permitir a entrada de pacotes ICMP pode prejudicar gravemente seu tráfego, pois você não receberá mensagens de erro relacionadas a esse tráfego. Isso pode causar longos atrasos / tempo limite. Permitir o tráfego ICMPv6 geralmente não faz mal, então você pode adicioná-lo às suas regras de firewall:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Se você deseja bloquear ping6pacotes (embora eu realmente não entenda por que as pessoas ainda fazem isso hoje em dia, isso torna a conectividade de depuração muito mais difícil), você pode adicioná-lo como antes da ACCEPTlinha anterior :

ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j DROP

Isso é importante principalmente quando você obtém conectividade IPv6 global real com sua máquina, mas não será prejudicial se você já estiver preparado para isso :-)

Sander Steffann
fonte
1
Agora eu entendi. Eu adicionei a icmpv6regra, mas limitado a 20 / min, e posso ver que os pacotes chegam lá. ping6 -I eth0 fe80::2e0:4cff:fe75:309também funciona.
Mikhail Morfikov
2

Eu sempre assumo, ao gerenciar sistemas, que qualquer coisa que não precise explicitamente fornecer os serviços no referido sistema, deve ser desativada. Essa filosofia vai para tudo, seja:

  • desinstalando software desnecessário
  • desativando uma área de trabalho da GUI em um servidor
  • desativando e / ou excluindo hardware desnecessário
  • desativando o IPv6
  • desativando serviços desnecessários
  • etc.
slm
fonte
Eu tenho a mesma filosofia, mas neste caso eu realmente não sei o que fazer. Algumas pessoas dizem que eu devo desativar o ipv6, outras dizem algo diferente. Eu tenho problemas mesmo quando o ipv6 está desativado.
Mikhail Morfikov
@MikhailMorfikov - seu ISP executa algum proxy / NAT em que eles estão fazendo com que seus clientes usem o IPv6 apenas para acessar o ISP. Não acho que isso seja um problema para você, caso contrário, você teria um endereço IPv6, mas pensaria nele.
Slm
Eu não tenho idéia, talvez eu deva perguntar a eles, e talvez eles façam algo e resolvam o problema.
Mikhail Morfikov
2

Eles também dizem que, se meu provedor de serviços de Internet não tiver ipv6 (na concessão, não há entrada para ipv6), eu devo desativar o ipv6 e já havia feito isso antes usando ipv6.disable = 1. Fiz uma pergunta semelhante no meta.stackoverflow.com e recebi uma resposta que não deveria desativar o ipv6.

é claro que você não veria uma concessão de endereço IPv6 com o DHCP - é para isso que serve o DHCPv6: DHCP e DHCPv6 não são compatíveis.

Para desativar ou não o IPv6: Se você não precisar dele e o seu ISP ainda não o fornece, desligue-o, mas prepare-se para a sua introdução . Isso inclui remover / reprojetar tudo o que depende explicitamente do IP herdado, como endereços IP codificados ou usar difusão.

Por favor, desative o IPv6: tenha em atenção que, por exemplo, a Microsoft considera o IPv6 parte integrante do sistema operacional, portanto, a desativação do IPv6 pode afetar o suporte que você obtém deles.

contra-modo
fonte