Use post-up in /etc/network/interfaces on any Debian-based distro. That allows you to run the script right after it was brought up by ifup. More in the man page for interfaces.
Side-note: post-down can be used to remove the rules, of course.
And if that doesn't work, because your system brings up ppp0 via some script, you can use the hook scripts in the *.d subfolders of /etc/network corresponding to the aforementioned actions. Several variables will be supplied to you in the script, such as IFACE, ADDRFAM etc. The man pages are really detailed.
On another note, internally up == post-up and down == post-down, so the correct subfolders would be if-down.d and if-up.d respectively.
And if you want to "debug" that process of bringing up an interface that is declared in /etc/network/interfaces (or sourced from there), ifup(8) has the details. In particular you'll want ifup -nvl (and perhaps the interface name). Can also be run unprivileged, because it doesn't do anything, just mimics the process.
Possible caveat
This won't work on Debian-based but Network-Manager-driven setups. But with you mentioning a router, I think it's unlikely to be driven by Network Manager.