A middleware between browser and DNS client/server, to speed up the Internet according to the network speed.
A middleware between browser and local DNS client/server, to speed up the Internet according to the network speed. It optimizes the A/AAAA records by latency detection mechanism, offer the best records the user wanted.
Why the GEO-based DNS is not enough? As we know, there are a lot of GEO-based DNS services, like openDNS, google DNS, etc. They can calculate the distance of the user location to the target host, to return the nearest records, but unfortunately it's hard to say the returned records are always the best ones, since the real user experience depends on the user local network quality, for the different time, different ISP and different website, the results are totally different.
So, it's better to have another program to detect the quality of the DNS records from user's point of view, then filter the bad ones out, and keep the good ones as much as possible. DNSTurbo was born under this situation, plug it into the DNS pipeline, always keep the records as good as possible for the users.
DNSTurbo do the Latency Detection, and does not do the Bandwidth Detection, because it's highly depend on the Congestion Control(For TCP connections), different congestion module would give the different results, and the Bandwidth Detection is not only very heavy especially for the mobile device in LTE network, but also would compete with Browser to make the network worse than ever. And another hand, all the records returned should have the very similar network quality, so to maximize the Bandwidth, we should rely on the target program or TCP Congestion Control(Like Linux-4.9, the new CC module would try the best to use the Bandwidth by the new algo)
Trailer
Architecture
Compatible Environments
- Linux
- 32/64 bit compatible
- x86/ARM compatible
Features
- Builtin
- Optimized A Record
- Optimized AAAA Record
- Http Latency Detection
- Docker Image
- Coming Soon:
- ICMP Latency Detection
Install Dependencies
# Install System Dependencies
sudo apt-get install autoconf valgrind expect libyaml-dev python3-dev python3-pip libc-ares-dev;
sudo pip3 install PyYAML pympler WebOb dnslib;
# Fork/Clone and Build Project Dependencies (For example: project folder is 'DNSTurbo')
cd DNSTurbo
git submodule update --init --recursive
make dep; sudo make install-dep; make skull; sudo make install-skull;
Build
skull build && skull deploy
Start
sudo skull start -D
Docker Images
The Docker images are ready now, if people who don't want to waste time to build it from scratch, it's super easy to run it via docker image.
Assume that we've already installed Docker, then apply the below commands:
bash$> docker pull finaldie/dnsturbo:0.8
bash$> docker run -p 53:53/udp finaldie/dnsturbo:0.8
Setup
Now, the DNSTurbo is all set, let's chain it in DNS pipe. For example, the DNSTurbo is set up in
192.168.31.221
- For Mac: Open
System Preferences
->Network
->Advanced
->DNS
, then add192.168.31.221
in the left window.
- For Windows7/10: Open
Network Apaptor
->Property
->TCP/IPv4
, then selectManual DNS
option, and add192.168.31.221
there.
After that, enjoy the new experience :)
Environment Variables
Sometimes we don't want to use the default upstream DNS from
resolv.conf
, then there is an Shell Environment Variable
can override it, just define an ENV var SKULL_DNS_NS, e.g.:export SKULL_DNS_NS=192.168.1.1
export SKULL_DNS_NS=8.8.8.8
from https://github.com/finaldie/DNSTurbo
No comments:
Post a Comment