{"id":47811185,"url":"https://github.com/smartwatermelon/archive-resolver","last_synced_at":"2026-04-03T18:11:49.685Z","repository":{"id":343768223,"uuid":"1179049440","full_name":"smartwatermelon/archive-resolver","owner":"smartwatermelon","description":"macOS DNS resolver override for archive.today","archived":false,"fork":false,"pushed_at":"2026-04-03T00:00:50.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T10:36:07.571Z","etag":null,"topics":["archive-is","archive-today","bash","macos","mirror"],"latest_commit_sha":null,"homepage":"https://archive.today","language":"Shell","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/smartwatermelon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"smartwatermelon","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"9vzwhcwtzh","thanks_dev":null,"custom":null}},"created_at":"2026-03-11T16:28:49.000Z","updated_at":"2026-04-03T00:00:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/smartwatermelon/archive-resolver","commit_stats":null,"previous_names":["smartwatermelon/archive-resolver"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/smartwatermelon/archive-resolver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartwatermelon%2Farchive-resolver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartwatermelon%2Farchive-resolver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartwatermelon%2Farchive-resolver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartwatermelon%2Farchive-resolver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smartwatermelon","download_url":"https://codeload.github.com/smartwatermelon/archive-resolver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartwatermelon%2Farchive-resolver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31368160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","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":["archive-is","archive-today","bash","macos","mirror"],"created_at":"2026-04-03T18:11:49.041Z","updated_at":"2026-04-03T18:11:49.672Z","avatar_url":"https://github.com/smartwatermelon.png","language":"Shell","funding_links":["https://ko-fi.com/smartwatermelon","https://buymeacoffee.com/9vzwhcwtzh"],"categories":[],"sub_categories":[],"readme":"# archive-resolver\n\nFixes DNS-based access blocks to [archive.today](https://archive.today) and its mirrors on macOS.\n\n## The problem\n\narchive.today intentionally denies requests from users whose DNS resolves through certain providers — most notably **Cloudflare 1.1.1.1**. The dispute is over [EDNS Client Subnet](https://en.wikipedia.org/wiki/EDNS_Client_Subnet): archive.today's operator uses it for load balancing; Cloudflare refuses to send it on privacy grounds. The result is that anyone using Cloudflare DNS gets connection errors on every archive.today domain.\n\n## The fix\n\nmacOS supports per-domain DNS resolver overrides via files in `/etc/resolver/`. This script creates one file per mirror domain, routing those domains through a public nameserver (Google DNS 8.8.8.8 by default) while leaving all other DNS traffic alone.\n\n## Mirror domains\n\nThe mirror list is in [`mirrors.txt`](./mirrors.txt), updated monthly by a GitHub Actions workflow that reads the [Archive.today Wikipedia article](https://en.wikipedia.org/wiki/Archive.today). Current mirrors:\n\n| Domain | Role |\n|---|---|\n| archive.today | Primary |\n| archive.fo | Mirror |\n| archive.is | Mirror (deprecated for new links, still active) |\n| archive.li | Mirror |\n| archive.md | Mirror |\n| archive.ph | Mirror |\n| archive.vn | Mirror |\n\n## Requirements\n\n- macOS 10.6+ (any version with `/etc/resolver` support)\n- `sudo` / root access (for install/uninstall only)\n- `curl` and `python3` (both ship with macOS)\n\n## Quick install\n\n```sh\ngit clone https://github.com/smartwatermelon/archive-resolver.git\ncd archive-resolver\nsudo ./install.sh\n```\n\n## Usage\n\n```\n./install.sh --update-mirrors        Update mirrors.txt from Wikipedia (no root needed)\nsudo ./install.sh                    Install / update resolver files\nsudo ./install.sh --uninstall        Remove all managed resolver files\n\nOptions:\n  -m, --update-mirrors   Fetch current mirror list from Wikipedia and update mirrors.txt\n  -y, --yes              Non-interactive: skip confirmation prompts\n  -n, --nameserver IP    Nameserver for archive domains (default: 8.8.8.8)\n  -f, --no-fetch         Use local mirrors.txt; skip fetching from GitHub\n  -d, --dry-run          Show planned changes without applying them\n  -u, --uninstall        Remove all resolver files managed by archive-resolver\n  -h, --help             Show this message\n```\n\n### Examples\n\n```sh\n# Standard install / update (fetches latest mirrors.txt from GitHub)\nsudo ./install.sh\n\n# Preview what would change\nsudo ./install.sh --dry-run\n\n# Update mirrors.txt from Wikipedia, then install\n./install.sh --update-mirrors \u0026\u0026 sudo ./install.sh --no-fetch\n\n# Preview mirror list changes without writing anything\n./install.sh --update-mirrors --dry-run\n\n# Use alternate Google DNS server\nsudo ./install.sh --nameserver 8.8.4.4\n\n# Offline install (uses bundled mirrors.txt)\nsudo ./install.sh --no-fetch\n\n# Remove everything this script created\nsudo ./install.sh --uninstall\n```\n\n## How it works\n\n1. Reads `mirrors.txt` from this repository (or the local copy with `--no-fetch`).\n2. Writes `/etc/resolver/archive.today` with `nameserver 8.8.8.8`.\n3. Creates symlinks for every other mirror domain pointing at that file. Changing the nameserver only requires updating one place.\n4. Removes any `/etc/resolver` entries from a previous run that are no longer in the mirror list, using a manifest at `/etc/resolver/.archive-resolver`.\n5. Runs `dscacheutil -flushcache` and reloads `mDNSResponder`.\n\nRe-running produces the same result. New mirrors are added, removed mirrors are cleaned up.\n\n## Keeping the mirror list current\n\nA workflow runs on the first Monday of every month. If the Wikipedia article's mirror list has changed, it opens a pull request with the updated `mirrors.txt`.\n\nTo pull an update locally without waiting for CI:\n\n```sh\n./install.sh --update-mirrors\n```\n\nThis fetches the Wikipedia article and rewrites `mirrors.txt` if the mirror set has changed. Then run `sudo ./install.sh --no-fetch` to apply it.\n\n## Updating\n\n```sh\nsudo ./install.sh\n```\n\nFetches the latest `mirrors.txt` from this repository and updates `/etc/resolver` to match. No script update needed.\n\n## Uninstalling\n\n```sh\nsudo ./install.sh --uninstall\n```\n\nRemoves all resolver files this script created and flushes the DNS cache. System-wide DNS settings are not affected.\n\n## Verifying it works\n\n```sh\n# List managed resolver files\nls -la /etc/resolver/archive.*\n\n# Check that archive.today resolves\ndscacheutil -q host -a name archive.today\n```\n\n## License\n\nMIT — see [LICENSE.md](./LICENSE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartwatermelon%2Farchive-resolver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmartwatermelon%2Farchive-resolver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartwatermelon%2Farchive-resolver/lists"}