DNSCrypt



  • Здравствуйте. На днях решил заняться DNSCrypt и столкнулся с множеством неприятностей, котороые вроде как преодолел, поэтому решил написать свои действия, возможно кому то поможет, а может кто-то укажет на ошибки. Испытано было как на winserv2016(в качестве dns) так и на pf'e. Было использовано несколько источников:
    https://forum.pfsense.org/index.php?topic=111895.30
    https://docs.google.com/document/d/1BgvDY8haswQd2BgBP8ctEriy9QRX1CikdbaFqr7yaOQ/edit
    https://github.com/jedisct1/dnscrypt-proxy/wiki/Configuration
    https://dnscrypt.org/#dnscrypt-server
    https://dnscrypt.is/
    http://rutracker.wiki/Пошаговая_инструкция_по_установке_DNSCrypt_в_Windows
    https://github.com/jedisct1/dnscrypt-server-docker/blob/master/README.md
    https://simplednscrypt.org/
    https://ramirosalas.com/2015/07/installing-dnscrypt-in-pfssense/

    Приступим:

    /etc/rc.conf_mount_rw
    nano /usr/local/etc/pkg/repos/pfSense.conf and /usr/local/etc/pkg/repos/FreeBSD.conf
    ```{ enabled: no } -> { enabled: yes }
    

    nano /etc/pkg/FreeBSD.conf

    pkg install dnscrypt-proxy
    nano /usr/local/etc/pkg/repos/pfSense.conf and /usr/local/etc/pkg/repos/FreeBSD.conf

    nano /etc/pkg/FreeBSD.conf  enabled: yes

    nano /usr/local/etc/rc.d/dnscrypt-proxy.sh

    #!/bin/sh

    $FreeBSD: head/dns/dnscrypt-proxy/files/dnscrypt-proxy.in 301978 2012-08-03 23:19:19Z brian $

    PROVIDE: dnscrypt-proxy

    REQUIRE: SERVERS cleanvar

    KEYWORD: shutdown

    BEFORE: named

    Add the following lines to /etc/rc.conf to enable dnscrypt-proxy:

    dnscrypt_proxy_enable="YES":  Set to NO by default.

    #                              Set it to YES to enable dnscrypt-proxy.

    To redirect a local resolver through dnscrypt-proxy, point it at 127.0.0.2

    and add the following to rc.conf:

    ifconfig_lo0_alias0="inet 127.0.0.2 netmask 0xffffffff"

    dnscrypt_proxy_flags='-a 127.0.0.2'

    create rc.conf file

    echo 'dnscrypt_proxy_enable="YES"' > /etc/rc.conf
    echo 'dnscrypt_proxy_flags="-a 127.0.0.1:54"' >> /etc/rc.conf

    . /etc/rc.subr

    name=dnscrypt_proxy
    rcvar=dnscrypt_proxy_enable

    stop_cmd="dnscrypt_proxy_stop"

    load_rc_config dnscrypt_proxy

    : {dnscrypt_proxy_enable:="NO"}

    command=/usr/local/sbin/dnscrypt-proxy
    procname=/usr/local/sbin/dnscrypt-proxy
    user=_dnscrypt-proxy
    localaddress=127.0.0.1:54
    pidfile=/var/run/dnscrypt-proxy.pid
    resolveraddress=93.95.228.87
    providername=2.dnscrypt-cert.ns0.dnscrypt.is
    providerkey=EE41:6A83:451C:218F:37B2:B736:78C4:999F:7DE6:89D1:31D2:7866:7C8E:A8BB:1C95:B402
    logdir=/var/log/dnscrypt-proxy.log

    command_args="-d -u  ${user} -a ${localaddress} -r ${resolveraddress} -N ${providername} -k ${providerkey} -p ${pidfile} -l ${logdir}"

    dnscrypt_proxy_stop() {
            kill -KILL cat ${pidfile} 2> /dev/null && echo "Killed ${name}."
            }

    run_rc_command "$1"

    
    

    chmod +x /usr/local/etc/rc.d/dnscrypt-proxy.sh

    /usr/local/etc/rc.d/dnscrypt-proxy.sh start

    
    

    dig -4 slashdot.org @127.0.0.1 -p 54

    если ответ получился примерно такой:
    
    

    /root: dig -4 slashdot.org @127.0.0.1 -p 54

    ; <<>> DiG 9.11.1 <<>> -4 slashdot.org @127.0.0.1 -p 54
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63224
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;slashdot.org.                  IN      A

    ;; ANSWER SECTION:
    slashdot.org.          11      IN      A      216.34.181.45

    ;; AUTHORITY SECTION:
    slashdot.org.          85769  IN      NS      ns2.dnsmadeeasy.com.
    slashdot.org.          85769  IN      NS      ns1.dnsmadeeasy.com.
    slashdot.org.          85769  IN      NS      ns3.dnsmadeeasy.com.
    slashdot.org.          85769  IN      NS      ns4.dnsmadeeasy.com.
    slashdot.org.          85769  IN      NS      ns0.dnsmadeeasy.com.

    ;; Query time: 97 msec
    ;; SERVER: 127.0.0.1#54(127.0.0.1)
    ;; WHEN: Sat Jul 01 12:49:38 MSK 2017
    ;; MSG SIZE  rcvd: 162

    
    то пока все успешно :)
    
    Далее настравиаем **DNS Resolver** (настраивал сперва на Forwarder, но как же мы без pfblockerng, если кому то будет нужно то напишу вариант и для Forwarder)
    Services/DNS Resolver/General Settings
    Ставим галку Enable Forwarding Mode и в Custom options добавляем:
    

    do-not-query-localhost: no
    forward-zone:
    name: "."
            forward-addr: 127.0.0.1@54

    Все. После этого нужно в клиенте указать в качестве dns адрес pf'a и можно проверять:
    https://ipleak.net/
    http://en.conn.internet.nl/connection/#
    https://dnssec.vs.uni-due.de/


  • Доброе. Спасибо. Плюс в карму )

    P.s. Можно еще принудительно заворачивать весь dns-трафик клиента на pf с помощью правила port forwrd на LAN.



  • Спасибо.

    если кому то будет нужно то напишу вариант и для Forwarder

    Буду весьма признателен.



  • Настравиаем DNS Forwarder
    Services/DNS Forwarder/General Settings
    Ставим галку Query DNS servers sequentially и в Custom options добавляем:
    strict-order server=127.0.0.1#54
    если будет ругаться на синтаксис(у меня ругается) идем Diagnostics/Edit File
    /cf/conf/config.xml - > Load
    Делаем бейкап на всякий, пролистываем в самый низ и находим <dnsmasq>Вписываем:
    <custom_options>strict-order server=127.0.0.1#54</custom_options>
    Save
    Далее в сервисах перезапускаем dnsmasq и готово.</dnsmasq>



  • Спасибо!



  • Мерси!



  • Попробовал сделать через конфиг /usr/local/etc/dnscrypt-proxy.conf

    ProviderName    2.dnscrypt-cert.ns0.dnscrypt.is
    ProviderKey     EE41:6A83:451C:218F:37B2:B736:78C4:999F:7DE6:89D1:31D2:7866:7C8E:A8BB:1C95:B402
    ResolverAddress 93.95.228.87:443
    Daemonize yes
    PidFile /var/run/dnscrypt-proxy.pid
    User _dnscrypt-proxy
    LocalAddress 127.0.0.1:54
    LocalCache on
    EphemeralKeys off
    Forward domains:"ваш домен" to:"ваш днс"
    BlockIPv6 no
    

    Кажется так лучше работает