Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

major changes for compatibility and usability #77

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
277 changes: 163 additions & 114 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,123 +2,172 @@

Shell script to test the performance of the most popular DNS resolvers from your location.

Includes by default:
* CloudFlare 1.1.1.1
* Level3 4.2.2.1
* Google 8.8.8.8
* Quad9 9.9.9.9
* Freenom 80.80.80.80
* OpenDNS
* Norton
* CleanBrowsing
* Yandex
* AdGuard
* Neustar
* Comodo
* NextDNS
Includes the redundant servers of notable DNS providers by default:

* AdGuard
* CleanBrowsing
* Cloudflare (1.1.1.1)
* Comodo
* DNS.Watch
* Google (8.8.8.8)
* Level3 (4.2.2.1)
* Neustar
* OpenDNS (208.67.222.222)
* OracleDyn
* Quad9 (9.9.9.9)

As well as the redundant servers of these other well-known providers:

* AlternateDNS
* ControlD
* DNSFilter
* Freenom
* NextDNS
* NortonCS
* SafeDNS
* UncensoredDNS
* Verisign
* Yandex

13 default domain names are tested, with many others available as toggleable in the code:

* docker.io
* github.com
* gmail.com
* www.amazon.com
* www.apple.com
* www.facebook.com
* www.google.com
* www.paypal.com
* www.reddit.com
* www.twitter.com
* www.wikipedia.org
* www.yahoo.com
* www.youtube.com

# Required

You need to install bc and dig.
You need to install `dig`. `bc` is no longer a requirement.

For Ubuntu:
# Utilization and example output:

```
$ sudo apt-get install bc dnsutils
```

For macOS using homebrew:

```
$ brew install bc bind
```

# Utilization

```
$ git clone --depth=1 https://github.com/cleanbrowsing/dnsperftest/
$ cd dnsperftest
$ bash ./dnstest.sh
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
cloudflare 1 ms 1 ms 1 ms 2 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.10
google 22 ms 1 ms 4 ms 24 ms 1 ms 19 ms 3 ms 56 ms 21 ms 21 ms 17.20
quad9 10 ms 19 ms 10 ms 10 ms 10 ms 10 ms 10 ms 10 ms 10 ms 55 ms 15.40
opendns 39 ms 2 ms 2 ms 20 ms 2 ms 72 ms 2 ms 39 ms 39 ms 3 ms 22.00
norton 2 ms 2 ms 2 ms 2 ms 1 ms 2 ms 2 ms 1 ms 2 ms 2 ms 1.80
cleanbrowsing 11 ms 14 ms 11 ms 11 ms 10 ms 10 ms 11 ms 36 ms 11 ms 13 ms 13.80
yandex 175 ms 209 ms 175 ms 181 ms 188 ms 179 ms 178 ms 179 ms 177 ms 208 ms 184.90
adguard 200 ms 200 ms 200 ms 199 ms 202 ms 200 ms 202 ms 200 ms 199 ms 248 ms 205.00
neustar 2 ms 2 ms 2 ms 2 ms 1 ms 2 ms 2 ms 2 ms 2 ms 2 ms 1.90
comodo 21 ms 22 ms 22 ms 22 ms 22 ms 22 ms 22 ms 21 ms 22 ms 24 ms 22.00
```

To sort with the fastest first, add `sort -k 22 -n` at the end of the command:

```
$ bash ./dnstest.sh |sort -k 22 -n
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
cloudflare 1 ms 1 ms 1 ms 4 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.30
norton 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2.00
neustar 2 ms 2 ms 2 ms 2 ms 1 ms 2 ms 2 ms 2 ms 2 ms 22 ms 3.90
cleanbrowsing 11 ms 23 ms 11 ms 11 ms 11 ms 11 ms 11 ms 13 ms 12 ms 11 ms 12.50
google 4 ms 4 ms 3 ms 21 ms 21 ms 61 ms 3 ms 21 ms 21 ms 22 ms 18.10
opendns 2 ms 2 ms 2 ms 39 ms 2 ms 75 ms 2 ms 21 ms 39 ms 13 ms 19.70
comodo 22 ms 23 ms 22 ms 22 ms 22 ms 22 ms 22 ms 22 ms 22 ms 23 ms 22.20
quad9 10 ms 37 ms 10 ms 10 ms 10 ms 145 ms 10 ms 10 ms 10 ms 20 ms 27.20
yandex 177 ms 216 ms 178 ms 182 ms 186 ms 177 ms 183 ms 174 ms 186 ms 222 ms 188.10
adguard 199 ms 210 ms 200 ms 201 ms 202 ms 202 ms 199 ms 200 ms 198 ms 201 ms 201.20
```

