Important
This is a primitive implementation. It's functional but minimalist. Perfect for learning and hacking, but probably not what you want for your production environment...
________ _______ _______ _____ ______ ________ ________ ________
|\ ___ \|\ ___ \ |\ ___ \ |\ _ \ _ \ |\ ___ \|\ ___ \|\ ____\
\ \ \_|\ \ \ __/|\ \ __/|\ \ \\\__\ \ \ \ \ \_|\ \ \ \\ \ \ \ \___|
\ \ \ \\ \ \ \_|/_\ \ \_|/_\ \ \\|__| \ \ \ \ \ \\ \ \ \\ \ \ \_____ \
\ \ \_\\ \ \ \_|\ \ \ \_|\ \ \ \ \ \ \ \ \ \_\\ \ \ \\ \ \|____|\ \
\ \_______\ \_______\ \_______\ \__\ \ \__\ \ \_______\ \__\\ \__\____\_\ \
\|_______|\|_______|\|_______|\|__| \|__| \|_______|\|__| \|__|\_________\
\|_________|
A primitive, hackable DNS server implementation. No bloat, no unnecessary features - just pure DNS protocol at its core. Perfect for learning, experimenting, or running your own nameserver.
- ✓ Primitive DNS protocol implementation
- ✓ Clean A record resolution
- ✓ NXDOMAIN handling for unsupported queries
- ✓ Zone file parsing
- ✓ Proper UDP socket handling
- ✓ Minimal external dependencies*
- Clone this repo
git clone https://github.com/pindjouf/deem.git
- Create your zone files in
/etc/deem/
mkdir -p /etc/deem
touch /etc/deem/example.com.zone
- Run the server
python server.py
- Test it
nslookup -port=53053 example.com 127.0.0.1
or
dig @127.0.0.1 -p 53053 example.com
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023121801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.example.com.
@ IN A 93.184.216.34
www IN A 93.184.216.34
- Only handles A records (IPv4)
- No caching
- No recursive resolution
- Local zone files only
- Cache implementation
- Recursive resolver
- AAAA record support
- Additional record types (MX, TXT, etc.)
This project is licensed under the WTFPL License - see the LICENSE file for details.