23
Client side debugging Lowering DNS resolver support costs Petr Špaček [email protected] 2019-05-10

Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • [email protected] • 2019-05-10

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Client side debuggingLowering DNS resolver support costs

Petr Špaček • [email protected] • 2019-05-10

Page 2: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Motivation

Unable to connect

Firefox can’t establish a connection to the server attest.

The site could be temporarily unavailable or toobusy. Try again in a few moments.

If you are unable to load any pages, check yourcomputer’s network connection.

If your computer or network is protected by afirewall or proxy, make sure that Firefox ispermitted to access the Web.

Try Again

1

234

5

6

7

89 0

Page 3: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Motivation – support for Turris routers

1

234

5

6

7

89 0

Page 4: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Have you tried turning it offand back on again?

NOTIFICATIONS

DNSRouter Turris uses its own DNS resolver with DNSSEC support. It is capable of working

independently or it can forward your DNS queries your internet service provider's DNS

resolver.

Connection testHere you can test your internet connection. This test is also useful when you need to check

that your DNS resolving works as expected. Remember to click on the Save button if you

changed your forwarder setting.

Test type Status

DNS

DNSSEC

Use forwarding

DNS Forwarder

Disable DNSSEC

Enable DHCP clients in DNS

Use provider's DNS resolver

Discard changes

Save

Test connection

http://192.168.3.1/foris/config/main/dns/

5/7/19, 2:39 PM

NOTIFICATIONS

DNSRouter Turris uses its own DNS resolver with DNSSEC support. It is capable of working

independently or it can forward your DNS queries your internet service provider's DNS

resolver.

Connection testHere you can test your internet connection. This test is also useful when you need to check

that your DNS resolving works as expected. Remember to click on the Save button if you

changed your forwarder setting.

Test type Status

DNS

DNSSEC

Use forwarding

DNS Forwarder

Disable DNSSEC

Enable DHCP clients in DNS

Use provider's DNS resolver

Discard changes

Save

Test connection

http://192.168.3.1/foris/config/main/dns/

5/7/19, 2:39 PM

Page 5: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

It still doesn’t work ...

● PEBKAC – www.google.cpm

● Client software – DoH!

● Network client – resolver

● Resolver – configuration

● Resolver – software bug

● Network resolver – resolver (forwarding)

● Network resolver – authoritative server

● Authoritative server

Page 6: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

With automation (hopefully)

● PEBKAC – www.google.cpm

● Client software – DoH!

● Network client – resolver

● Resolver – configuration

● Resolver – software bug

● Network resolver – resolver (forwarding)

● Network resolver – authoritative server

● Authoritative server

Page 7: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Automating diagnostics

● Inspiration – RFC 8027

● DNSSEC Roadblock Avoidance● Taken couple steps further

● Idea – Auth server with static data

● Direct IP query – network test

● Forwarder – resolution chain

● Local resolver – local configuration

Page 8: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Implementation

● 3 DNS zones with constant data

● test.knot-resolver.cz● nsec.test.knot-resolver.cz● nsec3.test.knot-resolver.cz

● Hosted on CZ anycast

● Checker in Python

● https://gitlab.labs.nic.cz/knot/deckard/● tools/network_check.py● tools/forwarder_check.py

Page 9: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Test zone contenttest.knot-resolver.cz. 3600 TXT "Davku ve me o pln uvitani ..."

weird-type.test.knot-resolver.cz. TYPE20025 \# 4 DEADBEEF

unsigned.nsec3.test.knot-resolver.cz.NS blackhole-1.iana.org.

*.wild.nsec3.test.knot-resolver.cz. A 217.31.192.130

*.wildc.nsec3.test.knot-resolver.cz. CNAME target.wild.nsec3.test. ...

knot-resolver.cz.

Page 10: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

tools/network_check.py

● Direct query – network hijack?

a.ns.nic.cz

$ dig @192.0.2.1 . NS

Page 11: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

tools/forwarder_check.py

● Asking forwarders from DHCP

● Resolution chain?

a.ns.nic.czforwarder

???

Page 12: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

tools/forwarder_check.py

● Asking resolver on the router

● Local config?

a.ns.nic.czforwarder

???

Page 13: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Forwarder checks● delegation_from_nsec3_to_unsigned_zone

● delegation_from_nsec_to_unsigned_zone

● negative_nsec3_answers

● negative_nsec_answers

● nonexistent_delegation_from_nsec

● nonexistent_delegation_from_nsec3

● nonexistent_type_nsec

● nonexistent_type_nsec3

Page 14: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Forwarder checks● returns_RRSIG

● supports_CD

● supports_DNSKEY

● supports_DO

● supports_DS

● supports_EDNS0

● supports_simple_answers

● unknown_rrtype

● zone_version

Page 15: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

CLI$ python3 -m pytest -vv forwarder_check.py --forwarder 172.20.20.53

============================= test session starts ===========...collecting ... collected 33 items

