You are not logged in.
Hi everyone,
This is something I've been playing with and I'd like to share it with you and get your thoughts.
The services I want to run at any given point depend on what network I'm attached to. For example, if I'm at home, I'll want avahi-daemon and cupsd started but I won't need iptables, since I'm behind my router's firewall. On the other hand if I'm at an internet cafe I need iptables but not the other two.
What I've done is set up a script in /etc/NetworkManager/dispatch.d which starts services based on the UUID of each connection (extracted from that connection's file in /etc/NetworkManager/system-connections.
I'm currently using the following script:
#!/bin/bash
IF=$1
STATUS=$2
function start_service {
for i in "$@"
do
if [ `/usr/bin/systemctl show "$i".service | grep -c "ActiveState=inactive"`=1 ]
then
/usr/bin/systemctl start "$i".service
fi
done
}
function stop_service {
for i in "$@"
do
if [ `/usr/bin/systemctl show "$i".service | grep -c "ActiveState=active"`=1 ]
then
/usr/bin/systemctl stop "$i".service
fi
done
}
if [ "$IF" = "wlan0" ] && [ "$STATUS" = "up" ]; then
UUID=`nmcli --nocheck -t --fields UUID con status`
case $UUID in
f5320fcd-43e2-4cc1-ba1a-9606f66b5332)
start_service avahi-daemon cupsd
logger "M5DKQ (home network) up"
;;
5bfff3c5-c349-436b-953b-90de15c854d7)
start_service iptables
logger "EVO (4G hotspot) up"
;;
40d74743-f809-41ce-821c-71f9f40b8513)
logger "GuestAccess (office guest network) up"
;;
*)
start_service iptables
logger "Starting cafe-specific services"
;;
esac
fi
if [ "$IF" = "wlan0" ] && [ "$STATUS" = "down" ]; then
stop_service avahi-daemon cupsd iptables
logger "Stopped location-specific services"
logger "wlan0 down"
fi
Is there a better way to do this, like maybe a systemd custom target? Is there a cleaner way to script this?
Thanks in advance,
Offline