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
Eu tenho 3 máquinas:
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
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
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.