69 lines
1.8 KiB
Markdown
69 lines
1.8 KiB
Markdown
# Omada Custom Dynamic DNS for Mail-In-A-Box
|
|
|
|
The repository contains a Flask-based API proxy that allows Omada controller to update DNS records in a Mail-In-A-Box (MIAB) server. The Omada SDN software does not natively support MIAB as a Dynamic DNS provider, so this proxy bridges that gap.
|
|
|
|
## Features
|
|
|
|
- Provides endpoints for listing, setting, and deleting DNS records.
|
|
- Relays authentication credentials from Omada supplied username and password to MIAB.
|
|
|
|
## Requirements
|
|
|
|
- Python 3.x
|
|
- Flask
|
|
- Flask-HTTPAuth
|
|
- Requests
|
|
- Base64
|
|
|
|
## Installation
|
|
|
|
On an Ubuntu/Debian system, you can install the required packages using apt:
|
|
|
|
```bash
|
|
sudo apt install -y python3 python3-dotenv python3-flask python3-flask-httpauth python3-requests gunicorn
|
|
```
|
|
|
|
Copy the `app.py` file to your desired location, and run it using Python:
|
|
|
|
```bash
|
|
flask run app.py
|
|
```
|
|
|
|
or use Gunicorn for production:
|
|
|
|
```bash
|
|
gunicorn --bind 0.0.0.0:8080 app:app
|
|
```
|
|
|
|
## Self-Signed SSL Certificate (Optional)
|
|
|
|
To run the Flask app with HTTPS, you can create a self-signed SSL certificate:
|
|
|
|
```bash
|
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost"
|
|
```
|
|
|
|
Then run the Flask app with SSL context:
|
|
|
|
```bash
|
|
flask run --cert=cert.pem --key=key.pem
|
|
```
|
|
|
|
To use the Mail In A Box server's SSL certificate, use the following files:
|
|
|
|
- certificate: `/miab-data/ssl/ssl_certificate.pem`
|
|
- private key: `/miab-data/ssl/ssl_private_key.pem`
|
|
|
|
> **Note:** You have to run the web server as root to access the private key file.
|
|
|
|
## Service Installation
|
|
|
|
```
|
|
sudo mkdir -p /opt/dns-updater
|
|
sudo cp app.py /opt/dns-updater/
|
|
sudo cp dns-updater.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable --now dns-updater.service
|
|
sudo systemctl status dns-updater.service
|
|
```
|