Troncato significa semplicemente che il pacchetto era più grande del previsto dal client. Per esempio. se il client si aspetta solo 512 byte facendo recv(fd,buf,512,0)
ma il messaggio è più grande il recv
fallirà perché il messaggio non si adatta. Con il flag MSG_TRUNC
il client può ottenere il messaggio troncato, ma non il messaggio completo perché non si adatta al buffer allocato.
Ciò significa che troncato non è una proprietà del pacchetto stesso e non può quindi essere impostato sul firewall. Al massimo è possibile generare una risposta che è più grande di quanto il client probabilmente si aspetta e quindi attiva il troncamento. Ma per fare questo è necessario un codice a livello di applicazione che generi una risposta che corrisponda alla domanda DNS, un semplice firewall di filtraggio dei pacchetti non può farlo.
EDIT:
C'è un flag TC nell'intestazione del messaggio che indica che il messaggio era troppo grande per il trasporto indicato ed è stato quindi troncato (cioè superiore a 512 byte per UDP a meno che non venga utilizzato EDNS). Quindi dovrebbe essere possibile creare un pacchetto di questo tipo. Ma per fare in modo che il pacchetto di risposta corrisponda al pacchetto di richiesta è ancora necessario il filtraggio a livello di applicazione, cioè un semplice filtro di pacchetti non è sufficiente.
A parte questo, l'intera domanda suona più come un problema costruito senza rilevanza pratica o come un Problema XY , ovvero il vero problema che stai cercando di risolvere è qualcosa di diverso.