This is a tiny DNS server only for family used.
Support python3
Note
Use TCP connection when proxy enable
- Local FAKE domain. DNS Record: A, AAAA, CNAME, NS, MX, TXT, SRV...
- Forward DNS request to upstream DNS server with TCP or UDP mode.
- Proxy support. Connect to upstream server through PROXY server
- Support Adblock RUlE. Filter the request by rule and forward it to upstream DNS server.
- Local "hosts" file, resolve domain name by hosts content.
- Support non-standard DNS port, default 53
- Support DNS-over-HTTPS with protocol google and IETF
Default hosts filename is 'hosts'. The format is the same as system hosts.
example:
127.0.0.1 localhost
pyinstaller --icon App-browser.ico --clean --noupx --noconfirm --console --paths homedns --onefile hdns.py
server:
# python homedns.py -v Starting nameserver... Listen on 127.0.0.1:53 UDP server loop running in thread: Thread-1 UDP request 2016-01-28 02:48:41.508710 (127.0.0.1 59115): Request: 1.0.0.127.in-addr.arpa.(PTR) UDP request 2016-01-28 02:48:43.510825 (127.0.0.1 59118): Request: www.mylocal.home.mylocal.home.(A) UDP request 2016-01-28 02:48:45.511939 (127.0.0.1 59121): Request: www.mylocal.home.mylocal.home.(AAAA) UDP request 2016-01-28 02:48:47.514054 (127.0.0.1 59124): Request: www.mylocal.home.(A) From LOCAL return: mylocal.home.(CNAME) 127.0.0.1(A) UDP request 2016-01-28 02:48:47.517054 (127.0.0.1 59125): Request: www.mylocal.home.(AAAA) From LOCAL return: mylocal.home.(CNAME) ::1(AAAA) UDP request 2016-01-28 02:50:50.061063 (127.0.0.1 59126): Request: 1.0.0.127.in-addr.arpa.(PTR) UDP request 2016-01-28 02:50:52.064177 (127.0.0.1 59129): Request: mylocal.home.mylocal.home.(TXT) UDP request 2016-01-28 02:50:54.065292 (127.0.0.1 59132): Request: mylocal.home.(TXT) From LOCAL return: "my home"(TXT) "my domain"(TXT)
client:
C:\nslookup www.mylocal.home 127.0.0.1 Server: UnKnown Address: 127.0.0.1 Name: www.mylocal.home Addresses: ::1 127.0.0.1 Aliases: www.mylocal.home C:\nslookup -type=txt mylocal.home 127.0.0.1 mylocal.home text = "my home" mylocal.home text = "my domain"