
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:
- Crie uma
tun0
interface no sistema cliente - Roteie todo o tráfego de saída por meio dessa interface.
- 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 ens33
interface, e ainda vejo com tcpdump
e wireshark
que 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