3
Votesreverse dns lookup to populate names in OMADA SDN
reverse dns lookup to populate names in OMADA SDN
just a small note for people who would like to get the omada SDN to populate names automatically based on their local DNS... here is my small script which seems to do the trick while waiting for TPlink to implement this really really basic function in their code...
it has been tested on ubuntu, running opnsense FW as DHCP server, with unboundID DNS and tplink EAP&switches.
note: you might want to audit the script and the python libary before using it in PRODUCTION....
#!/usr/bin/bash
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...
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"
subnet=CHANGEME_192.168.0
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
let ip4thfield=1
while [[ $ip4thfield -lt 256 ]]
do
clientname=""
clientmac=""
clientname=$(nslookup ${subnet}.$ip4thfield $dns_server 2>/dev/null | fgrep "=" |cut -f2 -d"=" |cut -f1 -d"."|tail -1)
if [[ $clientname != "" ]]
then
clientmac=$(fgrep " ${subnet}.$ip4thfield " $omadaclients| cut -f1 -d" "|tail -1)
if [[ $clientmac != "" ]]
then
echo "setting hostname for ${subnet}.$ip4thfield to $clientname for mac $clientmac "
$omadabin set-client-name $clientmac $clientname
else
echo "skipping ${subnet}.$ip4thfield because omada does not see any client MAC for it"
fi
else
echo "skipping ${subnet}.$ip4thfield because I cant resolve it"
fi
let ip4thfield=ip4thfield+1
done
rm -f $omadaclients
