Brainstorming and planning for a DNS-based pluggable transport.
Brainstorming and planning for a DNS-based pluggable transport.
Encode data in recursive DNS queries and responses. Your local recursive resolver sends your packets to the right place. A dns bridge would be an authoritative name server for a particular domain; users would configure a domain rather than an IP address in their `Bridge` lines. Tools already exist to do DNS tunneling, for example [http://code.kryo.se/iodine/ iodine] and [https://github.com/iagox86/dnscat2 dnscat2]. Probably requires a reliability layer and periodic polling by the client.
Encode data in recursive DNS queries and responses. Your local recursive resolver sends your packets to the right place. A dns bridge would be an authoritative name server for a particular domain; users would configure a domain rather than an IP address in their `Bridge` lines. Tools already exist to do DNS tunneling, for example [iodine](http://code.kryo.se/iodine/) and [dnscat2](https://github.com/iagox86/dnscat2). Probably requires a reliability layer and periodic polling by the client.
[[./Survey|Survey of DNS tunnel encodings]]
[[./Survey|Survey of DNS tunnel encodings]]
Brainstorming options for a reliability layer:
Brainstorming options for a reliability layer:
* [https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md#dnscat-protocol dnscat2 protocol]: uses SYN, FIN, SEQ, ACK. Independent of DNS. (dnscat2 also has a separate procedure for encoding data as DNS requests/responses.)
*[dnscat2 protocol](https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md#dnscat-protocol): uses SYN, FIN, SEQ, ACK. Independent of DNS. (dnscat2 also has a separate procedure for encoding data as DNS requests/responses.)