Manipulação de campo de identificação IPv4 no Linux

Manipulação de campo de identificação IPv4 no Linux

Quando Don't Fragmento sinalizador é definido, o RFC IPv4 permite definir a identificação arquivada como 0x0000.

Eu tenho um peer que está atrás de um firewall que freia o RFC e bloqueia qualquer pacote IPv4 com esse 0x0000campo de ID. Meu kernel Linux 4.4.0 "moderno" gera pacotes com ID, 0x0000portanto não consigo criar uma conexão TCP.

Como posso proibir a geração deste 0x0000ID ou como manipular este campo com iptables mangle ou de qualquer outra forma?

Responder1

Você provavelmente está se referindo aRFC 6864.

Em um Linux 4.17.x, pude ver id = 0 aparecer de forma confiável apenas para o pacote SYN + ACK de um servidor que responde a uma conexão recebida, mas não depois.

ATUALIZAÇÃO: O OP confirmou que esse também era o caso usual na pergunta (com um kernel 4.4.x).

Provávelrequisito mínimo: nftables v0.6. notracknão é necessário, as entradas do conntrack não se importam com esse ID.

Se valer a pena, aqui está umnftablesregra para alterar o valor do id para o valor 0xbeefquando [DF] está definido e id == 0. Não acho que iptablesseja capaz de fazer isso.

nft add table raw
nft 'add chain raw output {type filter hook output priority -300;}'
nft 'add rule raw output ip frag-off & 0x4000 != 0 ip id == 0 ip id set 0xbeef'    

0x4000aqui significaa DFbandeira.

informação relacionada