DR

DR

DR

Quero que todo o tráfego de saída do meu sistema seja roteado para um dispositivo tun0, empacotado com pacotes DNS e depois enviado para a Internet, mas os pacotes DNS também são roteados de volta para o dispositivo tun0.

Fundo

Como parte de um projeto em que estou trabalhando, preciso implementar um túnel DNS em um sistema sem tráfego TCP (todo o tráfego TCP é eliminado).

Decidi implementar isso em python e me deparei com um problema para entender como rotear o tráfego.

A configuração consistiria em um agente no computador cliente que não pode usar TCP e um servidor que não possui limitações de rede.

Atualmente estou tratando apenas do tráfego de saída do cliente para o servidor.

A abordagem atual que eu queria adotar com o cliente era:

  1. Crie uma tun0interface no sistema cliente
  2. Roteie todo o tráfego de saída por meio dessa interface.
  3. Faça com que um programa python escute essa interface - os pacotes de saída seriam agrupados com uma consulta DNS enviada à Internet pela interface que está conectada à Internet (no meu caso ens33).

Para criar o dispositivo tun usei:

from pytun import TunTapDevice

tun = TunTapDevice(name=”tun0”)
tun.addr = '10.8.0.1'
tun.dstaddr = '10.8.0.2'
tun.netmask = '255.255.255.0'
tun.mtu = 1500

tun.up()

Para rotear o tráfego para a interface tun0 que usei

sudo ip route add default via 10.8.0.1 dev tun0

O problema

Eu recebo o tráfego roteado para meu programa python e posso ler os pacotes do dispositivo, mas depois de construir os novos pacotes DNS (com os dados originais dentro desse pacote), tento enviar os pacotes para a Internet pela minha ens33interface, e ainda vejo com tcpdumpe wiresharkque a solicitação tenta ser enviada da interface tun0.

Como posso rotear apenas pacotes que não são do meu programa para o tun0? O conceito parece semelhante ao VPN para mim, como os programas VPN fazem isso?

Obrigado pela sua ajuda, por favor, comente se algum esclarecimento/edição for necessário

informação relacionada