#!/usr/bin/perl # # there should be no /etc/ppp/options on either the server or the client. # # _________________ # nirva@ishiboo.com $localip="199.79.133.241"; # first ip on net $localmask="255.255.255.240"; # 16 ips $remoteip="199.79.133.2"; # other end of link $ssh="/usr/local/bin/ssh"; $pppd="/usr/sbin/pppd"; $sshuser="vpn"; $sshhost="199.79.133.32"; foreach $maj ("p".."s") { # adjust this to the ptys you have foreach $min ("0".."9", "a".."f") { &tryopen("$maj$min"); } } die "Couldn't alloc pty\n"; sub tryopen { local($d)=@_; if (open(PTY, "+>/dev/pty$d")) { $pid=fork; defined($pid) || die "can't fork"; if ($pid) { #parent open(STDIN, "<&PTY") || die "reopen stdin"; open(STDOUT, ">&PTY") || die "reopen stout"; close PTY; print STDERR "running on tty$d; ssh=$$, pppd=$pid\n"; #system $ssh, "-vt", "-l$sshuser", "vpn", "sudo /sbin/route delete $localip"; exec $ssh, "-x", "-t", "-l$sshuser", $sshhost, \ "sudo /usr/sbin/pppd passive debug"; die "exec $ssh: $!"; } else { #child close PTY; sleep 5; print "starting pppd\n"; exec $pppd, "/dev/tty$d", "defaultroute", "local", "debug", \ "netmask", $localmask, "$localip:$remoteip"; die "exec $pppd: $!"; } } }