To test using the IPv6 addresses, add the IPv6 option:

```
$ bash ./dnstest.sh ipv6| sort -k 22 -n
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
cleanbrowsing-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
cloudflare-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 5 ms 1 ms 1 ms 1 ms 1.40
quad9-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 21 ms 3.00
8.8.8.8 7 ms 1 ms 16 ms 1 ms 1 ms 24 ms 1 ms 8 ms 1 ms 7 ms 6.70
neustar-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 60 ms 6.90
opendns-v6 1 ms 1 ms 1 ms 1 ms 1 ms 62 ms 1 ms 1 ms 29 ms 1 ms 9.90
google-v6 8 ms 8 ms 7 ms 8 ms 14 ms 67 ms 1 ms 7 ms 8 ms 61 ms 18.90
adguard-v6 52 ms 55 ms 52 ms 53 ms 52 ms 56 ms 52 ms 55 ms 52 ms 57 ms 53.60
yandex-v6 177 ms 178 ms 178 ms 179 ms 179 ms 178 ms 179 ms 178 ms 178 ms 223 ms 182.70
```

To test both IPv6 and IPv4, add the "all" option:
```
$ bash ./dnstest.sh all| sort -k 22 -n
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
cleanbrowsing 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
cleanbrowsing-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
cloudflare-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
neustar 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
nextdns 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
quad9-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
cloudflare 1 ms 1 ms 1 ms 1 ms 1 ms 2 ms 1 ms 1 ms 1 ms 1 ms 1.10
quad9 1 ms 1 ms 1 ms 2 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.10
google 1 ms 1 ms 6 ms 1 ms 1 ms 6 ms 1 ms 7 ms 9 ms 7 ms 4.00
8.8.8.8 6 ms 1 ms 25 ms 1 ms 1 ms 6 ms 1 ms 7 ms 1 ms 7 ms 5.60
neustar-v6 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 64 ms 7.30
opendns-v6 7 ms 1 ms 21 ms 8 ms 1 ms 1 ms 1 ms 6 ms 1 ms 29 ms 7.60
opendns 1 ms 1 ms 27 ms 27 ms 1 ms 67 ms 1 ms 6 ms 1 ms 27 ms 15.90
comodo 1 ms 1 ms 1 ms 1 ms 4 ms 1 ms 1 ms 1 ms 1 ms 150 ms 16.20
google-v6 7 ms 6 ms 33 ms 7 ms 7 ms 87 ms 7 ms 8 ms 8 ms 25 ms 19.50
level3 27 ms 26 ms 25 ms 27 ms 27 ms 25 ms 27 ms 27 ms 25 ms 28 ms 26.40
norton 28 ms 26 ms 28 ms 26 ms 26 ms 28 ms 27 ms 27 ms 27 ms 27 ms 27.00
adguard-v6 52 ms 54 ms 55 ms 56 ms 52 ms 52 ms 52 ms 53 ms 53 ms 54 ms 53.30
adguard 58 ms 58 ms 58 ms 58 ms 60 ms 58 ms 60 ms 60 ms 58 ms 60 ms 58.80
freenom 140 ms 140 ms 140 ms 145 ms 135 ms 140 ms 140 ms 140 ms 140 ms 134 ms 139.40
yandex-v6 178 ms 179 ms 178 ms 179 ms 178 ms 178 ms 178 ms 179 ms 179 ms 205 ms 181.10
yandex 178 ms 178 ms 177 ms 179 ms 178 ms 174 ms 180 ms 178 ms 179 ms 222 ms 182.30

```


# For Windows users using the Linux subsystem

If you receive an error `$'\r': command not found`, convert the file to a Linux-compatible line endings using:

tr -d '\15\32' < dnstest.sh > dnstest-2.sh
# bash dnstest.sh

TESTING DOMAINS:

Test Domain Name
---- ---------------
t1: docker.io
t2: github.com
t3: gmail.com
t4: www.amazon.com
t5: www.apple.com
t6: www.facebook.com
t7: www.google.com
t8: www.paypal.com
t9: www.reddit.com
t10: www.twitter.com
t11: www.wikipedia.org
t12: www.yahoo.com
t13: www.youtube.com

ALPHABETICAL TESTING:

