Initial commit: DNClient Home Assistant add-on
This commit is contained in:
commit
05079fb24a
8 changed files with 122 additions and 0 deletions
32
README.md
Normal file
32
README.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Home Assistant Add-on: DNClient (Defined Networking)
|
||||
|
||||
Run [Defined Networking's DNClient](https://www.defined.net/) (Managed Nebula) as a Home Assistant add-on to provide overlay network connectivity to your Home Assistant OS instance.
|
||||
|
||||
## Installation
|
||||
|
||||
1. In Home Assistant, go to **Settings → Add-ons → Add-on Store**
|
||||
2. Click the **⋮** menu (top right) → **Repositories**
|
||||
3. Add this repository URL: `https://github.com/johnmaguire/homeassistant-addon-dnclient`
|
||||
4. Find **DNClient** in the store and click **Install**
|
||||
|
||||
## Configuration
|
||||
|
||||
| Option | Description |
|
||||
|--------|-------------|
|
||||
| `enrollment_code` | Your enrollment code from the [Defined Networking Admin Panel](https://admin.defined.net). Only needed for first run. |
|
||||
|
||||
### First Run
|
||||
|
||||
1. Generate an enrollment code from [admin.defined.net](https://admin.defined.net)
|
||||
2. Paste it into the add-on configuration
|
||||
3. Start the add-on
|
||||
4. Once enrolled, you can clear the enrollment code — the host identity is persisted
|
||||
|
||||
## How It Works
|
||||
|
||||
The add-on runs `dnclient` with host networking and `NET_ADMIN` capability so it can create the Nebula tun interface directly on the Home Assistant host. Configuration is persisted in the add-on's data directory, so the host only needs to enroll once.
|
||||
|
||||
## Supported Architectures
|
||||
|
||||
- `amd64`
|
||||
- `aarch64`
|
||||
8
dnclient/CHANGELOG.md
Normal file
8
dnclient/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# Changelog
|
||||
|
||||
## 0.1.0
|
||||
|
||||
- Initial release
|
||||
- Runs dnclient with host networking and NET_ADMIN capability
|
||||
- Persistent enrollment across restarts
|
||||
- Supports amd64 and aarch64
|
||||
24
dnclient/DOCS.md
Normal file
24
dnclient/DOCS.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# DNClient Add-on for Home Assistant
|
||||
|
||||
## About
|
||||
|
||||
This add-on runs [Defined Networking's DNClient](https://www.defined.net/) on your Home Assistant OS instance, giving it connectivity to your Managed Nebula overlay network.
|
||||
|
||||
## Setup
|
||||
|
||||
1. Go to [admin.defined.net](https://admin.defined.net) and create a host for your Home Assistant instance
|
||||
2. Generate an enrollment code for the host
|
||||
3. Paste the enrollment code into this add-on's configuration
|
||||
4. Start the add-on
|
||||
|
||||
After the first successful enrollment, the host identity is persisted. You can clear the enrollment code from the configuration — it won't be needed again unless you re-enroll.
|
||||
|
||||
## Network
|
||||
|
||||
The add-on uses **host networking** so the Nebula tun interface is created directly on the Home Assistant host. This means other add-ons and Home Assistant itself can communicate over the Nebula network.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- Check the add-on logs for enrollment or connection errors
|
||||
- Ensure the enrollment code hasn't expired (they are single-use)
|
||||
- If you need to re-enroll, stop the add-on, clear the persistent data, set a new enrollment code, and restart
|
||||
7
dnclient/Dockerfile
Normal file
7
dnclient/Dockerfile
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
ARG BUILD_FROM=definednet/dnclient:latest
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
COPY run.sh /
|
||||
RUN chmod a+x /run.sh
|
||||
|
||||
CMD [ "/run.sh" ]
|
||||
3
dnclient/build.yaml
Normal file
3
dnclient/build.yaml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
build_from:
|
||||
amd64: definednet/dnclient:latest
|
||||
aarch64: definednet/dnclient:latest
|
||||
17
dnclient/config.yaml
Normal file
17
dnclient/config.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
name: DNClient
|
||||
version: "0.1.0"
|
||||
slug: dnclient
|
||||
description: "Run Defined Networking's DNClient (Managed Nebula) on Home Assistant OS"
|
||||
url: "https://github.com/johnmaguire/homeassistant-addon-dnclient"
|
||||
arch:
|
||||
- amd64
|
||||
- aarch64
|
||||
startup: system
|
||||
boot: auto
|
||||
host_network: true
|
||||
privileged:
|
||||
- NET_ADMIN
|
||||
options:
|
||||
enrollment_code: ""
|
||||
schema:
|
||||
enrollment_code: "str?"
|
||||
26
dnclient/run.sh
Normal file
26
dnclient/run.sh
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env sh
|
||||
set -e
|
||||
|
||||
CONFIG_DIR="/data/defined"
|
||||
SYSTEM_DIR="/etc/defined"
|
||||
|
||||
# Ensure persistent config directory exists
|
||||
mkdir -p "${CONFIG_DIR}"
|
||||
|
||||
# Symlink /etc/defined -> /data/defined for persistence across restarts
|
||||
if [ ! -L "${SYSTEM_DIR}" ]; then
|
||||
rm -rf "${SYSTEM_DIR}"
|
||||
ln -s "${CONFIG_DIR}" "${SYSTEM_DIR}"
|
||||
fi
|
||||
|
||||
# Read enrollment code from HA options
|
||||
ENROLLMENT_CODE="$(cat /data/options.json | sed -n 's/.*"enrollment_code" *: *"\([^"]*\)".*/\1/p')"
|
||||
|
||||
# Only set enrollment code if non-empty and host is not already enrolled
|
||||
if [ -n "${ENROLLMENT_CODE}" ] && [ ! -f "${CONFIG_DIR}/config.yml" ]; then
|
||||
export DN_ENROLLMENT_CODE="${ENROLLMENT_CODE}"
|
||||
echo "Enrolling host with provided enrollment code..."
|
||||
fi
|
||||
|
||||
echo "Starting dnclient..."
|
||||
exec dnclient
|
||||
5
repository.json
Normal file
5
repository.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name": "Defined Networking Add-ons",
|
||||
"url": "https://github.com/johnmaguire/homeassistant-addon-dnclient",
|
||||
"maintainer": "John Maguire"
|
||||
}
|
||||
Loading…
Reference in a new issue