DNSCrypt DNSCrypt-proxy - теория и практика

Discussion in 'Безопасность и Анонимность' started by altblitz, 22 Jul 2017.

  1. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    Вводное
    [content]google://dnscrypt-proxy[/content]

    Практическое использование

    [content]google://dnscrypt-proxy+clients[/content]

    Подводные камни и рифы

    [content]Achat Forum (c). From members to members[/content]

    Анонимность и скрытие своего неприкосновенного Я - каждый преследует эту цель в эпоху Big Data, AI и social networking.
    DNSCrypt-proxy - суть must have в арсенале каждого уважающего себя и своих окружающих ачатовца.

    Данную тему, Блиц предлагает развивать всем коммьюнити Ачата - collective mind-storming,
    обсуждая идеи DNSCrypt реализации на практике,
    находя (неизбежные) баги и устраняя их.
     
  2. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    BUG
    Kernel boot race DNSCrypt systemd-networked systemd-resolved dnscrypt-proxy.service

    Рассмотрим тривиальный запуск Linux kernel systemd based.

    Systemd запускает первым systemd-networked сервис. Данный сервис сканирует сетевые девайсы и решает адресацию компьютера/ноута с тех данных, предоставленных router ethernet.

    Code:
    user@achat ~ %systemctl status systemd-networkd
    ● systemd-networkd.service - Network Service
       Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2017-07-20 18:00:10 CEST; 24s ago
         Docs: man:systemd-networkd.service(8)
    Main PID: 535 (systemd-network)
       Status: "Processing requests..."
        Tasks: 1 (limit: 4915)
       CGroup: /system.slice/systemd-networkd.service
               └─535 /usr/lib/systemd/systemd-networkd
    
    Jul 20 18:00:10 achat systemd[1]: Starting Network Service...
    Jul 20 18:00:10 achat systemd-networkd[535]: Enumeration completed
    Jul 20 18:00:10 achat systemd-networkd[535]: eno1: Renamed to eth0
    Jul 20 18:00:10 achat systemd[1]: Started Network Service.
    Jul 20 18:00:10 achat systemd-networkd[535]: eth0: Renamed to eno1
    Jul 20 18:00:10 achat systemd-networkd[535]: eno1: IPv6 successfully enabled
    Jul 20 18:00:16 achat systemd-networkd[535]: eno1: Gained carrier
    Jul 20 18:00:17 achat systemd-networkd[535]: eno1: Gained IPv6LL
    Jul 20 18:00:21 achat systemd-networkd[535]: eno1: DHCPv4 address 192.168.1.3/24 via 192.168.1.1
    Jul 20 18:00:24 achat systemd-networkd[535]: eno1: Configured
    
    Нам сейчас интересен лишь этот момент - запомнили.
    Jul 20 18:00:17 achat systemd-networkd[535]: eno1: Gained IPv6LL

    Параллельно, запускается systemd-resolved - сервис, что выбирает DNS серверы для обращения к https:// gopher:// irc://.

    Code:
    user@achat ~ % sudo systemctl status systemd-resolved
    ● systemd-resolved.service - Network Name Resolution
       Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2017-07-20 18:00:10 CEST; 26s ago
         Docs: man:systemd-resolved.service(8)
               http://www.freedesktop.org/wiki/Software/systemd/resolved
               http://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
               http://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
    Main PID: 549 (systemd-resolve)
       Status: "Processing requests..."
        Tasks: 1 (limit: 4915)
       CGroup: /system.slice/systemd-resolved.service
               └─549 /usr/lib/systemd/systemd-resolved
    
    Jul 20 18:00:10 achat systemd[1]: Starting Network Name Resolution...
    Jul 20 18:00:10 achat systemd-resolved[549]: Positive Trust Anchors:
    Jul 20 18:00:10 achat systemd-resolved[549]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
    Jul 20 18:00:10 achat systemd-resolved[549]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
    Jul 20 18:00:10 achat systemd-resolved[549]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa
    Jul 20 18:00:10 achat systemd-resolved[549]: Using system hostname 'inode'.
    Jul 20 18:00:10 achat systemd[1]: Started Network Name Resolution.
    Jul 20 18:00:17 achat systemd-resolved[549]: Switching to system DNS server 127.0.0.1.
    Jul 20 18:00:21 achat systemd-resolved[549]: Switching to DNS server 127.0.0.1 for interface eno1.
    Jul 20 18:00:22 achat systemd-resolved[549]: Switching to DNS server 192.168.1.1 for interface eno1.
    
    Нам сейчас интересны лишь эти моменты - запомнили.
    Jul 20 18:00:21 achat systemd-resolved[549]: Switching to DNS server 127.0.0.1 for interface eno1.
    Jul 20 18:00:22 achat systemd-resolved[549]: Switching to DNS server 192.168.1.1 for interface eno1.

    И теперь - самое главное. Анонимности - нет.

    DNSCrypt-proxy systemd сервис не успевает вовремя получить ответ от IPv6 DNSCrypt сервера.
    Сервис systemd-resolved переключается на работу с сервером DNS провайдера.
    Провайдер - заносит в логи все до единого соединяние и соединения.

    Баг этот - уже исправил у себя. Костылями и изолентой.
    Ситуация, которую не предусмотрел Поттеринг, а Блиц нашёл.

    Jul 20 18:00:22 achat systemd-resolved[549]: Switching to DNS server 192.168.1.1 for interface eno1
    Jul 20 18:00:25 achat dnscrypt-proxy[548]: [ERROR] Unable to retrieve server certificates


    Code:
    user@achat ~ % sudo systemctl status dnscrypt-proxy
    ● dnscrypt-proxy.service - DNSCrypt client proxy
       Loaded: loaded (/usr/lib/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: disabled)
       Active: active (running) since Thu 2017-07-20 18:00:10 CEST; 32s ago
         Docs: man:dnscrypt-proxy(8)
    Main PID: 548 (dnscrypt-proxy)
        Tasks: 1 (limit: 4915)
       CGroup: /system.slice/dnscrypt-proxy.service
               └─548 /usr/bin/dnscrypt-proxy /etc/dnscrypt-proxy.conf
    
    Jul 20 18:00:10 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:10 2017 [INFO] Loaded plugin: [A basic DNS cache]
    Jul 20 18:00:10 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:10 2017 [INFO] Generating a new session key pair
    Jul 20 18:00:10 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:10 2017 [INFO] Done
    Jul 20 18:00:25 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:25 2017 [ERROR] Unable to retrieve server certificates
    Jul 20 18:00:26 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:26 2017 [INFO] Refetching server certificates
    Jul 20 18:00:26 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:26 2017 [INFO] Server certificate with serial #1500559202 received
    Jul 20 18:00:26 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:26 2017 [INFO] This certificate is valid
    Jul 20 18:00:26 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:26 2017 [INFO] Chosen certificate #1500559202 is valid from [2017-07-20] to [2017-07-
    Jul 20 18:00:26 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:26 2017 [INFO] Server key fingerprint is 5F0B:0E8B:E7CA:0FF0:1F5B:058A:D750:4A74:98EC
    Jul 20 18:00:26 achat dnscrypt-proxy[548]: Thu Jul 20 18:00:26 2017 [NOTICE] Proxying from 127.0.0.1:53 to [2001:19f0:5001:30a:5400:ff:fe58:7140]
    
     
    #2 altblitz, 22 Jul 2017
    Last edited: 22 Jul 2017
    nynenado likes this.