No description
.github/workflows | ||
core | ||
extra | ||
utils | ||
.deepsource.toml | ||
.gitignore | ||
go.mod | ||
go.sum | ||
LICENCE | ||
main.go | ||
Makefile | ||
README.md |
Sacrebleu
Sacrebleu is a DNS authoritative nameserver made in Go with github.com/miekg/dns
library.
Records are stored in a SQL Database and cached using Redis.
This software requires a SQL server and a Redis server.
This software is currently in development and NOT ready for production.
Installation
Automated install
Each release contains a RPM and DEB package.
- Download the latest package compatible with your system
- Edit the config file in
/etc/sacrebleu/config-dns.ini
- Launch the database migration with
sacrebleu-dns -sqlmigrate -config /etc/sacrebleu/config-dns.ini
- Start the service
systemctl start sacrebleu-dns
Manual Install
- Download the latest release compatible with your system
- Download and edit the configuration file
- Launch the database migration with
sacrebleu-dns -sqlmigrate -config [config path].ini
- Download and edit the systemd service and put it in
/lib/systemd/system/
- Start the service
systemctl start sacrebleu-dns
Arguments
You can show theses informations using ./sacrebleu-dns -h
.
-config string
the patch to the config file (default "extra/config.ini.example")
-sqlmigrate
initialize / migrate the database
Configuration
Variables names are case sensitives.
Variable name | Type | Example | Informations |
---|---|---|---|
app_mode | string | "production" |
Anything different than production will show debug messages |
App | Section | ||
IP | string | ":" |
IP address on which the DNS server must listen. Blank to listen on all IPs |
Port | int | 5353 |
Port on which the DNS server must listen |
Logfile | bool | true |
Enable or disable file logs. |
Logdir | string | /var/log |
Log file directory. |
Database | Section | ||
Type | string | "postgresql" |
SQL Database type. "postgresql" or "mysql" (anything different than "postgresql" will rollback to "mysql" ) |
Host | string | "127.0.0.1" "/var/run/postgres" |
Can be either an IP or a path to a socket for Postgres |
Username | string | "sacrebleu" |
SQL Database Username |
Password | string | "superSecretPassword" |
SQL Database Password (optional) |
Port | string | "5432" |
SQL Database port ("5432" for postgres or "3306" for MySQL by default) |
DB | string | "sacrebleudatabase" |
SQL Database Name |
Redis | Section | ||
IP | string | "127.0.0.1" |
Redis Database IP |
Password | string | "" |
Redis Database Password |
Port | int | 6379 |
Redis Database port |
DB | int | 0 |
Redis Database ID |
TTL | int | 10 |
Redis Time To Live (in seconds) |
DNS | Section | ||
XfrIPs | []string | *,192.0.2.9,192.0.2.98 |
Allowed IPs for XFR transfer (* for any) |
What is working
- Read records (stricts & wildcard) from MySQL
- Read and write records (stricts & wildcard) in Redis
- Recursive wildcard for reverse DNS (IPv6 only)
- Generate dynamic reverse DNS (IPv6 only)
- Respond to all requested MySQL queries
ToDo
- Recursive wildcard for reverse DNS (IPv4 part)
- Generate dynamic reverse DNS (IPv4 part)
- XFR
- DNSSEC
- Unit tests