Skip to content

Commit

Permalink
Add readme details
Browse files Browse the repository at this point in the history
  • Loading branch information
jakewmeyer committed Oct 12, 2024
1 parent 3105413 commit 010c620
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 40 deletions.
Empty file added CHANGELOG.md
Empty file.
119 changes: 118 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,119 @@
# DDRS - A Rust dynamic DNS client
# DDRS - A dynamic DNS client written in Rust 🦀

## Features
* IP lookups via [STUN](https://en.wikipedia.org/wiki/STUN), HTTP(S), and local network interfaces
* Support for multiple DNS providers
* Support for multiple domains/subdomains
* Support for IPv4 and IPv6

## Default Config
The configuration file is in [TOML](https://toml.io/en/) format. The default location for the configuration file is `/etc/ddrs/config.toml`. A custom location can be specified with the `--config` flag.

```toml
versions = ["v4"]

# versions = ["v4", "v6"]

[source]
type = "stun"

# [source]
# type = "http"

# [source]
# type = "interface"
# name = "eth0"

[[providers]]
# Provider(s) configuration
```

## Providers

### Cloudflare
* `type` - The provider type. Must be `cloudflare`
* `zone` - The zone root domain to update
* `api_token` - Cloudflare API token with the `Zone.DNS Edit` permission
* `domains` - A list of domains to update
* `name` - The full domain name to update (Required)
* `ttl` - The TTL for the record, default is `1` (Auto)
* `proxied` - Whether the record is proxied through Cloudflare, default is `false`
* `comment` - A comment to add to the record

```toml
[[providers]]
type = "cloudflare"
zone = "domain.com"
api_token = "TOKEN"

[[providers.domains]]
name = "*.domain.com"
ttl = 1
proxied = false
comment = "Wildcard subdomain"

[[providers.domains]]
name = "domain.com"
ttl = 1
proxied = false
comment = "Root domain"
```

## Deployment
* Logging can be configured with the `RUST_LOG` environment variable. By default, the log level is set to `info`. For more verbose logging, set the environment variable to `ddrs=debug`.

### Docker Compose
* Create configuration file `config.toml`
* Create a `docker-compose.yml` file
* Run `docker-compose up -d`

```yaml
services:
ddrs:
image: ghcr.io/jakewmeyer/ddrs:latest
container_name: ddrs
restart: unless-stopped
network_mode: "host"
volumes:
- ./config.toml:/etc/ddrs/config.toml
```
### Systemd
* Save the binary to `/usr/local/bin/ddrs`
* Save the configuration file to `/etc/ddrs/config.toml`
* Create a systemd service file at `/etc/systemd/system/ddrs.service`
* Reload systemd with `sudo systemctl daemon-reload`
* Start the service with `sudo systemctl start ddrs`
* Enable the service with `sudo systemctl enable ddrs`

```ini
# Systemd service file
[Unit]
Description=Dynamic DNS Rust Service (DDRS)
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=simple
User=ddrs
ExecStart=/usr/local/bin/ddrs
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
ProtectSystem=full
# Hardening
PrivateDevices=true
PrivateTmp=true
NoNewPrivileges=true
ProtectHome=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=true
RestrictSUIDSGID=true
[Install]
WantedBy=multi-user.target
```
31 changes: 0 additions & 31 deletions config-example.toml

This file was deleted.

8 changes: 0 additions & 8 deletions docker-compose.yml

This file was deleted.

0 comments on commit 010c620

Please sign in to comment.