OPNsense Forum

Archive => 17.7 Legacy Series => Topic started by: epoch on August 05, 2017, 05:29:34 pm

Title: [SOLVED] Recommended location for a custom script for cron?
Post by: epoch on August 05, 2017, 05:29:34 pm
Hi.
I need to put an APU2C4 in double-nat mode (simpler and safer) behind some non-descript DSL box: box LAN IP 192.168.255.1, APU WAN IP 192.168.255.254, APU LAN IP 192.168.1.1

I want to run every services from OPNsense and the APU, and this includes OpenVPN for which I need a well-known address. The DSL box has a floating IP address.
I've looked at the dyndns plugin, but this one wants to monitor an interface that is on the LAN, so it won't do.
Instead I've read here a discussion about running a script via cron. This looks fine to me.

The script I would run is dnsactual.sh (http://freedns.afraid.org/scripts/dnsactual.sh.txt), I haven't tried it yet but it looks simple enough.
I have 2 questions :
 - Where should I put that snippet on the local disk, so that it doesn't interfere with OPNsense but doesn't get wiped out at the first upgrade?
 - In System>Cron I see a nice GUI but I don't see how to input a custom script. If I use the crontab facility from the command-line, will that resist an update/upgrade?

Thanks in advance. 17.7 looks pretty good so far!
Title: Re: Recommended location for a custom script for cron?
Post by: phoenix on August 05, 2017, 05:43:51 pm
I don't know about 'recommended' but I've put a script in /usr/home for a regular cron job that I run.
Title: Re: Recommended location for a custom script for cron?
Post by: franco on August 05, 2017, 06:04:56 pm
Hi epoch,

This is for start, early start and stop scripts:

https://docs.opnsense.org/development/backend/autorun.html

For cron jobs you can add a configd description file:

https://docs.opnsense.org/development/backend/configd.html

When you set the "description: My cron job" in the command settings, it will show up on the cron page for use.

All of these will be kept on updates / reboot. The only thing that could eventually happen is that somebody added a script with the same name so that will be overwritten. If you choose a "good name" (as in unique) that is very unlikely to happen. :)


Cheers,
Franco
Title: Re: Recommended location for a custom script for cron?
Post by: epoch on August 05, 2017, 06:35:43 pm
phoenix, franco: thanks!
Title: Re: Recommended location for a custom script for cron?
Post by: epoch on August 05, 2017, 08:55:40 pm
So, this is what I did for FreeDNS.afraid.org:

/usr/local/opnsense/service/conf/actions.d/actions_freednsupdate.conf
Code: [Select]
[start]
command:/usr/home/freednsupdate.sh
parameters:%s
type:script
description:Check/update public IP on freedns.afraid.org
message:Updating public IP on freedns.afraid.org

/usr/home/freednsupdate.sh:
Code: [Select]
#!/bin/sh
CURL='/usr/local/bin/curl'
FREEDNS_URL='http://freedns.afraid.org/dynamic/update.php'
TOKEN="$1"

[ -z "$TOKEN" ] && exit
RANDOMIZE=`/usr/bin/jot -r 1 0 90`
(sleep $RANDOMIZE; $CURL "$FREEDNS_URL?$TOKEN" >/dev/null 2>&1 &)
exit 0
The script is very simple, the upstream update.php code does all the job and updates the IP when needed.
The RANDOMIZE thing is just here to push execution by a few seconds/minutes. It looks like FreeDNS might appreciate the attention.
EDIT: looks like there is a timeout in OPNSense, I've reduced the max induced delay to 90 secs (from 255).

Then I created a cron entry with the web UI. I've set it to run at 7 and 37 minutes every hour, chose the new command "Check/update public IP on freedns.afraid.org", and pasted my FreeDNS token as parameter.
Runs a treat.

Thanks again.
Title: Re: Recommended location for a custom script for cron?
Post by: franco on August 06, 2017, 12:03:10 am
Yay, cool, marking this solved. 8)

PS: FreeDNS bug reports are welcome here https://github.com/opnsense/core/issues