proxy_pass resolver for nginx to bounce your requests to depending on SQLite lookup dataExperimental Python based DNS server that lets you use SQLite as a nginx proxy_pass resolver that performs an SQLite query to decide where to resolve/pass proxy_pass the request to.
( Asks a SQLite DB what the real IP for a lookup should be and returns that so proxy_pass can use it )
Based on https://github.com/paulc/dnslib/blob/master/dnslib/fixedresolver.py
docker-compose up
Then
All settings are environment variables:
| Variable | Default | Description |
|---|---|---|
DATABASE_URL | sqlite:////data.db | SQLAlchemy connection URL. Supports SQLite, MySQL, PostgreSQL. |
SQL_QUERY | SELECT dest_addr FROM lookup WHERE name IS NOT NULL AND name LIKE :name | Query to resolve a name. Must use :name as the named parameter. |
DNS_TTL | 60 | TTL (seconds) for DNS responses and cache entries. |
CACHE_SIZE | 512 | Max number of cached entries (LRU eviction). |
UPSTREAM_DNS | 127.0.0.11 | Fallback DNS server for names not found in the DB (Docker embedded DNS). |
UPSTREAM_PORT | 53 | Port for the upstream DNS server. |
LOOKUP_TIMEOUT | 3.0 | Timeout in seconds for upstream DNS queries. |
# SQLite (default)
DATABASE_URL=sqlite+aiosqlite:////data.db
# MySQL
DATABASE_URL=mysql+asyncmy://user:pass@mysql-host/dbname
# PostgreSQL
DATABASE_URL=postgresql+asyncpg://user:pass@pg-host/dbname
Install the matching async driver via requirements.txt (see comments in that file).
Use at own risk, may or may not scale, may or may not rename your dog and set your house on fire.
16 commits
Python
84.5%
Shell
12.6%
Dockerfile
2.8%
proxy_pass resolver for nginx to bounce your requests to depending on SQLite lookup dataExperimental Python based DNS server that lets you use SQLite as a nginx proxy_pass resolver that performs an SQLite query to decide where to resolve/pass proxy_pass the request to.
( Asks a SQLite DB what the real IP for a lookup should be and returns that so proxy_pass can use it )
Based on https://github.com/paulc/dnslib/blob/master/dnslib/fixedresolver.py
docker-compose up
Then
All settings are environment variables:
| Variable | Default | Description |
|---|---|---|
DATABASE_URL | sqlite:////data.db | SQLAlchemy connection URL. Supports SQLite, MySQL, PostgreSQL. |
SQL_QUERY | SELECT dest_addr FROM lookup WHERE name IS NOT NULL AND name LIKE :name | Query to resolve a name. Must use :name as the named parameter. |
DNS_TTL | 60 | TTL (seconds) for DNS responses and cache entries. |
CACHE_SIZE | 512 | Max number of cached entries (LRU eviction). |
UPSTREAM_DNS | 127.0.0.11 | Fallback DNS server for names not found in the DB (Docker embedded DNS). |
UPSTREAM_PORT | 53 | Port for the upstream DNS server. |
LOOKUP_TIMEOUT | 3.0 | Timeout in seconds for upstream DNS queries. |
# SQLite (default)
DATABASE_URL=sqlite+aiosqlite:////data.db
# MySQL
DATABASE_URL=mysql+asyncmy://user:pass@mysql-host/dbname
# PostgreSQL
DATABASE_URL=postgresql+asyncpg://user:pass@pg-host/dbname
Install the matching async driver via requirements.txt (see comments in that file).
Use at own risk, may or may not scale, may or may not rename your dog and set your house on fire.
16 commits
Python
84.5%
Shell
12.6%
Dockerfile
2.8%