{ "nodes": [{ "uri": "https:\/\/log.exos.ninja\/3s", "content": "# Configurando DNSCrypt con cach\u00e9 (con pdnsd) en Archlinux\r\n## Con yapa anti ads \r\n\r\n> **Nota**: El manual es para [ArchLinux](http:\/\/log.exodica.com.ar\/?q=archlinux), pero no tendr\u00eda que ser dif\u00edcil de aplicar en otras distribuciones GNU\/Linux, sobretodo si usan systemd.\r\n\r\nComo muchos saben el protocolo DNS ha sufrido varios [problemas de seguridad](https:\/\/en.wikipedia.org\/wiki\/Domain_Name_System#Security_issues), aparte de que al ir en claro por la red, tanto el ISP como cualquiera que esp\u00ede la comunicaci\u00f3n sabr\u00e1 que dominios consultamos, las formas de que esto nos perjudique son much\u00edsimas, desde extracci\u00f3n de informaci\u00f3n hasta [cache poisoning](https:\/\/en.wikipedia.org\/wiki\/DNS_spoofing) y dem\u00e1s. \r\n\r\nUna soluci\u00f3n a esto es [DNSCrypt](https:\/\/dnscrypt.org\/), el cu\u00e1l consultar\u00e1 a trav\u00e9s de HTTPS, estando toda esta comunicaci\u00f3n cifrada de origen a destino, pero esto tiene un defecto, DNS fue hecho para ser r\u00e1pido, por eso el uso de UDP, esto es por TCP, y aparte usa cifrado, as\u00ed que podemos deducir que termina siendo lento.\r\nPara resolver este problema, vamos a usar una cach\u00e9 de DNS local, en mi caso opt\u00e9 por [pdnsd](http:\/\/members.home.nl\/p.a.rombouts\/pdnsd\/), ya que me gusta mucho su configuraci\u00f3n.\r\n\r\n## Instalaci\u00f3n\r\n\r\n # pacman -S dnscrypt-proxy pdnsd\r\n\r\n## Configurando dnscrypt-proxy\r\n\r\nUna vez instalado estos dos, empezaremos configurando dnscrypt-proxy, para esto la wiki de Archlinux recomienda editar dnscrypt-proxy.socket, pero como queremos una mejor configuraci\u00f3n, vamos a optar por crear el archivo ```\/etc\/conf.d\/dnscrypt-config```, ac\u00e1 pueden copiar esta configuraci\u00f3n:\r\n\r\n DNSCRYPT_LOCALIP=127.0.0.2\r\n DNSCRYPT_LOCALPORT=53\r\n DNSCRYPT_USER=nobody\r\n DNSCRYPT_PROVIDER_NAME=2.dnscrypt-cert.fvz-rec-us-mia-01.dnsrec.meo.ws \r\n DNSCRYPT_PROVIDER_KEY=B864:FA77:A58F:F757:6B53:1086:BDF0:6B2F:7D33:1D09:E561:236E:A9ED:557F:F6C3:B7F1\r\n DNSCRYPT_RESOLVERIP=173.44.61.182\r\n DNSCRYPT_RESOLVERPORT=443\r\n\r\nEn este caso estoy usando el server de DNSCrypt ```2.dnscrypt-cert.fvz-rec-us-mia-01.dnsrec.meo.ws``` que se encuentra en miami, pero pueden [elegir entre los muchos que hay](https:\/\/github.com\/jedisct1\/dnscrypt-proxy\/blob\/master\/dnscrypt-resolvers.csv), o montar el suyo con [dnscrypt-wrapper](https:\/\/github.com\/Cofyc\/dnscrypt-wrapper).\r\n\r\nEn este caso estaremos escuchando en el puerto ```53``` de la ip local ```127.0.0.2```, esto es para no pisar la de ```localhost```, si cambian de servidor, no se olviden de pegar la llave.\r\n\r\nUna vez que tengamos esta configuraci\u00f3n creada, damos a iniciar el servicio:\r\n\r\n # systemctl stop # Por las dudas\r\n # systemctl start dnscrypt-proxy\r\n # systemctl enable dnscrypt-proxy # Para que inicie autom\u00e1ticamente en el proximo boot\r\n\r\nSi todo va bien, ya tendr\u00edamos que tener esto andando. Para probarlo podemos ejecutar:\r\n\r\n $ nslooknslookup log.exodica.com.ar 127.0.0.2\r\n\r\nSi esto funciona, ya tenemos nuestro proxy de DNSCrypt corriendo, pero todav\u00eda falta el cache....\r\n\r\n## Configurando pdnsd\r\n\r\nEditamos el archivo ```\/etc\/pdnsd.conf``` y copiamos lo siguiente (si hay algo, reemplazarlo):\r\n\r\n global {\r\n perm_cache = 1024;\r\n cache_dir = \"\/var\/cache\/pdnsd\";\r\n run_as = \"pdnsd\";\r\n server_ip = 127.0.0.1;\r\n status_ctl = on;\r\n query_method = udp_tcp;\r\n min_ttl = 15m; # Retain cached entries at least 15 minutes.\r\n max_ttl = 1w; # One week.\r\n timeout = 30; # Global timeout option (10 seconds).\r\n neg_domain_pol = on;\r\n udpbufsize = 1024; # Upper limit on the size of UDP messages.\r\n }\r\n \r\n server {\r\n label = \"dnscrypt-proxy\";\r\n ip = 127.0.0.2;\r\n port = 53;\r\n timeout = 30;\r\n proxy_only = on;\r\n # If is OpenDNS, reject their shit\r\n reject = 208.69.32.0\/24,\r\n 208.69.34.0\/24,\r\n 208.67.219.0\/24;\r\n }\r\n \r\n source {\r\n owner = localhost;\r\n file = \"\/etc\/hosts\";\r\n }\r\n \r\nAhora configuramos al pdnsd para que escuche en ```127.0.0.1:53``` y use de \u00fanico server a nuestro dnscrypt-proxy, los rangos de ip rechazados son los que resuelve muchas veces [OpenDNS](https:\/\/www.opendns.com\/) cuando el dominio no existe y dem\u00e1s.\r\n\r\nPara probar que esto anda, lo iniciaremos y los testearemos:\r\n\r\n # systemctl stop pdnsd # Por si esta corriendo\r\n # systemctl start pdnsd\r\n # systemctl enable pdnsd\r\n\r\nUna vez que lo tenemos corriendo, lo probaremos como hicimos con el dnscrypt-proxy:\r\n\r\n $ nslookup log.exodica.com.ar 127.0.0.1\r\n\r\nSi esto funciona, es que est\u00e1 todo bien, ac\u00e1 pueden probar la utilidad del proxy, ya que es visible como la segunda consulta a un dominio es mucho mas r\u00e1pida.\r\n\r\n### Usando tmpfs para la cach\u00e9 de pdnsd\r\n\r\nEste es un paso opcional, pero es altamente recomendable, sobretodo si tienen un SSD y pretenden evitar accesos de escritura constante.\r\n\r\nComo hab\u00edamos definido el directorio de de cache en ```\/var\/cache\/pdnsd```, haremos lo siguiente:\r\n\r\n # systemctl stop pdnsd # Por si est\u00e1 prendido\r\n # rm -rf \/var\/cache\/pdnsd\/*\r\n\r\nUna vez que tenemos el demonio detenido y el directorio vac\u00edo, editaremos el archivo ```\/etc\/fstab``` y le agregaremos al final:\r\n\r\n tmpfs \/var\/cache\/pdnsd tmpfs nodev,nosuid,size=1G 0 0\r\n\r\nEl par\u00e1metro ```size=1G``` se puede reemplazar por el tama\u00f1o que deseen. Una vez hecho esto, haremos:\r\n\r\n # mount -a\r\n\r\nSi no tira error, ya podemos arrancar de nuevo el pdnsd\r\n\r\n # systemctl start pdnsd\r\n\r\n## Configurando resolv\r\n\r\nEn Archlinux por defecto se usa netctl para manejar la red, si este es el caso, el archivo ```\/etc\/resolv.conf``` ser\u00e1 escrito por este o por ```dhcpd```, si se usa una direcci\u00f3n est\u00e1tica, solo se debe cambiar el parametro de los DNS:\r\n\r\n DNS=('127.0.0.1')\r\n\r\nSi se usa dhcp, se deber\u00e1 editar el archivo ```\/etc\/dhcpcd.conf``` agregando el siguiente par\u00e1metro:\r\n\r\n nohook resolv.conf\r\n\r\nPara otras configuraciones se puede [ver la wiki de archlinux](https:\/\/wiki.archlinux.org\/index.php\/Resolv.conf#Preserve_DNS_settings).\r\n\r\nUna vez que recuperemos la edici\u00f3n manual de ```\/etc\/resolv.conf``` solo deberemos poner como \u00fanica linea:\r\n\r\n nameserver 127.0.0.1\r\n\r\nDe esta forma ya empezaremos a usar nuestro pdnsd como server de DNS.\r\n\r\n## Yapa, bloqueando ads\r\n\r\npdnsd tiene una opci\u00f3n que es para negar dominios espec\u00edficos, esta opci\u00f3n sumada a una [lista de dominios de redes de ads](http:\/\/esfriki.com\/wEP.md) es una interesante combinaci\u00f3n, ya que nos permitir\u00e1 bloquear publicidades y otras cosas directo por dominio. Para agregar dicha configuraci\u00f3n a pdnsd, pueden copiar directamente [estas lineas](http:\/\/esfriki.com\/wEQ.md) al final del archivo.\r\n\r\nEspero les sea \u00fatil.", "created": "2016-05-18 06:15:21"}] }