forwarder_check.py::test_zone_version[172.20.20.53] PASSEDforwarder_check.py::test_supports_simple_answers[172.20.20.53-True] PASSEDforwarder_check.py::test_supports_simple_answers[172.20.20.53-False] PASSEDforwarder_check.py::test_supports_EDNS0[172.20.20.53-True] PASSEDforwarder_check.py::test_supports_EDNS0[172.20.20.53-False] PASSEDforwarder_check.py::test_supports_DO[172.20.20.53-True] PASSEDforwarder_check.py::test_supports_DO[172.20.20.53-False] PASSEDforwarder_check.py::test_supports_CD[172.20.20.53-True] PASSEDforwarder_check.py::test_supports_CD[172.20.20.53-False] PASSEDforwarder_check.py::test_returns_RRSIG[172.20.20.53-True] PASSEDforwarder_check.py::test_returns_RRSIG[172.20.20.53-False] PASSED...forwarder_check.py::test_nonexistent_type_nsec3[172.20.20.53-False] PASSEDforwarder_check.py::test_nonexistent_type_nsec[172.20.20.53-True] PASSEDforwarder_check.py::test_nonexistent_type_nsec[172.20.20.53-False] PASSED

========================== 33 passed in 0.28 seconds ================

Page 16: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

CLI$ python3 -m pytest -vv forwarder_check.py --forwarder 217.31.204.130

forwarder_check.py::test_supports_simple_answers[217.31.204.130-True] FAILED

______________ test_supports_simple_answers[217.31.204.130-False] ___________forwarder = IPv4Address('217.31.204.130'), tcp = Falseexp = 'NOERROR', got = 'SERVFAIL'

Got answer:rcode SERVFAILflags QR RD RA;QUESTIONgood-a.test.knot-resolver.cz. IN A;ANSWER;AUTHORITY;ADDITIONAL

Matching: {'rcode', 'qtype', 'flags', 'opcode', 'qname', 'answer'}rcode NOERRORflags QR RD RA;QUESTIONgood-a.test.knot-resolver.cz. IN A;ANSWERgood-a.test.knot-resolver.cz. 3600 IN A 217.31.192.130;AUTHORITY;ADDITIONAL

Page 17: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Output for scripts (py.test)<testsuite errors="0" failures="25" name="pytest" skipped="0" tests="33" time="0.795">−

<testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="26" name="test_zone_version[217.31.204.130]"time="0.034">

<failure message="pydnstest.matchpart.DataMismatch: expected "_version.test.knot-resolver.cz. 3600 IN TXT "1"" got """>+</failure><system-out>+ </system-out>

</testcase><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="46"name="test_supports_simple_answers[217.31.204.130-True]" time="0.009">

+

</testcase><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="46"name="test_supports_simple_answers[217.31.204.130-False]" time="0.003">

+

</testcase><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="58"name="test_supports_EDNS0[217.31.204.130-True]" time="0.005"/><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="58"name="test_supports_EDNS0[217.31.204.130-False]" time="0.003"/><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="68" name="test_supports_DO[217.31.204.130-True]" time="0.014"/><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="68" name="test_supports_DO[217.31.204.130-False]" time="0.003"/><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="79" name="test_supports_CD[217.31.204.130-True]" time="0.005"/><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="79" name="test_supports_CD[217.31.204.130-False]" time="0.005"/><testcase classname="tools.forwarder_check" file="tools/forwarder_check.py" line="103"name="test_returns_RRSIG[217.31.204.130-True]" time="0.005">

+

Page 18: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Web UI for expert users

Page 19: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Web UI for expert users

Page 20: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Difficulties – level 1

● Resolvers answer differently

● NOERROR AUTHORITY● AA● ...● Ignore differences => pydnstest/matchpart.py

● UDP vs. TCP

● IPv4 vs. IPv6

● Many tests => parallelization

Page 21: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Difficulties – level 2

● Packet size >= ?

● Probabilistic issues

● Some query types (TYPE???)

● Some query names

● ...

Page 22: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Next step

NOTIFICATIONS

DNSRouter Turris uses its own DNS resolver with DNSSEC support. It is capable of working

independently or it can forward your DNS queries your internet service provider's DNS

resolver.

Connection testHere you can test your internet connection. This test is also useful when you need to check

that your DNS resolving works as expected. Remember to click on the Save button if you

changed your forwarder setting.

Test type Status

DNS

DNSSEC

Use forwarding

DNS Forwarder

Disable DNSSEC

Enable DHCP clients in DNS

(hint: your network does not work properly with forwarding)

Use provider's DNS resolver

Discard changes

Save

Test connection

http://192.168.3.1/foris/config/main/dns/

5/7/19, 4:32 PM

Page 23: Client side debugging · 2019-05-13 · Client side debugging Lowering DNS resolver support costs Petr Špaček • petr.spacek@nic.cz • 2019-05-10

Try it, comment ...

● git clone https://gitlab.labs.nic.cz/knot/deckard/

● $ pip install --user -r deckard/requirements.txt

● $ cd deckard/tools

● $ py.test network_check.py --html=report.html

● $ py.test forwarder_check.py--forwarder=1.1.1.1 --html=report.html

● https://gitlab.labs.nic.cz/knot/deckard/issues/new