From 17f8346d62b7494ae8bf8e4766a35e2f85104f67 Mon Sep 17 00:00:00 2001 From: Nick Trochalakis Date: Sat, 11 Oct 2025 09:12:03 -0700 Subject: [PATCH] Create dns2omada.sh --- dns2omada.sh | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 dns2omada.sh diff --git a/dns2omada.sh b/dns2omada.sh new file mode 100644 index 0000000..240f6d1 --- /dev/null +++ b/dns2omada.sh @@ -0,0 +1,84 @@ +#!/usr/bin/bash + +version=0 +changelog="version=$version, 13-Jun-2024, initial build" + +version=2 +changelog="version=$version, 14-Jun-2024, swapped loop from by-subnet to by-omada-clients-mac, saving before and after files in /var/tmp" + + +HELP=" +dns2omada.sh is the most simplistic script ever meant to paliate one of dumbest laziest lack of feature of the tp-link OMADA SDN software.... +it simply populate the OMADA client's name based on DNS name... everytime the script runs it will keep a copy of the omada clients output +before and after the script execution in /var/tmp/omadaclients.*.dns2omada + +using a python omada api... +Assumptions: +- you already have a local DNS server able to perform reverse DNS resolution per IP. +- you already have omada SDN setup on the network +- you should create an OMADA admin account dedicated to this process using a very long random password string without any special character +- my subnet is simply from 192.168.0.1 to 192.168.0.256 so I have a simple loop, you might have to modify the script if your subnet is class B +with an outer loop etc... +usage: + 1) install python: sudo apt install python3-pip + 2) install the omada python api: pip install tplink-omada-client + 3) update the parameters CHANGE_ME values in the scipt below + 4) run the script manually or in cron... +" + + +# these should be self-explanatory +omada_username="CHANGEME_mrpotatoe" +omada_password="CHANGEME_lfdaruiRWGFD335qw324z" +omada_site="CHANGEME_homesweethome" +omada_url="https://CHANGEME_omada.mylocaldomain" +dns_server=CHANGEME_192.168.0.1 +omadabin=/CHANGEME/bin/omada # the absolute path to the omada binarie whch gets installed with the client. + + + + +if [[ $# -gt 0 ]] +then + echo $HELP + exit 3 +fi + +if fgrep -v grep $0 | fgrep CHANGEME >/dev/null +then + echo "ERROR: you forgot to change these varialbes from $0:" + fgrep -v grep $0 | fgrep CHANGEME + echo "$HELP" + exit 4 +fi + +$omadabin -t myomada target --url $omada_url --user $omada_username --password $omada_password --site $omada_site --set-default +omadaclients=/tmp/omadaclients.$$.txt +$omadabin clients > $omadaclients + + +cat $omadaclients | while read mac ip name device port junk +do + clientname="" + clientmac=$mac + # + # debugging + # echo "parsing mac=$mac ip=$ip name=$name device=$device port=$port junk=$junk" + + if [[ $ip = "" ]] || [[ $ip = "-" ]] + then + echo "skiping $mac because omada does not have an IP for it" + else + clientname=$(nslookup $ip $dns_server 2>/dev/null | fgrep "=" |cut -f2 -d"=" |cut -f1 -d"."|tail -1) + if [[ $clientname = "" ]] + then + echo "skipping $ip because I cant resolve it" + else + echo "setting hostname for $ip to $clientname for mac $clientmac " + $omadabin set-client-name $clientmac $clientname + fi + fi + unset mac ip name device port junk +done +cat $omadaclients > /var/tmp/omadaclients.before.dns2omada +$omadabin clients > /var/tmp/omadaclients.after.dns2omada