Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yaleman/goatns
🐐-powered authoritative DNS server
https://github.com/yaleman/goatns
api dns goats nameserver oauth2-client oauth2-resource-server regret rust server tokio
Last synced: about 2 months ago
JSON representation
🐐-powered authoritative DNS server
- Host: GitHub
- URL: https://github.com/yaleman/goatns
- Owner: yaleman
- License: mit
- Created: 2022-09-26T07:00:50.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-17T20:36:13.000Z (7 months ago)
- Last Synced: 2024-05-18T20:39:41.217Z (7 months ago)
- Topics: api, dns, goats, nameserver, oauth2-client, oauth2-resource-server, regret, rust, server, tokio
- Language: Rust
- Homepage: https://goatns.dotgoat.net
- Size: 14.6 MB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Codeowners: CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
- awesome-starred - yaleman/goatns - 🐐-powered authoritative DNS server (server)
README
# GoatNS
![GoatNS Logo](./static_files/img/apple-touch-icon.png)
Yet another authoritative DNS name server. But with goat references.
## Features
- DNS over HTTPS (RFC8484) on `/dns-query`
- Web API/UI for management
- OIDC Authentication to the Web UI
- Token auth for API endpoints## Configuration
Look at `zones.json` and `goatns.example.json` for examples.
The configuration file's fields are best found here:
. Note that the
`ip_allow_list` field is a nested map.## Running in Docker
There's a docker container at `ghcr.io/yaleman/goatns:latest` and a docker-compose.yml file in the
repository if that's your thing.## Help?
Found a bug, want to change something, the sky is falling?
[Create an issue!](https://github.com/yaleman/goatns/issues/new).Wondering how something works, need a chat, or are curious there's so many goat references?
[Discussions are great for that](https://github.com/yaleman/goatns/discussions).## Built in Rust
Thanks to some great packages:
- Networking features use [tokio](https://crates.io/crates/tokio)
- DNS Packets are largely decoded/encoded with
[packed_struct](https://crates.io/crates/packed_struct)
- HTTP things use:
- [tide](https://crates.io/crates/tide)
- [Askama](https://crates.io/crates/askama)
- [Bootstrap 5](https://getbootstrap.com)
- [Feather icons](https://feathericons.com)
- Database - [sqlx](https://crates.io/crates/sqlx) for async SQLite goodness.
- Logging - [flexi_logger](https://crates.io/crates/flexi_logger)## Rust Crate Documentation
Auto-generated and available here:
[https://yaleman.github.io/goatns/rustdoc/goatns](https://yaleman.github.io/goatns/rustdoc/goatns/)## Testing
Rust tests are run using cargo.
```shell
cargo test
```A handy load testing tool is [dnsblast](https://github.com/jedisct1/dnsblast). This'll run 50,000
"valid" queries, 1500 packets per second, to port 15353:```shell
./dnsblast 127.0.0.1 50000 1500 15353
```Or if you want to fuzz the server and test that it doesn't blow up:
```shell
./dnsblast fuzz 127.0.0.1 50000 1500 15353
```## Supported request/record types
This list is now [in the book](https://goatns.dotgoat.net/rrtypes.html).
## Additional thanks
- "Home" by Kiki Rizky from [Noun Project](https://thenounproject.com/browse/icons/term/home/)