henices
Tcp-DNS-proxy
Python

A TCP dns proxy which can get the RIGHT ip address

Last updated May 10, 2026
810
Stars
188
Forks
3
Issues
0
Stars/day
Attention Score
37
Language breakdown
No language data available.
โ–ธ Files click to expand
README

Features


  • DNS query forwarding, supports TCP DNS protocol and UDP DNS protocol
  • DNS server speed test, choose the fastest servers
  • DNS query local acceleration, use lru cache
  • DNS server automatic switching, when multiple query errors, automatically try to switch
  • Private Host, equivalent to modifying the hosts file
  • Support intranet DNS server, resolve internal domain names
How to use this python script ?

  • change your dns server to 127.0.0.1
$ vi /etc/resolve.conf  
  nameserver 127.0.0.1
  • restart the network
$ sudo /etc/init.d/networking restart
  • run the script
$ sudo python tcpdns.py -f tcpdns.json.example

Commandline


usage: tcpdns.py [-h] -f CONFIG_JSON [-d]

TCP DNS Proxy

optional arguments: -h, --help show this help message and exit -f CONFIG_JSON Json config file -d Print debug message

Configuration file


json
{
    "socket_timeout": 20,
    "host": "0.0.0.0",
    "port": 53,
    "tcpdnsserver": ["8.8.8.8:53",
                       "8.8.4.4:53",
                       "156.154.70.1:53",
                       "156.154.71.1:53",
                       "208.67.222.222:53",
                       "208.67.220.220:53",
                       "209.244.0.3:53"],
    "udpdnsserver": ["208.67.222.222:5353"],
    "enableserverswitch": true,
    "speed_test": true,
    "enablelrucache": true,
    "lrucachesize"  : 500,
    "udp_mode"        : false,
    "daemon_process"  : false,
    "internaldnsserver": ["192.168.1.1:53"],
    "internal_domain": ["intra"],
    "private_host"    : {"*google.com": "203.117.34.162"}
}
  • enableserverswitch: switch dns servers if network is slow
  • speed_test : test dns server speed on startup
  • enablelrucache : use lru cache to store dns server responses
  • udp_mode : use udp dns procotol, default is tcp dns protocol
daemon_process : daemon process on nix platform
  • internaldnsserver : internal dns server on internal network
  • internal_domain : internal domains which use internal dns server to get ip address
private_host : like /etc/hosts on nix platform

Dependencies


libraries

* [libev] (http://libevent.org/)

python moudules

* [gevent] (https://github.com/surfly/gevent) * [pylru] (https://github.com/jlhutch/pylru) * [python-daemon] (https://pagure.io/python-daemon/) (Windows does not need)

INSTALL


Linux system

python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
sudo .venv/bin/python3 tcpdns.py -f tcpdns.json.example -d

Windows system

Use tcpdns.exe in win directory. (I haven't tested it on Windows 10 or 11.)

LICENSE


This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/

ยฉ 2026 GitRepoTrend ยท henices/Tcp-DNS-proxy ยท Updated daily from GitHub