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