# Dynamic IP Updater with Cloudflare DNS This project is a dynamic IP updater for Cloudflare DNS records. It listens for changes in the IPv4 address of the network interface and updates the DNS records in Cloudflare accordingly. ## Features - Automatically detects changes in the public IP address. - Updates Cloudflare DNS records when the public IP changes. - Listens for network interface events to detect IP changes. - Handles errors and retries updates to Cloudflare. ## Prerequisites - Rust and Cargo installed. - Cloudflare account with API token. - Network interface with dynamic IP address. ## Installation 1. **Clone the repository:** ```sh git clone https://github.com/yourusername/dynip-cloudflare.git cd dynip-cloudflare ``` 2. **Build the project:** ```sh cargo build --release ``` 3. **Create configuration file:** Create a `config.toml` file in the current directory or in the configuration directory (typically `~/.config/dynip-cloudflare/`) with the following content: ```toml zone_id = "your_zone_id" api_key = "your_api_key" domains = ["example.com", "sub.example.com"] max_errors_in_row = 5 ``` ## Usage 1. **Run the program:** ```sh ./target/release/dynip-cloudflare ``` 2. **Logging:** The program logs to both stderr and a rotating file located in the `logs` directory. The log level is set to `Info`. ## Configuration ### `config.toml` - `zone_id`: The Zone ID of your Cloudflare domain. - `api_key`: The API key for your Cloudflare account. - `domains`: A list of domain names to update. - `max_errors_in_row`: Maximum number of consecutive errors before the program stops. Will be set to 10 as default ### Example ```toml zone_id = "your_zone_id" api_key = "your_api_key" domains = ["example.com", "sub.example.com"] max_errors_in_row = 5 ``` ## Error Handling The program handles errors gracefully, with retries and logging of error messages. If the number of consecutive errors exceeds `max_errors_in_row`, the program will stop. ## License This project is licensed under the BSD 2-Clause License.