Estou tentando rastrear esse problema há vários dias. Eu ainda não consegui descobrir o que está acontecendo, ou como corrigi-lo corretamente, mas eu tenho uma solução alternativa.
Netflix trava ao assistir em qualquer máquina na minha rede interna, acessando a internet através de uma caixa linux atuando como roteador nat e adsl. O Netflix funciona bem ao assistir diretamente na caixa do Linux conectada à Internet.
Minha caixa do servidor linux, "chimpanzé", é conectada à rede interna da casa via um nic (eth0) e ao modem adsl via outro nic (eth3). Ele está executando o pppoe para o modem adsl, e o link da internet funciona bem, com 15Mb / s para baixo e 1Mb / s para cima. O Chimp está executando o debian jessie 8.6.0 (kernel 3.16.0-4-amd64), apesar de ter sido debian wheezy 7.1.0 até que eu o atualizei como parte da investigação deste problema.
Outros computadores na rede doméstica acessam a Internet via regras iptables no chimpanzé que usam o mascaramento (eu também tentei snat) para encaminhar de eth0 para ppp0.
Assistir o Netflix no próprio chimpanzé funciona bem. Assistir BBC iplayer (estou no Reino Unido) em qualquer computador na rede funciona bem. Assistir ao netflix em qualquer computador que não seja o chimp stalls, embora eu acredite que costumava funcionar no início de novembro de 2016. Os computadores que mostram o problema incluem um par de macs (safari) e outra jessie box da Debian (chrome).
Olhando para a figura "bytes RX" de "/ sbin / ifconfig ppp0" mostrou que estava baixando por alguns segundos, então praticamente parou.
Eu encontrei algo na internet que dizia que minhas regras iptables deveriam estar descartando pacotes que marcam marcas como "inválidas". Adicionei regras para descartar pacotes inválidos, mas isso não melhorou a situação. Eu tentei fazer o log também, e vi que eu estava pegando um monte desses pacotes de volta do netflix, mas apenas quando assistia em uma máquina diferente do chimpanzé.
Eu tentei "echo 255 > / proc / sys / net / netfilter / nf_conntrack_log_invalid" e vi que os pacotes inválidos eram devidos a checksums TCP inválidos:
Dec 30 20:16:40 chimp kernel: [185803.594182] nf_ct_tcp: bad TCP checksum IN= OUT= SRC=78.146.119.61 DST=<my_public_ip_address> LEN=1500 TOS=0x00 PREC=0x00 TTL=59 ID=0 PROTO=TCP SPT=443 DPT=56711 SEQ=92431783 ACK=3940029300 WINDOW=2050 RES=0x00 ACK URGP=0 OPT (0101080AC67B959B27E48AC7)
Dec 30 20:16:40 chimp kernel: [185803.594200] input invalid: IN=ppp0 OUT= MAC= SRC=78.146.119.61 DST=<my_public_ip_address> LEN=1500 TOS=0x00 PREC=0x00 TTL=59 ID=0 PROTO=TCP SPT=443 DPT=56711 WINDOW=2050 RES=0x00 ACK URGP=0
(O prefixo "input invalid" mostra que ele vem da minha regra iptables para registrar um pacote inválido na cadeia de entrada antes de descartá-lo.)
Eu tentei desabilitar a verificação de checksum em conntrack com "sysctl -w net.netfilter.nf_conntrack_checksum = 0". Isso fez com que as linhas de log acima parassem, mas não corrigiram o problema.
Então, meu melhor palpite é:
Isso faz algum sentido para quem sabe mais sobre tcp, conntrack e nat do que eu? Ou há algo que eu possa estar fazendo errado?
Eu fiquei sem saber investigar isso. Mas talvez essa solução alternativa seja útil para qualquer outra pessoa que encontre o mesmo problema.
A solução é configurar toda a rede da casa usando um proxy http / https em execução no chimpanzé (a máquina conectada à Internet). Eu usei wpad.dat no chimp para autoconfigurar as outras máquinas e configurá-lo apenas para proxy * .netflix.com e * .nflxvideo.net.
Cada máquina cliente precisa de um pouco de configuração para usar a descoberta automática de proxy, apenas uma única caixa de seleção nas configurações de rede no mac e no gnome (e eu acho o mesmo no Windows).
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 0 level 4 prefix "input invalid: "
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
347 19177 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
259 33840 ACCEPT all -- eth+ * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpts:1024:5999
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpts:6010:65535
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:123
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:500
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:143
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:993
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02
0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT esp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 0 level 4 prefix "forward invalid: "
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
0 0 ACCEPT tcp -- eth0 ppp+ 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02
0 0 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:53
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 639 packets, 103120 bytes)
pkts bytes target prot opt in out source destination
# Generated by iptables-save v1.4.21 on Mon Jan 2 13:24:22 2017
*nat
:PREROUTING ACCEPT [115:43215]
:INPUT ACCEPT [43:4146]
:OUTPUT ACCEPT [2:606]
:POSTROUTING ACCEPT [2:606]
-A POSTROUTING -o ppp+ -j MASQUERADE
COMMIT
# Completed on Mon Jan 2 13:24:22 2017
# Generated by iptables-save v1.4.21 on Mon Jan 2 13:24:22 2017
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [692:108312]
-A INPUT -m state --state INVALID -j LOG --log-prefix "input invalid: "
-A INPUT -m state --state INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth+ -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p udp -m udp --dport 1024:5999 -j ACCEPT
-A INPUT -p udp -m udp --dport 6010:65535 -j ACCEPT
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8443 -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -j DROP
-A FORWARD -i lo -j ACCEPT
-A FORWARD -m state --state INVALID -j LOG --log-prefix "forward invalid: "
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -i eth0 -o ppp+ -p tcp -j ACCEPT
-A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A FORWARD -i eth0 -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -o eth0 -p udp -m udp --sport 53 -j ACCEPT
-A FORWARD -j DROP
COMMIT
# Completed on Mon Jan 2 13:24:22 2017