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