Provider t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 Median ms
--------------- --- --- --- --- --- --- --- --- --- --- --- --- --- ---------
pihole-FTL 1 1 1 1 1 1 1 1 1 1 1 1 1 1.00 ms
nameserver/1 49 21 64 82 79 20 19 19 20 19 74 20 19 38.85 ms
nameserver/2 50 69 52 29 30 22 21 20 21 19 49 19 22 32.54 ms
AdGuard/1 106 56 84 56 55 57 55 56 58 58 202 56 58 73.62 ms
AdGuard/2 56 55 56 57 58 58 58 56 57 57 58 58 56 56.92 ms
AlternateDNS/1 76 76 75 76 76 76 76 75 78 74 77 75 76 75.85 ms
AlternateDNS/2 76 76 80 76 76 77 72 73 77 78 78 76 76 76.23 ms
CleanBrowsing/1 97 81 79 81 80 80 82 83 79 84 81 80 83 82.31 ms
CleanBrowsing/2 57 55 56 55 55 55 53 57 55 55 56 56 55 55.38 ms
Cloudflare/1 50 47 49 45 48 48 46 48 48 50 48 50 45 47.85 ms
Cloudflare/2 49 48 49 49 46 44 49 48 48 49 45 49 46 47.62 ms
Comodo/1 30 29 31 30 32 30 32 31 30 30 149 28 31 39.46 ms
Comodo/2 30 25 30 30 30 31 31 30 30 30 30 31 33 30.08 ms
ControlD/1 24 20 35 22 32 21 21 61 21 26 182 21 21 39.00 ms
ControlD/2 21 21 19 20 22 21 19 22 20 21 20 20 19 20.38 ms
DNSFilter/1 19 17 18 19 19 20 18 17 19 20 20 20 19 18.85 ms
DNSFilter/2 21 22 21 18 19 20 20 22 21 22 21 19 20 20.46 ms
DNS.Watch/1 162 167 164 162 163 176 162 166 165 167 183 175 165 167.46 ms
DNS.Watch/2 159 160 165 166 164 182 167 162 * 162 170 161 166 999 1-to
Freenom/1 399 194 360 264 286 193 196 556 * 205 620 258 195 999 1-to
Freenom/2 412 191 311 507 288 195 195 205 301 235 614 724 194 336.31 ms
Google/1 20 20 18 29 23 19 18 19 18 17 55 17 19 22.46 ms
Google/2 17 21 26 61 23 19 18 18 20 21 18 19 21 23.23 ms
Level3/1 21 18 18 18 20 17 18 18 17 19 18 20 20 18.62 ms
Level3/2 19 17 16 18 19 18 17 21 17 20 21 16 20 18.38 ms
Neustar/1 61 27 28 24 28 25 26 27 27 28 28 27 26 29.38 ms
Neustar/2 18 20 19 38 21 20 21 18 19 19 19 19 21 20.92 ms
NextDNS/1 20 18 19 21 19 20 19 21 18 21 20 20 19 19.62 ms
NextDNS/2 54 21 19 20 14 20 21 22 20 21 21 21 20 22.62 ms
NortonCS/1 33 20 19 19 21 20 20 20 19 18 21 19 19 20.62 ms
NortonCS/2 43 29 26 24 27 24 27 26 27 25 26 27 27 27.54 ms
OpenDNS/1 21 21 34 48 29 19 20 18 20 19 79 18 20 28.15 ms
OpenDNS/2 22 22 37 60 19 30 18 19 19 19 18 19 21 24.85 ms
OracleDyn/1 39 29 27 24 25 27 25 23 29 30 25 30 28 27.77 ms
OracleDyn/2 40 31 28 27 27 27 28 32 29 26 27 28 28 29.08 ms
Quad9/1 21 20 21 19 21 20 20 19 18 19 20 19 19 19.69 ms
Quad9/2 18 22 19 24 19 20 21 21 19 21 19 20 20 20.23 ms
SafeDNS/1 137 136 146 163 135 135 146 137 134 132 135 136 176 142.15 ms
SafeDNS/2 136 135 134 136 136 135 137 136 135 135 135 135 135 135.38 ms
UncensoredDNS/1 * * * * * * * * * * * * * 999 13-to
UncensoredDNS/2 * * * * * * * * * * * * * 999 13-to
Verisign/1 33 28 29 27 28 27 27 27 27 27 28 27 25 27.69 ms
Verisign/2 21 18 19 19 14 18 18 19 18 20 21 20 20 18.85 ms
Yandex/1 203 210 202 197 192 201 206 204 623 199 202 198 185 232.46 ms
Yandex/2 194 187 189 190 195 207 188 214 209 186 206 202 187 196.46 ms

RESULTS SORTED BY MEDIAN RESPONSE TIME (dnstest.sh.sorted.log):

