Skip to content

dgtlmoon/nginx-sql-proxypass-resolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Experimental DNS server to act as a proxy_pass resolver for nginx to bounce your requests to depending on SQLite lookup data

Experimental 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

Configuration

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.

Backend examples

# 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).

See

Note

Use at own risk, may or may not scale, may or may not rename your dog and set your house on fire.

About

An experimental DNS server to act as a `resolver` for nginx to bounce your requests to depending on the SQLite lookup data

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors