Re: PPP serveur + getty [Ca Marche]

Top Page

Reply to this message
Author: Henry-Pascal ELDIN
Date:  
To: guilde
Subject: Re: PPP serveur + getty [Ca Marche]
Bonjour,
> Je poste ici un resumé pour ceux qui me l'ont demandé.
> Il y a des questions a la fin ;-}
>
> 0 - Host RH5.2 full install
>
> 1 - Config du mgetty (version mgetty-1.1.14-5 pour moi)
>
> a- /etc/inittab
>
> S0:23456:respawn:/sbin/mgetty -n 5 cua1



> b- /etc/mgetty+sendfax/login.config
>
> une ligne doit apparaitre comme suit :
>
> /AutoPPP/ - - /usr/sbin/pppd auth -chap +pap login



Voici une petite doc que j'ai fais car om me la demande souvent.
Config du serveur avec mgetty-1.1.12

/etc/inittab
e0:12345:respawn:/sbin/mgetty -x 4 -s 57600 -C data ttyE0
..
..
eF:12345:respawn:/sbin/mgetty -x 4 -s 57600 -C data ttyEF


mgetty/login.mgetty

/AutoPPP/ -     a_ppp   /etc/ppp/ppplogin


fichier /etc/ppp/ppplogin affection des adresses IP dynamiques
gestion de 32 modems sur deux machines ( 2 * 16 )
Cartes multiports stallion, marche aussi avec des cyclades, etc ....

#!/bin/sh

PORT=`tty | cut -d '/' -f 3`
ID=""
IP=""

# On attaque les cartes Stallion
# Determination de l'adresse IP
echo "Serveur PPP : Ok"

# Adressage dynamique

if [ "`hostname`" = "votre_hosts_1" ]; then
    if [ "`echo $PORT | cut -c1-4`" = "ttyE" ]; then
       ID=`echo $PORT | cut -c5-`
       IP=`nslookup ppp$ID.votre_domaine | tail -2 | grep Address | tr -d ' ' | cut -d ':' -f 2`
       echo "Votre adresse IP : $IP"
       exec /usr/sbin/pppd votre_hosts_1:$IP
    fi
fi


if [ "`hostname`" = "votre_hosts_2" ]; then
    if [ "`echo $PORT | cut -c1-4`" = "ttyE" ]; then
       ID=`echo $PORT | cut -c5-`
       ID=` expr $ID + 16`
       IP=`nslookup ppp$ID.votre_domaine | tail -2 | grep Address | tr -d ' ' | cut -d ':' -f 2`
       echo "Votre adresse IP : $IP"
       exec /usr/sbin/pppd votre_hosts_2:$IP
    fi
fi



echo "Vous n'etes pas autorise a lancer PPP."


fichier /etc/ppp/ip-up

#!/bin/sh
# /etc/ppp/ip-up
# V 1.0 du 23/01/1997

LOGTHEME=local2
DATE=`date +"%d/%m/%Y %H:%M:%S"`

HN=`hostname`

logger -p $LOGTHEME.notice "ip-up: $1 $6 $2 $3 $4 $5 $HN"

# script perl pour un historique des CNX necessite de modifier pppd
# avec une base msql
/etc/ppp/ip-up.pl $DATE up $6 $5 $2 $HN





fichier /etc/ppp/ip-up.pl

#!/usr/bin/perl -w
#
# (C) 1997, Les Inforoutes de l'Ardeche, Henry-Pascal ELDIN
#


#V 1.0b du 26/03/1998    ajout  de la machine


# V 1.0a du 29/08/1997    Ajout du host msql


# V 1.0 du 08/01/1997
#    Mise en Place


$host = "host_msql";
$version="1.0b";
$base="base";
$table_ppp="ppp_en_cours";

$debug=0;

use Msql;

package main;


if ($debug) { print "ip-up.pl v ",$version,"\n"; }


if ($dbh = Msql->Connect($host,$base)){
        if ($debug) {    print "Connection $host $base ok \n";}
} else {
    die "Erreur de Cnx $host: $Msql::db_errstr\n";
}


# lecture des parametres
# dans l'ordre la date sous la forme jj/mm/AAAA
#        l'heure sous la forme hh:mm:ss
#        l'etat up ou dn
#        le login ppp pap
#        l'adresse IP de l'interface    
#        le device associe
#        la machine




$date=$ARGV[0] ;
$heure=$ARGV[1];
$etat=$ARGV[2];
$login=$ARGV[3];
$adr_ip=$ARGV[4];
$device=$ARGV[5];
$machine=$ARGV[6];


