Loopback todo o tráfego recebido na interface

2

Eu quero fazer o loopback de todo o tráfego recebido em uma interface. Isso seria equivalente a um loopback de linha / instalação. Após uma pergunta semelhante , fiz isso:

iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -j ACCEPT

Mas nada é recebido pelo remetente. O pacote é descartado na interface de entrada. Não houve net.ipv4.ip_forward = 1 linha no meu /etc/sysctl.conf .

    
por user2233706 10.11.2016 / 18:01

1 resposta

2

Roteamento

A principal maneira de decidir onde os pacotes do kernel é a tabela de roteamento ( ip route e amigos), não as regras de firewall ( iptables , nftables ). Depois que você habilitar o encaminhamento de IP com net.ipv4.ip_forward = 1 , o kernel processará os pacotes recebidos pela tabela de roteamento e os enviará de volta. Então, se você quiser que o tráfego para 10.0.0.2 passe pela eth0, independentemente de onde ele veio:

ip route add 10.0.0.2/32 dev eth0

Agora, por padrão, quando o kernel vê o tráfego chegando na eth0 e voltando à mesma coisa, ele envia um redirecionamento de ICMP para dizer à máquina de origem: "Ei, isso é ineficiente! Envie-a diretamente!" Você precisa desativar isso ( net.ipv4.conf.eth0.send_redirects = 0 ) Ele também verifica o endereço de origem para garantir que ele veio de onde esperava; talvez seja necessário desativá-lo também ( net.ipv4.conf.eth0.rp_filter = 0 ).

Como isso passa pelo maquinário de roteamento do kernel, coisas obrigatórias como diminuir o IP TTL serão feitas. Mas coisas como o endereço IP de origem e destino não são alterados.

Roteamento + NAT

Se você também precisar que os endereços IP de origem ou de destino sejam alterados, adicione NAT por cima. Por exemplo, se você precisar que o endereço IP de origem seja esta máquina, adicione seu:

iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE

Observe que, a menos que você tenha alterado o padrão, o FORWARD já deve aceitar. Caso contrário, você pode adicionar sua regra (ou, alternativamente, alterar o padrão).

NAT + Roteamento

Você também pode alterar o endereço IP de destino quando o pacote chegar, o que mudará como ele é roteado (porque essa alteração é feita antes que o roteamento o veja). Isso parece:

iptables -t nat -A PREROUTING -s 10.0.0.1 -j DNAT --to-dest 10.0.0.2

Observe que você não pode usar --out-interface aqui porque a interface externa não é conhecida até depois do roteamento. Você pode usar --in-interface embora.

Ferramentas existentes

Você também deve dar uma olhada em iperf3 e o gerador de pacotes .

    
por 10.11.2016 / 18:36