Provider t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 Median ms
--------------- --- --- --- --- --- --- --- --- --- --- --- --- --- ---------
pihole-FTL 1 1 1 1 1 1 1 1 1 1 1 1 1 1.00 ms
Level3/2 19 17 16 18 19 18 17 21 17 20 21 16 20 18.38 ms
Level3/1 21 18 18 18 20 17 18 18 17 19 18 20 20 18.62 ms
DNSFilter/1 19 17 18 19 19 20 18 17 19 20 20 20 19 18.85 ms
Verisign/2 21 18 19 19 14 18 18 19 18 20 21 20 20 18.85 ms
NextDNS/1 20 18 19 21 19 20 19 21 18 21 20 20 19 19.62 ms
Quad9/1 21 20 21 19 21 20 20 19 18 19 20 19 19 19.69 ms
Quad9/2 18 22 19 24 19 20 21 21 19 21 19 20 20 20.23 ms
ControlD/2 21 21 19 20 22 21 19 22 20 21 20 20 19 20.38 ms
DNSFilter/2 21 22 21 18 19 20 20 22 21 22 21 19 20 20.46 ms
NortonCS/1 33 20 19 19 21 20 20 20 19 18 21 19 19 20.62 ms
Neustar/2 18 20 19 38 21 20 21 18 19 19 19 19 21 20.92 ms
Google/1 20 20 18 29 23 19 18 19 18 17 55 17 19 22.46 ms
NextDNS/2 54 21 19 20 14 20 21 22 20 21 21 21 20 22.62 ms
Google/2 17 21 26 61 23 19 18 18 20 21 18 19 21 23.23 ms
OpenDNS/2 22 22 37 60 19 30 18 19 19 19 18 19 21 24.85 ms
NortonCS/2 43 29 26 24 27 24 27 26 27 25 26 27 27 27.54 ms
Verisign/1 33 28 29 27 28 27 27 27 27 27 28 27 25 27.69 ms
OracleDyn/1 39 29 27 24 25 27 25 23 29 30 25 30 28 27.77 ms
OpenDNS/1 21 21 34 48 29 19 20 18 20 19 79 18 20 28.15 ms
OracleDyn/2 40 31 28 27 27 27 28 32 29 26 27 28 28 29.08 ms
Neustar/1 61 27 28 24 28 25 26 27 27 28 28 27 26 29.38 ms
Comodo/2 30 25 30 30 30 31 31 30 30 30 30 31 33 30.08 ms
nameserver/2 50 69 52 29 30 22 21 20 21 19 49 19 22 32.54 ms
nameserver/1 49 21 64 82 79 20 19 19 20 19 74 20 19 38.85 ms
ControlD/1 24 20 35 22 32 21 21 61 21 26 182 21 21 39.00 ms
Comodo/1 30 29 31 30 32 30 32 31 30 30 149 28 31 39.46 ms
Cloudflare/2 49 48 49 49 46 44 49 48 48 49 45 49 46 47.62 ms
Cloudflare/1 50 47 49 45 48 48 46 48 48 50 48 50 45 47.85 ms
CleanBrowsing/2 57 55 56 55 55 55 53 57 55 55 56 56 55 55.38 ms
AdGuard/2 56 55 56 57 58 58 58 56 57 57 58 58 56 56.92 ms
AdGuard/1 106 56 84 56 55 57 55 56 58 58 202 56 58 73.62 ms
AlternateDNS/1 76 76 75 76 76 76 76 75 78 74 77 75 76 75.85 ms
AlternateDNS/2 76 76 80 76 76 77 72 73 77 78 78 76 76 76.23 ms
CleanBrowsing/1 97 81 79 81 80 80 82 83 79 84 81 80 83 82.31 ms
SafeDNS/2 136 135 134 136 136 135 137 136 135 135 135 135 135 135.38 ms
SafeDNS/1 137 136 146 163 135 135 146 137 134 132 135 136 176 142.15 ms
DNS.Watch/1 162 167 164 162 163 176 162 166 165 167 183 175 165 167.46 ms
Yandex/2 194 187 189 190 195 207 188 214 209 186 206 202 187 196.46 ms
Yandex/1 203 210 202 197 192 201 206 204 623 199 202 198 185 232.46 ms
Freenom/2 412 191 311 507 288 195 195 205 301 235 614 724 194 336.31 ms
DNS.Watch/2 159 160 165 166 164 182 167 162 * 162 170 161 166 999 1-to
Freenom/1 399 194 360 264 286 193 196 556 * 205 620 258 195 999 1-to
UncensoredDNS/1 * * * * * * * * * * * * * 999 13-to
UncensoredDNS/2 * * * * * * * * * * * * * 999 13-to

Then run `bash ./dnstest-2.sh`
Loading