Once the PPP link is established, pppd looks for
/etc/ppp/ip-up. If this script exists and is executable, the
PPP daemon executes the script. This allows you to automate any special
routing commands that may be necessary and any other actions that you
want to occur every time the PPP link is activated.
This is just a shell script and can do anything that a shell script can do (i.e. virtually anything you want).
For example, you can get sendmail to dispatch any waiting outbound messages in the mail queue.
Similarly, you can insert the commands into ip-up to collect (using pop) any email waiting for you at your ISP.
There are restrictions on
/etc/ppp/ip-upis a program not a script. This means it can be directly executed - and hence it requires the standard file magic (
#!/bin/bash) at the start of the first line and must be readable and executable by root.
If you are linking two LANs, you will need to set up specific routes
to the 'foreign' LANs. This is easily done using the
script. The only difficulty arises if your machine handles multiple PPP
This is because the
/etc/ppp/ip-up is executed for EVERY ppp
connection that comes up, so you need to carefully execute the correct
routing commands for the particular link that comes up - and not when
any other link comes up!
When the link between two LANs comes up, you may well want to make sure
that email that is queued at either end is flushed - sent out to
its destination. This is done by adding the appropriate
Using the bash 'case' statement on an appropriate parameter that pppd
passes into the script accomplishes this. For example, this is
/etc/ppp/ip-up script I use to handle our WAN links and the
link to my home Ethernet (also handled on the same ppp server).
The example below provides a variety of example uses.
#!/bin/bash # # Script which handles the routing issues as necessary for pppd # Only the link to Newman requires this handling. # # When the ppp link comes up, this script is called with the following # parameters # $1 the interface name used by pppd (e.g. ppp3) # $2 the tty device name # $3 the tty device speed # $4 the local IP address for the interface # $5 the remote IP address # $6 the parameter specified by the 'ipparam' option to pppd # case "$5" in # Handle the routing to the Newman Campus server 22.214.171.124) /sbin/route add -net 126.96.36.199 gw 188.8.131.52 # and flush the mail queue to get their email there asap! /usr/sbin/sendmail -q & ;; 184.108.40.206) # Our Internet link # When the link comes up, start the time server and synchronise to the world # provided it is not already running if [ ! -f /var/lock/subsys/xntpd ]; then /etc/rc.d/init.d/xntpd.init start & fi # Start the news server (if not already running) if [ ! -f /var/lock/subsys/news ]; then /etc/rc.d/init.d/news start & fi ;; 220.127.116.11) # Get the email down to my home machine as soon as the link comes up # No routing is required as my home Ethernet is handled by IP # masquerade and proxyarp routing. /usr/sbin/sendmail -q & ;; *) esac exit 0
As a result of bringing up the ppp link to our Newman campus and this script, we end up with the following routing table entries (this machine also is our general dial up PPP server AND handles our Internet link). I have interspersed comments in the output to help explain what each entry is) :-
[root@kepler /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface # the HOST route to our remote internet gateway 18.104.22.168 * 255.255.255.255 UH 1500 0 134 ppp4 # the HOST route to our Newman campus server 22.214.171.124 * 255.255.255.255 UH 1500 0 82 ppp5 # the HOST route to my home ethernet 126.96.36.199 * 255.255.255.255 UH 1500 0 74 ppp3 # two of our general dial up PPP lines 188.8.131.52 * 255.255.255.255 UH 552 0 0 ppp2 184.108.40.206 * 255.255.255.255 UH 552 0 1 ppp1 # the specific network route to the Newman campus LAN 220.127.116.11 18.104.22.168 255.255.255.0 UG 1500 0 0 ppp5 # the route to our local Ethernet (super-netting two adjacent C classes) 22.214.171.124 * 255.255.254.0 U 1500 0 1683 eth0 # the route to the loop back device 127.0.0.0 * 255.0.0.0 U 3584 0 483 lo # the default route to the Internet default 126.96.36.199 * UG 1500 0 3633 ppp4
The previous section shows how to handle the outgoing mail - simply by flushing the mail queue once the link is up.
If you are running a WAN link, you can arrange with the network
administrator of the remote LAN to do exactly the same thing. For
example, at the Newman Campus end of our WAN link, the
/etc/ppp/ip-up script looks like :-
#!/bin/bash # # Script which handles the routing issues as necessary for pppd # Only the link to Hedland requires this handling. # # When the ppp link comes up, this script is called with the following # parameters # $1 the interface name used by pppd (e.g. ppp3) # $2 the tty device name # $3 the tty device speed # $4 the local IP address for the interface # $5 the remote IP address # $6 the parameter specified by the 'ipparam' option to pppd # case "$5" in 188.8.131.52) /usr/sbin/sendmail -q ;; *) esac exit 0
If however you have only a dynamic IP PPP link to your ISP, you need to get your email from the account on your ISPs machine. This is usually done using the POP (Post Office Protocol). This process can be handled using the 'popclient' program - and the ip-up script can automate this process for you too!
Simply create a
/etc/ppp/ip-up script that contains the
appropriate invocation of popclient. For my laptop that runs Red Hat Linux
(which I take on any travels), this is
popclient -3 -c -u hartr -p <password> kepler.hedland.edu.au |formail -s procmail
You could use slurp or whatever to do the same for news, and so forth. Remember, the ip-up script is just a standard bash script and so can be used to automate ANY function that needs to be accomplished every time the appropriate PPP link comes up.