{"id":13563677,"url":"https://github.com/markdingo/autoreverse","last_synced_at":"2026-01-14T10:52:19.152Z","repository":{"id":41477600,"uuid":"437517843","full_name":"markdingo/autoreverse","owner":"markdingo","description":"An auto-configuring reverse DNS name server","archived":false,"fork":false,"pushed_at":"2025-11-02T20:01:47.000Z","size":4486,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-02T21:21:29.180Z","etag":null,"topics":["dns","dns-server","go","minimalist","reverse-dns","server","unix"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/markdingo.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-12-12T10:47:35.000Z","updated_at":"2025-11-02T20:02:56.000Z","dependencies_parsed_at":"2023-01-21T20:17:22.006Z","dependency_job_id":"2fc69d02-1310-46b4-bbd4-12455f4cf844","html_url":"https://github.com/markdingo/autoreverse","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/markdingo/autoreverse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markdingo%2Fautoreverse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markdingo%2Fautoreverse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markdingo%2Fautoreverse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markdingo%2Fautoreverse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markdingo","download_url":"https://codeload.github.com/markdingo/autoreverse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markdingo%2Fautoreverse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28417716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["dns","dns-server","go","minimalist","reverse-dns","server","unix"],"created_at":"2024-08-01T13:01:22.158Z","updated_at":"2026-01-14T10:52:19.147Z","avatar_url":"https://github.com/markdingo.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# autoreverse\n\n`autoreverse` is a specialized authoritative DNS server whose goal is to make it as easy\nas possible to auto-answer reverse queries without ever requiring reverse zone files.\n`autoreverse` synthesizes reverse answers and automatically derives PTR answers from\nforward zones.  Importantly, `autoreverse` automatically answers forward queries\ncorresponding to the synthetic reverse answers, meeting the requirements of many remote\nservices which insist on matching forward and reverse names.\n\n`autoreverse` is designed to run on residential gateway routers and servers behind NATs\nwhich acquire ISP-assigned addresses via DHCP or SLAAC, but it also runs on publicly\naccessible servers with static network configurations.\n\n`autoreverse` normally runs with a pre-configured forward and reverse delegation in the\nglobal DNS but it also supports [rfc1918](https://datatracker.ietf.org/doc/html/rfc1918)\nand [rfc4193](https://datatracker.ietf.org/doc/html/rfc4193) addresses - otherwise known\nas private addresses or User Local Addresses in `ipv6` parlance.\n\nOn start-up, `autoreverse` extracts forward and reverse delegation details from the DNS to\nsynthesize its own \"Zones of Authority\". This approach to gleaning information from the\nDNS represents an over-arching philosophy of `autoreverse` in that it never requires\nconfiguration material which duplicates that already present in the DNS.\n\nFor more details consider the [Quick Start Guide](QUICKSTART.md), the\n[FAQ](FAQ.md) or the [Command Line Usage](USAGE.md). Detailed\ninvocation documentation is provided by the [manpage](autoreverse.8)\nrendered with `mandoc -a`.\n\n### Project Status\n\n[![Build Status](https://github.com/markdingo/autoreverse/actions/workflows/go.yml/badge.svg)](https://github.com/markdingo/autoreverse/actions/workflows/go.yml)\n[![codecov](https://codecov.io/gh/markdingo/autoreverse/branch/main/graph/badge.svg?token=211OVOI2AV)](https://codecov.io/gh/markdingo/autoreverse)\n[![CodeQL](https://github.com/markdingo/autoreverse/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/markdingo/autoreverse/actions/workflows/codeql-analysis.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/markdingo/autoreverse)](https://goreportcard.com/report/github.com/markdingo/autoreverse)\n[![Go Reference](https://pkg.go.dev/badge/github.com/markdingo/autoreverse.svg)](https://pkg.go.dev/github.com/markdingo/autoreverse)\n\n### Key Features\n\nWhile `autoreverse` is a specialized reverse server, it does provide a number of\ncapabilities within that scope. Specifically it:\n\n\n1. Synthesizes PTR responses in the reverse zone\n1. Synthesizes matching/correlated A/AAAA responses in the forward zone\n1. Auto-configures by deducing zone configuration with DNS Probing\n2. Can load forward zones and derive corresponding PTR values from A, AAAA and CNAME RRs to intermingle with synthetic responses\n4. Responds to zone specific queries such as NS, SOA and ANY\n5. Is written in [go](https://golang.org) with resource efficiency in mind\n6. Offers an experimental `--passtru` options which allows `autoreverse` to proxy queries to\na backend server - this could be useful in port-forwarding environments when port 53 is\nalready in use.\n\n\n(For those new to DNS, a \"reverse query\" and \"reverse lookup\" are shorthand for a PTR\nquery in the \"reverse DNS tree\". These terms are used interchangeable in this document. If\nyou wish to know more, [Wikipedia](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) has\ndetails and [rfc8499](https://www.rfc-editor.org/rfc/rfc8499.html) is a great resource for\nunderstanding and using correct DNS terminology.)\n\n### Who should use autoreverse?\n\n`autoreverse` is intended for small installations and home-gamers who want the reverse\nlookup of their IP assignments to say something useful. Most often this occurs in\nconjunction with ISPs who allow name server delegation of customer assigned\naddresses. That's not to say `autoreverse` can't be deployed in other scenarios; after\nall, you might be a sysadmin who wants all reverse queries directed to a zero-maintenance\nsystem, in which case `autoreverse` can probably take care of that for you.\n\n\n### What is meant by \"auto-configures\"?\n\n`autoreverse` avoids redundant configuration and attempts to deduce just about everything\npossible that's already present in the DNS. That means `autoreverse` can start up and\nrespond to PTR queries with the following invocation:\n\n```sh\nautoreverse --forward autoreverse.example.net --reverse 2001:db8::/64\n```\n\nWhere `autoreverse.example.net` and `0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa`\nare delegated to the listening addresses().\n\n\nIf you want to intermingle your own forward names from an existing zone into the PTR\nanswers, here is what the invocation might look like:\n\n```sh\nautoreverse --forward autoreverse.example.com --reverse 2001:db8::/64 \\\n            --listen 2001:db8::1                                      \\\n            --PTR-deduce file:///etc/nsd/example.net.zone             \\\n            --PTR-deduce axfr://a.ns.example.net/example.org\n```\n\nThis invocation results in PTR queries returning matching A, AAAA and CNAME names from the\n`--PTR-deduce` zones if present, otherwise a synthesized response is returned.\n\nIn all cases you should notice a complete absence of any tell-tale signs of reverse zone\nfiles or PTR records.\n\n## Getting Started\n\nSince `autoreverse` relies on pre-existing forward and reverse delegation details to\ndeduce its own zone information, the first step is to add those delegation details into\nthe DNS. Here's an example of the recommended snippet for your forward zone:\n\n```\n  $ORIGIN yourdomain.\n  ;;\n  ;; Start of snippet\n  ;;\n  autoreverse IN NS   autoreverse\n              IN AAAA 2001:db8:aa:bb::53\n              IN A    192.0.2.53\n  ;;\n  ;; End of snippet\n```\n\nReverse delegation is typically managed by your ISP or address assignment provider,\nso normally you arrange with them to configure the reverse name server as\n`autoreverse.yourdomain` to match the `NS` entry in the above snippet.\n\n*And that's it!* That completes the setup needed to run `autoreverse`.\n\nA likely invocation after this setup is something like:\n\n```sh\nautoreverse --forward autoreverse.yourdomain           \\\n            --listen 2001:db8::1 --listen 192.0.2.53   \\\n            --reverse 2001:db8:aa:bb::53/48\n```\n\nand `autoreverse` will figure out the rest and start answering PTR queries.\n\n## Installation\n\nRegardless of how you compile or install `autoreverse` you'll need a recent version of\n[go](https://golang.org). 1.17 or later is recommended.\n\nThere are two ways to install `autoreverse`. The 'go' way and the 'Unix' way. While the\nsimplicity of installing the 'go' way has its merits, it doesn't install in traditional\nUnix locations, nor does it install the manpage. The choice is up to you.\n\n### Installation the 'go' way\n\n```sh\ngo install github.com/markdingo/autoreverse@latest\n```\nor if you're after the leading edge, possibly:\n\n```sh\ngo install github.com/markdingo/autoreverse@main\n```\n\nIn either case, the end result should be an `autoreverse` executable in `$GOPATH/bin` or\n`$HOME/go/bin`.\n\n\nTo test the installation, run the following command:\n\n```sh\n$GOPATH/bin/autoreverse -v\n```\n\nor possibly:\n\n```sh\n$HOME/go/bin/autoreverse -v\n```\n\ndepending on your go setup.\n\nAll being well, you should see `autoreverse` print version details.\n\n### Installation the 'Unix' way\n\nTo install `autoreverse` and its manpage the Unix way, the sources are downloaded then\nbuilt and installed via the `Makefile`.\n\n```sh\ngit clone https://github.com/markdingo/autoreverse.git\ncd autoreverse\nmake all\nsudo make install\n```\n\nIf `git clone` is unavailable to you, github offers a zip download function on the project\npage.\n\nTo test the installation, run the following commands:\n\n```sh\n/usr/local/sbin/autoreverse -v\nman autoreverse\n```\n\nAll being well, you should see `autoreverse` print version details followed by the start\nof the manpage.\n\n### Target Systems and cross-compiling\n\n`autoreverse` has been tested on various CPU architectures with FreeBSD, Linux and\nmacOS. The [Makefile](./Makefile) in the installation directory builds and installs\n`autoreverse` into `/usr/local/sbin`. Modify as necessary.\n\n`autoreverse` *may* compile and run on Windows but you can also cross-compile to Windows\non a Unix-like system. To assist in this the Makefile contains the `windowsamd64` and\n`windows386` targets.\n\nPerhaps of most interest to residential deployments is the possibility of installing\n`autoreverse` on your gateway router. To that end, the Makefile has targets for a\nfew *prosumer* routers such as Ubiquiti Edge Routers and Mikrotik Router Boards. It should\nbe possible to target other platforms too! This project is very interested to hear of\nattempts to install `autoreverse` on gateway routers so please provide feedback of\nsuccesses *and* failures.\n\n### Community\n\nIf you have any problems using `autoreverse` or suggestions on how it can do a better job,\ndon't hesitate to create an [issue](https://github.com/markdingo/autoreverse/issues) on\nthe project home page. This package can only improve with your feedback.\n\n### Copyright and License\n\n`autoreverse` is Copyright :copyright: 2021, 2022, 2023 Mark Delany. This software is\nlicensed under the BSD 2-Clause \"Simplified\" License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkdingo%2Fautoreverse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkdingo%2Fautoreverse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkdingo%2Fautoreverse/lists"}