Fixes DNS-based access blocks to archive.today and its mirrors on macOS.
archive.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: 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.
macOS 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.
The mirror list is in mirrors.txt, updated monthly by a GitHub Actions workflow that reads the Archive.today Wikipedia article. Current mirrors:
| Domain | Role |
|---|---|
| archive.today | Primary |
| archive.fo | Mirror |
| archive.is | Mirror (deprecated for new links, still active) |
| archive.li | Mirror |
| archive.md | Mirror |
| archive.ph | Mirror |
| archive.vn | Mirror |
- macOS 10.6+ (any version with
/etc/resolversupport) sudo/ root access (for install/uninstall only)curlandpython3(both ship with macOS)
git clone https://github.com/smartwatermelon/archive-resolver.git
cd archive-resolver
sudo ./install.sh./install.sh --update-mirrors Update mirrors.txt from Wikipedia (no root needed)
sudo ./install.sh Install / update resolver files
sudo ./install.sh --uninstall Remove all managed resolver files
Options:
-m, --update-mirrors Fetch current mirror list from Wikipedia and update mirrors.txt
-y, --yes Non-interactive: skip confirmation prompts
-n, --nameserver IP Nameserver for archive domains (default: 8.8.8.8)
-f, --no-fetch Use local mirrors.txt; skip fetching from GitHub
-d, --dry-run Show planned changes without applying them
-u, --uninstall Remove all resolver files managed by archive-resolver
-h, --help Show this message
# Standard install / update (fetches latest mirrors.txt from GitHub)
sudo ./install.sh
# Preview what would change
sudo ./install.sh --dry-run
# Update mirrors.txt from Wikipedia, then install
./install.sh --update-mirrors && sudo ./install.sh --no-fetch
# Preview mirror list changes without writing anything
./install.sh --update-mirrors --dry-run
# Use alternate Google DNS server
sudo ./install.sh --nameserver 8.8.4.4
# Offline install (uses bundled mirrors.txt)
sudo ./install.sh --no-fetch
# Remove everything this script created
sudo ./install.sh --uninstall- Reads
mirrors.txtfrom this repository (or the local copy with--no-fetch). - Writes
/etc/resolver/archive.todaywithnameserver 8.8.8.8. - Creates symlinks for every other mirror domain pointing at that file. Changing the nameserver only requires updating one place.
- Removes any
/etc/resolverentries from a previous run that are no longer in the mirror list, using a manifest at/etc/resolver/.archive-resolver. - Runs
dscacheutil -flushcacheand reloadsmDNSResponder.
Re-running produces the same result. New mirrors are added, removed mirrors are cleaned up.
A 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.
To pull an update locally without waiting for CI:
./install.sh --update-mirrorsThis fetches the Wikipedia article and rewrites mirrors.txt if the mirror set has changed. Then run sudo ./install.sh --no-fetch to apply it.
sudo ./install.shFetches the latest mirrors.txt from this repository and updates /etc/resolver to match. No script update needed.
sudo ./install.sh --uninstallRemoves all resolver files this script created and flushes the DNS cache. System-wide DNS settings are not affected.
# List managed resolver files
ls -la /etc/resolver/archive.*
# Check that archive.today resolves
dscacheutil -q host -a name archive.todayMIT — see LICENSE.md.