Fedora VPN client and routing

This post is second part of Configuring VPN client. After completion steps in previous post, VPN will work with starting pppd and manually adding route. With a few PHP lines and configuration of ip-up.local file, VPN connection can be automated and reduced to only one script.

And it can look like:

# start a VPN connection
vpn.php start
# stop a VPN connection
vpn.php stop

I choose PHP for scripting, but it can be Bash or Perl as well. Please save PHP file as vpn.php and set permissions to 755.

#! /usr/bin/php
<?
// define usage message
$usage = 'Usage: ' . basename($argv[0]) . " {start|stop|}\n";

// test number of input parameters (first parameter is script itself)
if ($argc != 2)	exit($usage);
// second parameter should be 'start' or 'stop'
if ($argv[1] != 'start' && $argv[1] != 'stop') exit($usage);

// start a VPN connection (route is defined in /etc/ppp/ip-up.local)
if ($argv[1] == 'start')	
	system('cd /etc/ppp/peers/; /usr/share/doc/ppp-2.4.4/scripts/pon my_vpn');
else // or stop a VPN connection
	system('/usr/share/doc/ppp-2.4.4/scripts/poff -a');
?>

Final step – create /etc/ppp/ip-up.local file with the following content:

#!/bin/bash
/sbin/route add -net x2.y2.w2.0 netmask 255.255.255.0 dev ppp0 

This script is executed right after pppd starts. Don’t forget to set execute permissions or route will not be added. I also experimented with “route add” directly in the PHP script, and the result was: SIOCADDRT: No such device. I suppose that “route add” tried to start before pppd initialization finished. After “route add” was placed to the /etc/ppp/ip-up.local file, error has disappeared. VPN and route were correctly started.

Leave a Comment