{"id":15659139,"url":"https://github.com/dimkr/dohli","last_synced_at":"2025-05-05T17:14:38.453Z","repository":{"id":57521757,"uuid":"247787324","full_name":"dimkr/dohli","owner":"dimkr","description":"Set up your own ad-blocking DoH server","archived":false,"fork":false,"pushed_at":"2020-08-01T10:36:05.000Z","size":224,"stargazers_count":22,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T22:32:30.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://dohli.herokuapp.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimkr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-16T18:20:16.000Z","updated_at":"2024-12-24T15:12:40.000Z","dependencies_parsed_at":"2022-08-26T20:23:50.819Z","dependency_job_id":null,"html_url":"https://github.com/dimkr/dohli","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fdohli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fdohli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fdohli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fdohli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimkr","download_url":"https://codeload.github.com/dimkr/dohli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252542068,"owners_count":21764907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T13:15:15.620Z","updated_at":"2025-05-05T17:14:38.435Z","avatar_url":"https://github.com/dimkr.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n     _       _     _ _ \n  __| | ___ | |__ | (_)\n / _` |/ _ \\| '_ \\| | |\n| (_| | (_) | | | | | |\n \\__,_|\\___/|_| |_|_|_|\n```\n\n[![Build Status](https://travis-ci.org/dimkr/dohli.svg?branch=master)](https://travis-ci.org/dimkr/dohli) [![Report Card](https://goreportcard.com/badge/github.com/dimkr/dohli)](https://goreportcard.com/report/github.com/dimkr/dohli) [![Documentation](https://img.shields.io/static/v1?color=brightgreen\u0026logo=go\u0026label=pkg.go.dev\u0026message=reference)](https://pkg.go.dev/github.com/dimkr/dohli) [![Maintainability](https://api.codeclimate.com/v1/badges/6dbd89625956c0c9b583/maintainability)](https://codeclimate.com/github/dimkr/dohli/maintainability) [![Coverage](https://api.codeclimate.com/v1/badges/6dbd89625956c0c9b583/test_coverage)](https://codeclimate.com/github/dimkr/dohli/test_coverage) [![Deploy](https://img.shields.io/static/v1?color=blue\u0026logo=heroku\u0026label=heroku\u0026message=deploy)](https://heroku.com/deploy)\n\n## Overview\n\ndohli (pronounced do-kh-li) is a simple and easy to deploy DNS-over-HTTPS (DoH) server that blocks ads and malicious sites.\n\nOne of the central points of critique against DoH, is the centralization of data: the big companies that power the internet-scale DoH servers used by default by applications like web browsers, are granted the privilege of unique access to browsing data that spans multiple sites or devices, risking the privacy and security of users.\n\nUser-owned DoH servers are a way to solve this problem. In addition, they provide an additional layer of privacy, by masking the DoH client address. Also, DoH servers like dohli, that use a random DNS server for each query, give each company a partial view of the user's browsing habits.\n\n## Implementation\n\ndohli is written in [Go](https://golang.org/).\n\nIt performs the actual resolving work using traditional DNS over UDP.\n\nIt uses [Redis](https://redis.io/) to cache DNS responses, and as a job queue.\n\nA worker container gets notified each time a new domain name is resolved, then checks whether or not this domain should be blocked, against [Steven Black's unified domain blacklist](https://github.com/StevenBlack/hosts), [the Energized Protection domain blacklist](https://github.com/EnergizedProtection/block) and [URLHaus](https://urlhaus.abuse.ch).\n\nIf yes, blocking is performed by inserting a cache entry that has no expiration time. Therefore, dohli needs some time for \"training\" and the client's DNS cache must expire, before ads are blocked.\n\n## CI/CD\n\nEvery day, dohli's [CI/CD pipeline](https://travis-ci.org/github/dimkr/dohli/builds) deploys the `master` branch to `https://dohli.herokuapp.com`, with an updated domain blacklist.\n\n## Usage\n\nFirst, deploy to Heroku: [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\nThen, append `/dns-query` to the web URL and configure your DoH client to use this as the DoH server.\n\nFor example, DoH clients that use the dohli instance deployed by CI/CD should use `https://dohli.herokuapp.com/dns-query`.\n\n![Android](https://github.com/dimkr/dohli/raw/master/static/android.png) ![Firefox](https://github.com/dimkr/dohli/raw/master/static/firefox.png)\n\n## Deployment from CLI\n\n```\nheroku create -s container --addons heroku-redis\nheroku redis:maxmemory $ADDON_NAME --policy allkeys-lru\ngit push heroku master\nheroku ps:scale web=1 worker=1\n```\n\n## Legal Information\n\ndohli is free and unencumbered software released under the terms of the MIT license; see COPYING for the license text.\n\nThe ASCII art logo at the top was made using [FIGlet](http://www.figlet.org/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimkr%2Fdohli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimkr%2Fdohli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimkr%2Fdohli/lists"}