if ($debug) { 
    print $date," ",$heure," ",$etat," ",$login," ",$adr_ip," ",$device,"  ",$machine,"\n"; 
}


$dbh->Query("insert into $table_ppp values
('$date','$heure','$etat','$login','$adr_ip','$device','$machine')")
or die $Msql::db_errstr;




fichier /etc/ppp/ip-down

#!/bin/sh
#/etc/ppp/ip-down
#v 1.0 du 23/01/1997
LOGTHEME=local2

logger -p $LOGTHEME.notice "ip-down: $1 $6 $2 $3 $4 $5"

DATE=`date +"%d/%m/%Y %H:%M:%S"`
#pour la mise a jour de la base msql
/etc/ppp/ip-down.pl $DATE dn $6 $5 $2


fichier /etc/ppp/ip-down.pl


#!/usr/bin/perl
#
# (C) 1997, Les Inforoutes de l'Ardeche, Henry-Pascal ELDIN
#

# V 1.2a du 29/08/1997    ajout du host



# V 1.2 du 10/03/1997
#    Mise à jour de la table clients     
#        - calcul des cnx ppp, temps de cnx



# V 1.1 du 13/01/1997
#    Modif sur la connexion est a cheval sur deux jour
#    Nouveau format de la table ppp_cnx



# V 1.0 du 08/01/1997
#    Mise en Place


$host = "host_msql";
$version="1.2a";
$base="base";
$table_ppp1="ppp_en_cours";
$table_ppp2="ppp_cnx";
$table_clients="clients";


$debug=0;

use Msql;

package main;


if ($debug) { print "ip-down v ",$version,"\n"; }


if ($dbh = Msql->Connect($host,$base)){
        if ($debug) {    print "Connection $host $base ok \n";}
} else {
    die "Erreur de Cnx $host: $Msql::db_errstr\n";
}


# lecture des parametres
# dans l'ordre la date sous la forme jj/mm/AAAA
#        l'heure sous la forme hh:mm:ss
#        l'etat up ou dn
#        le login ppp pap
#        l'adresse IP de l'interface    
#        le device associe




$date=$ARGV[0] ;
$heure=$ARGV[1];
$etat=$ARGV[2];
$login=$ARGV[3];
$adr_ip=$ARGV[4];
$device=$ARGV[5];


if ($debug) { 
    print $date," ",$heure," ",$etat," ",$login," ",$adr_ip," ",$device,"\n"; 
   }


# on recherche l'entree dans le fichier des encours
$sth=$dbh->Query("select * from $table_ppp1 where etat='up'
and login='$login' and adr_ip='$adr_ip' and dev='$device'") or die $Msql::db_errstr;



 if ( $sth->numrows != 0 )  {
    @row = $sth->FetchRow;
    $xdate=$row[0];
    $xheure=$row[1];
    $xetat=$row[2];
    $xlogin=$row[3];
    $xadr_ip=$row[4];
    $xdevice=$row[5];
if ($debug) { 
    print $xdate," ",$xheure," ",$xetat," ",$xlogin," ",$xadr_ip," ",$xdevice,"\n"; 
       }



    $dbh->Query("insert into $table_ppp2  values
    ('$xdate','$date','$xheure','$heure','$xlogin','$xadr_ip','$xdevice')")
     or die $Msql::db_errstr;


    $dbh->Query("delete from $table_ppp1 where
    date='$xdate' and heure='$xheure' and etat='$xetat' and
    login='$xlogin' and adr_ip='$xadr_ip' and dev='$xdevice'")
    or die $Msql::db_errstr;


                ($hhd,$mhd,$shd)=$xheure =~ m!(..):(..):(..)!;
                ($hhf,$mhf,$shf)=$heure =~ m!(..):(..):(..)!;


                $dtd=$shd+60*$mhd+3600*$hhd;
                $dtf=$shf+60*$mhf+3600*$hhf;


                if ($xdate eq $date)    { $temps=$dtf-$dtd; }
                else            { $temps=86400 + $dtf - $dtd;  }

    
    if ($debug)    {print "Temps = ",$temps,"s\n";     }


}


# mise à jour de la table clients
$sth=$dbh->Query("select * from $table_clients where login='$login'")
or die $Msql::db_errstr;

@row = $sth->FetchRow;
$log_ppp = $row[9];
$temps += $row[10];
$log_ppp += 1 ;

$sth=$dbh->Query("update $table_clients set log_ppp=$log_ppp , temps=$temps
where login='$login' ") or die $Msql::db_errstr;



Permettant de suivre en temps réel les connexions

fichier /usr/local/bin/netppp

#!/usr/bin/perl
#
# (C) 1997, Les Inforoutes de l'Ardeche, Henry-Pascal ELDIN
#
# V 1.0b du 26/03/1998 ajout de la machine

# V 1.0a du 29/08/1997    Ajout du host msql


# V 1.0 du 08/01/1997
#    Mise en Place


$host = "host_msql";
$version="1.0a";
$base="base";
$table_ppp="ppp_en_cours";

$debug=0;

use Msql;

package main;


$arg0=$ARGV[0];

if ($arg0 eq "" ) { $arg0 = "-h"; }


if ($debug) { print "netppp.pl v ",$version,"\n"; }


if ($dbh = Msql->Connect($host,$base)){
        if ($debug) {    print "Connection $host $base ok \n";}
} else {
    die "Erreur de Cnx $host: $Msql::db_errstr\n";
}


if ( $arg0 eq '-l' ) {
    $sth=$dbh->Query("select * from $table_ppp order by heure")  or die $Msql::db_errstr;
    while ( @row = $sth->FetchRow )       {
     print $row[3]," ",$row[0]," ",$row[1]," ",$row[4]," ",$row[5]," ",$row[6],"\n";
    }


}
elsif    ( $arg0 eq '-h' ) {
    print "netppp v$version, (c) HP Eldin 1998\n";
    print "syntaxe : netppp -h\t affiche l'aide\n";
    print "syntaxe : netppp -l\t liste les connexions ppp\n";
    print "syntaxe : netppp -d compte\t supprime le compte des connexions ppp en cours\n";
    exit 0;


}
elsif    ( $arg0 eq '-d') {
    $arg1=$ARGV[1];
    if ($arg1 eq "") { print "Compte ppp manquant !\n"; exit 0; }
    $sth=$dbh->Query("delete from $table_ppp where login = '$arg1' ")  or die $Msql::db_errstr;
    print "Compte $arg1 supprime des connexions en cours !\n";
}




>
> ppp::102:50:Login ppp:/tmp:/bin/bash
>

pas besoin avec mgetty et autoppp !


> Attention on m'a propose aussi :
> > login * mot-de-passe ( tab ou espace ! )
> > ou bien
> > login nom-du-host mot-de-passe
> Mais je n'ai pas reussi a faire fonctionner.


J'ai 800 clients comme ca et je peut dire que ca marche !


Il n'y a pas besoin de mettre l'adresse Ip dans la config win9x,
il faut cocher adresse délivré par un serveur.

> 5- points qui restent a voir
> a- pourquoi mettre deux fois le N° IP ?
> b- comment affecter une adresse IP dynamiquement ?


Voir plus haut.

> c- comment faire passer du netbeui (pour pouvoir monter les volumes NT sur le client) ?


Ben, suffit de configurer netbeui comme protocol par défaut sous wintruc,
et ajouter tcp/ip, verifier dans les propriétés de tcp/ip que netbeui est
bien encapsulé, et hop, pas de problèmes, ca tourne.


> d- pourquoi le modem client delivre une vitesse debile (de 19200 a 33600 alors que je passe par le reseau telephone interne de ma boite (N° interne)) ?


Ben tout dépend du modem d'en face ....

> e- comment avoir plusieurs modems sur un meme pc ? (si il y en a deux ou trois je vois bien (3 ports series ca se fait), mais 10 ou 20 modems la je sais plus?


Cartes stallion ( 16, 32 ports ) cyclades ( 16 32 ports ) etc ....

> f- comment faire du call back (c'est a dire que le modem deccroche, identifie le client, raccroche, attends (delta T) redeccroche, compose le n° du client et etablit la
> liaison (economie de tel pour nos client commerciaux) ?


J'ai un répertoire /usr/src/mgetty-1.1.12/callback ?
jamais essayer, voir ce que ca fait 8-)))

> 6- proposition :
>
> S'il y a des volontaires pour m'aider, j'ecrirai bien un mini howto pour resumer les operations (complet : PPPD server+ getty+ pppclient)
>


J'veux bien filer un coup de main, l'ppp, c'est mon truc.

-- 
Cordialement,
Henry-Pascal ELDIN                  
        Administration Systeme et Réseau de la Plateforme Internet du 
    Syndicat Intercommunal à Vocation Unique des Inforoutes de l'Ardèche 
                 http://www.inforoutes-ardeche.fr