Os pacotes encaminhados são visíveis pelo tcpdump, mas não recebidos pelo aplicativo

1

Eu tenho 3 máquinas:

  • A 10.8.0.8/24
  • B 10.8.0.13/24 10.248.0.34/23
  • C 10.8.0.40/24 10.248.0.12/23

Em A, adiciono uma rota de A a C usando: ip route add 10.248.0.12 via 10.8.0.13 .

Então eu testo a configuração. Em C, digito nc -ul 2002 . Então, em A, eu uso nc -u 10.248.0.12 2002 para enviar alguns pacotes.

Pacotes não são recebidos por nc em C.

No entanto, quando eu uso C em tcpdump -n "(src host 10.8.0.8 and dst host 10.248.0.12) or (src host 10.248.0.12 and dst host 10.8.0.8)" -vv -i any
, ele lê 15:19:46.756649 IP (tos 0x0, ttl 63, id 47699, offset 0, flags [DF], proto UDP (17), length 29) 10.8.0.8.44254 > 10.248.0.12.2002: [udp sum ok] UDP, length 1 .

O que posso fazer para inspecionar o que acontece com os pacotes, claramente os pacotes são roteados de A para C, mas por algum motivo eles são rejeitados.

Em C:

iptables -t filter -L FORWARD -n

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
WEAVE-NPC  all  --  0.0.0.0/0            0.0.0.0/0            /* NOTE: this must go before '-j KUBE-FORWARD' */
NFLOG      all  --  0.0.0.0/0            0.0.0.0/0            state NEW nflog-group 86
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
KUBE-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes forwarding rules */
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            /* generated for LXD network fanbr0 */
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            /* generated for LXD network fanbr0 */
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0     

iptables -t mangle -L -n

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
CHECKSUM   udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:68 /* generated for LXD network fanbr0 */ CHECKSUM fill
    
por Marcin Król 08.08.2018 / 17:35

2 respostas

1

Como apontado por @ A.B, a explicação é a filtragem de caminho inverso. Eu fiz 10.248.0.12 acessível a partir de A desativando a filtragem de RP em C.

sysctl -w net.ipv4.conf.all.rp_filter=0 e echo 0 > /proc/sys/net/ipv4/conf/*/rp_filter

    
por 09.08.2018 / 10:25
0

vejo a regra

DROP all - 0.0.0.0/0 0.0.0.0/0

antes das regras

ACEITAR tudo - 0.0.0.0/0 0.0.0.0/0
ACEITAR todos - 0.0.0.0/0 0.0.0.0/0

Assim, todos os pacotes encaminhados em C serão descartados.

    
por 08.08.2018 / 21:15