Essas regras fazem a mesma coisa. Independentemente de qual corresponde, o resultado é o mesmo.
Qualquer pacote que possa corresponder à segunda regra já teria correspondido à primeira regra. Mesmo que um pacote tenha correspondido à segunda regra, ele não faz nada diferente da primeira regra. (Na verdade, eu indiquei corretamente o -I
em suas regras, o que significa que as regras estão na ordem inversa).
Eu devo avisá-lo que tentar mudar os fluxos de pacotes da maneira que você está fazendo não funcionará como você espera. O IPTables funciona no nível pacote , não no nível conexão . Uma regra com --string "google.com"
corresponderia ao (s) pacote (s) nesta página que contém a string "google.com", mas não a qualquer parte do handshake TCP e não a qualquer outro pacote que não contenha "google.com" . Esta página é atualmente sobre 45KB que seria aproximadamente 30 pacotes e somente dois deles combinariam. Uma regra com --string "google.com"
provavelmente não corresponderia a nenhum pacote da página inicial real do Google. Ele pode redirecionar as solicitações de DNS se isso acontecer no TCP.
Como @diegows apontou em sua resposta, apenas o primeiro pacote de qualquer conexão TCP atravessa a tabela nat porque você não pode redirecionar pacotes no meio de uma conexão TCP e esperar que funcione para que eles não façam é possível. Mesmo se você colocar esse tipo de regra em uma tabela diferente, ainda não funcionará.