{"id":13686590,"url":"https://github.com/yaleman/goatns","last_synced_at":"2025-10-06T21:42:04.270Z","repository":{"id":63171364,"uuid":"541450633","full_name":"yaleman/goatns","owner":"yaleman","description":"🐐-powered authoritative DNS server","archived":false,"fork":false,"pushed_at":"2024-05-17T20:36:13.000Z","size":15268,"stargazers_count":7,"open_issues_count":25,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-18T20:39:41.217Z","etag":null,"topics":["api","dns","goats","nameserver","oauth2-client","oauth2-resource-server","regret","rust","server","tokio"],"latest_commit_sha":null,"homepage":"https://goatns.dotgoat.net","language":"Rust","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/yaleman.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"yaleman","custom":["http://buymeacoffee.com/yaleman"]}},"created_at":"2022-09-26T07:00:50.000Z","updated_at":"2024-05-31T22:39:09.549Z","dependencies_parsed_at":"2023-12-13T03:53:21.874Z","dependency_job_id":"919b3842-a4cb-469c-a63f-acc54dadd3e9","html_url":"https://github.com/yaleman/goatns","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/yaleman%2Fgoatns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleman%2Fgoatns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleman%2Fgoatns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleman%2Fgoatns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yaleman","download_url":"https://codeload.github.com/yaleman/goatns/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221673777,"owners_count":16861703,"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":["api","dns","goats","nameserver","oauth2-client","oauth2-resource-server","regret","rust","server","tokio"],"created_at":"2024-08-02T15:00:35.685Z","updated_at":"2025-10-06T21:41:59.224Z","avatar_url":"https://github.com/yaleman.png","language":"Rust","funding_links":["https://github.com/sponsors/yaleman","http://buymeacoffee.com/yaleman"],"categories":["api"],"sub_categories":[],"readme":"# GoatNS\n\n![GoatNS Logo](./static_files/img/apple-touch-icon.png)\n\nYet another authoritative DNS name server. But with goat references.\n\n## Features\n\n- DNS over HTTPS (RFC8484) on `/dns-query`\n- Web API/UI for management\n  - OIDC Authentication to the Web UI\n  - Token auth for API endpoints\n\n## Configuration\n\nLook at `zones.json` and `goatns.example.json` for examples.\n\nThe configuration file's fields are best found here:\n\u003chttps://goatns.dotgoat.net/rustdoc/goatns/config/struct.ConfigFile.html\u003e. Note that the\n`ip_allow_list` field is a nested map.\n\n## Running in Docker\n\nThere's a docker container at `ghcr.io/yaleman/goatns:latest` and a docker-compose.yml file in the\nrepository if that's your thing.\n\n## Help?\n\nFound a bug, want to change something, the sky is falling?\n[Create an issue!](https://github.com/yaleman/goatns/issues/new).\n\nWondering how something works, need a chat, or are curious there's so many goat references?\n[Discussions are great for that](https://github.com/yaleman/goatns/discussions).\n\n## Built in Rust\n\nThanks to some great packages:\n\n- Networking features use [tokio](https://crates.io/crates/tokio)\n- DNS Packets are largely decoded/encoded with\n  [packed_struct](https://crates.io/crates/packed_struct)\n- HTTP things use:\n  - [tide](https://crates.io/crates/tide)\n  - [Askama](https://crates.io/crates/askama)\n  - [Bootstrap 5](https://getbootstrap.com)\n  - [Feather icons](https://feathericons.com)\n- Database - [sqlx](https://crates.io/crates/sqlx) for async SQLite goodness.\n- Logging - [flexi_logger](https://crates.io/crates/flexi_logger)\n\n## Rust Crate Documentation\n\nAuto-generated and available here:\n[https://yaleman.github.io/goatns/rustdoc/goatns](https://yaleman.github.io/goatns/rustdoc/goatns/)\n\n## Testing\n\nRust tests are run using cargo.\n\n```shell\ncargo test\n```\n\nA handy load testing tool is [dnsblast](https://github.com/jedisct1/dnsblast). This'll run 50,000\n\"valid\" queries, 1500 packets per second, to port 15353:\n\n```shell\n./dnsblast 127.0.0.1 50000 1500 15353\n```\n\nOr if you want to fuzz the server and test that it doesn't blow up:\n\n```shell\n./dnsblast fuzz 127.0.0.1 50000 1500 15353\n```\n\n## Supported request/record types\n\nThis list is now [in the book](https://goatns.dotgoat.net/rrtypes.html).\n\n## Additional thanks\n\n- \"Home\" by Kiki Rizky from [Noun Project](https://thenounproject.com/browse/icons/term/home/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaleman%2Fgoatns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyaleman%2Fgoatns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaleman%2Fgoatns/lists"}