#!/bin/sh # OpenWrt Leases2Hosts 0.01 -- BTA 03.13.2025 -- LostGeek.NET # Transforms OpenWrt dhcp leases file into format suitable for external DNS server LEASES_FILE="/tmp/dhcp.leases" OUTPUT_FILE="/tmp/dhcp.hosts" # Set domain suffix (leave blank to disable) DOMAIN_SUFFIX=".lan" # Ensure the leases file exists [ -f "$LEASES_FILE" ] || { echo "Leases file not found!"; exit 1; } # New hosts file header echo "# Generated by Lease2Hosts" > "$OUTPUT_FILE" # Process the leases file using BusyBox-compatible awk awk -v suffix="$DOMAIN_SUFFIX" ' { ip = $3; hostname = $4; # Ignore entries where hostname is "*" if (hostname == "*") next; # Ensure hostname is not a MAC address (contains colons) if (index(hostname, ":") > 0) next; # Ensure hostname is only letters, numbers, dots, and dashes if (match(hostname, /^[a-zA-Z0-9.-]+$/)) { if (suffix != "") { print ip, hostname, hostname suffix; } else { print ip, hostname; } } }' "$LEASES_FILE" >> "$OUTPUT_FILE" echo "Hosts file:" echo "-----" cat $OUTPUT_FILE echo "-----" echo "Hosts file written: $OUTPUT_FILE"