{"id":21512528,"url":"https://github.com/isc-projects/froot-src","last_synced_at":"2025-07-24T18:17:13.294Z","repository":{"id":68621555,"uuid":"166033140","full_name":"isc-projects/froot-src","owner":"isc-projects","description":"Fast DNS Root Server","archived":false,"fork":false,"pushed_at":"2019-07-19T16:29:43.000Z","size":212,"stargazers_count":4,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-09T18:48:51.370Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isc-projects.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-16T12:01:12.000Z","updated_at":"2023-12-16T01:15:42.000Z","dependencies_parsed_at":"2023-02-21T13:30:58.766Z","dependency_job_id":null,"html_url":"https://github.com/isc-projects/froot-src","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/isc-projects/froot-src","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isc-projects%2Ffroot-src","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isc-projects%2Ffroot-src/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isc-projects%2Ffroot-src/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isc-projects%2Ffroot-src/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isc-projects","download_url":"https://codeload.github.com/isc-projects/froot-src/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isc-projects%2Ffroot-src/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266886030,"owners_count":24001045,"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","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-23T22:38:07.299Z","updated_at":"2025-07-24T18:17:13.286Z","avatar_url":"https://github.com/isc-projects.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Fast Root\n=========\n\nThis package is a DNS server that serves the root zone (\".\")\nand _nothing else_.  It only runs on Linux systems.\n\nIn its current incarnation it is not suitable for running public\nfacing root service, but it works well as a local instance of the\nroot zone that recursive resolvers can be configured to talk to in\npreference to sending queries off-net to the real root server system.\n\nNB: this is an ISC Research Project and is not covered by our support\nteam.  It appears stable, and useful, but is offered without warranty\nof any kind.  Please send feedback to ray@isc.org.  Bug reports\n(unless security related) should be filed on Github.\n\nFeatures\n--------\n\n- Written in multi-threaded C++14 this code runs on everything from\na Raspberry Pi to the largest multi-core server.\n\n    - on higher-end servers it can saturate a 10 Gbps network\n      port (~2M responses per second) using only 3 to 4 CPU cores.\n\n    - on a RPi3 B+ it has been benchmarked to run at 15,000\n      queries per second.   A single RPi should be able to\n      service dozens of recursive servers.\n\n- achieves high performance by using Linux raw sockets in `AF_PACKET`\nmode to reduce the number of context switches and data copying operations.\n\n- supports IPv4, IPv6 link local, UDP and \"Stateless TCP\"\n\n- recognises the EDNS buffer size option and the DNSSEC \"DO\" bit\n\nBuilding\n--------\n\nThe only third party library dependency is `ldns`, from NL.net Labs.\nThe `Makefile` will attempt to find this via `pkg-config` using the\npackage name `ldns` or `libldns`.\n\nRunning `make` followed by `make install` (the latter as `root`)\nwill install the binary in `$(PREFIX)/sbin`, where PREFIX defaults\nto `/usr/local`.\n\nOperation\n---------\n\nThe server needs a regularly updated copy of the root zone to function.\n\nThere is a script in `./scripts/get-root.sh` that uses a zone transfer\nmessage (\"AXFR\") from `f.root-servers.net` if the current root zone\nserial number is different to that of the file currently saved (or\nindeed if there is no file currently saved).\n\nRather than listening on the server's own IP address, the fast root\nserver needs to be assigned an otherwise unused IPv4 address on the\nlocal network which must be specified on the command line on start\nup with the \"-s\" option.\n\nThe server will automatically assign itself a link-local IPv6 address\nfrom the range fe80::/10 using SLACC with EUI-64  but there's no\nsupport (yet) for adding a standard unicast address.\n\nAs far as the operating system kernel is concerned these IP addresses\nare (intentionally) invisible.  This prevents the kernel from sending\nspurious ICMP or TCP RST messages relating to inbound packets sent to\nnetwork ports that it doesn't know about.  The server itself supports\nall of the required ARP and IPv6 Neighbor Discovery protocols necessary\nto announce its IP address(es) on the local network.  It will also\nrespond to ICMP and ICMPv6 \"ping\" packets sent to its addresses.\n\nTo simplify implementation, all responses are sent to the exact same\nMAC address from which the request originated.  The O/S routing table\nis not consulted.  This also helps prevents the server from being used \nin spoofing attacks.\n\nStartup\n-------\n\nFor `systemd` based Linux distributions there is a service definition\nfile in `./scripts/froot.service`.\n\nThe service should not be run as root - the `systemd` script is\nconfigured to run with the `CAP_NET_RAW` capability to permit access\nto raw sockets without requiring any further privileges.\n\nIf you are running outside of `systemd`, use the `setcap` application to\nadd this capability to the application, e.g:\n\n    # setcap cap_net_raw+ep /usr/local/sbin/froot\n\nRecursive Configuration\n-----------------------\n\nTo make a BIND recursor use this server for root zone queries in\npreference to the public root server system, configure the root zone\nin your `named.conf` file as follows:\n\n    zone \".\" {\n        type static-stub;\n        server-addresses { x.x.x.x; 192.5.5.241; ... };\n    };\n\nwhere `x.x.x.x` is the IP address assigned to this server.  With this\nin place the root hints are not used, so you should add some of the\ncurrent root server addresses to the list to act as a fallback in\ncase this server is not responding.\n\nA small subset of queries will still go to the real root system as\nBIND probes their round-trip times to find out which ones are most\nresponsive, but the vast majority will go to the local server.\n\nFuture Developments?\n--------------------\n\nTo act as a fully functional public facing root server the following\nadditional functionality would be required:\n\n- full TCP support, optionally with AXFR service\n- support for the `.arpa` and `root-servers.net` zones\n- DDoS mitigation features (e.g. RRL)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisc-projects%2Ffroot-src","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisc-projects%2Ffroot-src","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisc-projects%2Ffroot-src/lists"}