Isso seria a sua conveniência (em uma linha, mas eu tive que mostrar isso para ter um trabalho arrojado):
iptables -t nat -I PREROUTING -p udp -d {IPDST} --dport 27055 -m u32 --u32 '0>>22&0x3C@8=0xFFFFFFFF && 0>>22&0x3C@12
>>24
=0x55' -j REDIRECT --to-port 21015
ou
iptables -t nat -I PREROUTING -p udp -d {IPDST} --dport 27055 -m u32 --u32 '0>>22&0x3C@8=0xFFFFFFFF && 0>>22&0x3C@12
&0xFF000000=0x55000000
' -j REDIRECT --to-port 21015
Em ambos os casos, você remove da equação a parte que não deseja comparar, seja deslocando 3 bytes para a direita e mantendo apenas a 1ª, ou usando uma máscara que manterá na equação apenas a 1ª. byte. O segundo é mais flexível.
Há um exemplo em man iptables-extensions
semelhante à primeira opção:
... 0 >> 22 & 0x3C @ 0 >> 24 = 0"
[...]
This is the first 4 bytes of the ICMP payload, of which byte 0 is the ICMP type. Therefore, we simply shift the value 24 to the right to throw out all but the first byte and compare the result with 0.
Observe também que, como é a tabela nat, se a porta de origem não for alterada, apenas o primeiro pacote UDP será considerado. Depois disso, o conntrack cuidará do fluxo e sua regra não verá os outros pacotes. Portanto, se cada pacote for independente, verifique se a porta de origem é alterada e talvez seja necessário usar a ferramenta nfct
juntamente com a regra -j CT --timeout
para reduzir a "memória" do conntrack e evitar o preenchimento de suas tabelas.