Réseau au lycée

Ce qui suit représente les notes prises lors de l'installation d'un réseau au lycée. Ces notes sont imparfaites: Le travail étant assez important, je rédige ce document au fur et à mesure en fonction des problèmes rencontrés, ainsi je n'ai eu aucune difficultés avec NFS et NIS, les parties correspondantes sont assez résumées. DNS m'a donné un peu plus de fil à retordre et j'ai rédigé quelque chose de bcp plus complet. Quoi qu'il en soit, ce document va évoluer et devrait se révéler exploitable par tous. Il faut aussi noter que l'ordre est chronologique. Ainsi, la configuration de NFS évolue au fur et à mesure des parties de 1 à 6. L'intérêt de ce document ne m'est apparu qu'en cours de rédaction; la fin est donc plus détaillée que le début assez sommaire.

Version du Mardi 13 Mai 2001

Pour aller à la partie:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

1 = Première Machine
2
= Serveur NFS et NIS
3 = Utilitaires rajoutés
4 = Deuxième machine
5 = Fabrication disquette de secours
6 = Le fichier /etc/exports
7 = Mise en place sur le serveur de la distribution DEBIAN
8 = Première configuration d'une machine à partir du serveur
9 = Amélioration de la disquette de secours
10 = Script de fabrication d'une machine (+)
11 = Fichier lilo.conf des clients (+)
12 = Serveur DNS (++)
13 = Imprimante en réseau (+)
14 = Soucis carte réseau (+)
15 = Mise en place mode Caml
16 = Serveur Samba et machine W95 (++)
17
= Remarque sur des points de configuration (++)
18
= Installation de quelques utilitaires dont sudo (+)
19
= Installation de VNC (Virtual Network Computing) (++)
20
= Mise en place des r-commandes
21 = Mise en place d'une passerelle/routeur
22 = Mise en place d'un serveur Apache
23 = Scripts divers
24 = Problème de sécurité
25 = Problème divers
26 = Amélioration des machines sous Windows 95 (++)
27 = Installation d'ADSL (+++)
28 = Améliorations sur ADSL (++)
29 = Amélioration de la sécurité
30 = Synchronisation des horloges, éxecution de commandes en « remote »
Les (+) sont des points intéressants à mon avis.

Contact: fboisson@worldnet.fr

Serveur premier réseau salle 405

-> Nom du réseau: rebelles

-> Gateway: 192.168.1.2

-> Broadcast: 192.168.1.255

-> Nom du domaine NIS: galaxie

Conseils utiles de (entre autres) Michel Quercia (linux) et Pascal Angerand. Nombreux renseignements pêchés sur Internet et une remarque aux spécialistes qui répondent "rtfm": "Si on n'a jamais entendu parlé de LPRng, comment peut-on être mis au courant de son existence si ce n'est en demandant autour de soit comment faire avec LPR?"

Va au début

1) Première machine

Compaq avec

-> carte ATI Rage 3D II

-> Souris PS2 (/dev/psaux -t ps2 + blabla)

-> Carte réseau: 3c905B

Nom: yoda

adresse: 192.168.1.1



/etc/hostname = nom

/etc/hosts = table des adresses

/etc/networkd= noms de réseaux <-> adresse réseaux

/etc/host.conf = ordre de résolution des noms)

/etc/resolv.conf=technique de recherche des adresses.

La carte a été intégrée au noyau par les options de compilations suivantes:

#
# Network device support
#
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
# CONFIG_EQUALIZER is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
CONFIG_NET_ETHERNET=y
CONFIG_NET_VENDOR_3COM=y
# CONFIG_EL1 is not set
# CONFIG_EL2 is not set
# CONFIG_EL3 is not set
# CONFIG_3C515 is not set
CONFIG_VORTEX=y
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_EISA is not set
# CONFIG_NET_POCKET is not set
# CONFIG_TR is not set
# CONFIG_FDDI is not set
# CONFIG_ARCNET is not set

Va au début

2) Serveur NFS:

/etc/exports = liste des répertoire exportés avec les droits.

Pour le moment:

/home

Sur le client, rajout à /etc/fstab de la ligne

yoda;/home /home nfs auto 0 0



Serveur NIS:

Domaine NIS: galaxie

Précision du type de la machine sur /etc/init.d/nis

A faire sur les machines:

Client: Rajouter à /etc/passwd la ligne "+::::::"

Serveur: Editer le fichier /var/yp/Makefile et faire make



Les utilisateurs nouveaux doivent être créés sur le serveur (pas pratique, prévoir un script)



Modification de mot de passe: yppasswd

commande: yppcat, yppwhich

Va au début

3) Utilitaires divers ajoutés sur le serveur:

trafshow, strobe, netwatch, statnet, tcpspray. Finalement, je ne les ai pas utilisé.

Va au début

4) Deuxième machine

Pentium avec

-> carte S3 Trio 64V+

-> Souris série ms (/dev/mouse -t ms + blabla)

-> Carte réseau: Realtek 8139 type NE2100

Nom: luke

adresse: 192.168.1.3

Va au début

5) Fabrication de disquette de secours avec un noyau reconnaissant les deux cartes réseau.

Le répertoire bin contient

[ df gunzip mkfifo sh
arch dircolors gzip mknod sln
ash dmesg head more stty
cat dnsdomainname hostname mount sync
chgrp du ipmask mv tar
chmod echo kill ps test
chown elvis killall pwd touch
compress false ln rm true
cp find loadkeys rmdir umount
cut ftp login sed uname
date getopt ls setserial vi
dd getoptprog mkdir setterm zcat

le répertoiree sbin contient

agetty fsck.hpfs kbdrate mklost+found shutdown
badblocks fsck.minix killall5 mkswap swapdev
clock fsck.msdos klogd mkxfs swapoff
debugfs fsck.umsdos ksyms mount swapon
dosfsck fsck.xiafs losetup pidof syslogd
dumpe2fs genksyms mkdosfs psupdate telinit
e2fsck halt mke2fs ramsize tune2fs
extend hwclock mkfs rdev umount
fdisk ifconfig mkfs.ext2 reboot update
flushb init mkfs.minix rootflags vidmode
fsck initscript mkfs.msdos route xfsck
fsck.ext2 insmod mkfs.xiafs runlevel

Le tout avec un noyau 2.0.37. Seule la libc5 est utilisée, cela gagne près de 100K sur le répertoire /bin et permet à l'ensemble de tenir sur une disquette root (dite root de secours) de 1440M.

La technique est assez simple.

La disquette boot est une disquette format minix ou ext2 avec un système de fichier classique (/dev, /sbin, /boot, /etc, ...) permettant de booter, etc. Le plus simple est de partir d'une disquette déjà faite et de la modifier.

On la rend bootable par LILO en ayant soin de mettre un noyau adapté et assez général. Ainsi, la disquette utilisée permet au boot de reconnaitre des cartes 3C905B, Realtek8139 NE2000, NETflex intégrée Compaq, comporte les souris PS2, l'imprimante parallèle, le protocole TCP/IP, etc. Le noyau obtenu est assez gros.

Le fichier LILO est le suivant (début):

boot = /dev/fd0
install=/mnt/boot/boot.b
map=/mnt/boot/map.lilo
prompt
timeout = 300
message = /mnt/etc/lilo.msg
# End LILO global section
# ------------------------------------ Ramdisk
image = /mnt/boot/vmlinuz.2.0.37
root = /dev/fd0
label = ram
read-only
append = "load_ramdisk=1 prompt_ramdisk=1 ramdisk_start=0"
# ------------------------------------ 1er disque ide
image = /mnt/boot/vmlinuz.2.0.37
root = /dev/hda1
label = a1
read-only
image = /mnt/boot/vmlinuz.2.0.37
root = /dev/hda2
label = a2
read-only
image = /mnt/boot/vmlinuz.2.0.37
root = /dev/hda3
....

etc pour chaque disque dur bootable.

La conception de la disquette racine est plus subtile:

Faire

# espace disque
dd if=/dev/zero of=gregre count=8192
# système de fichiers
mke2fs disque
# Là, rappel à l'ordre, ça n'est pas une disquette
mke2fs 1.10, 24-Apr-97 for EXT2 FS 0.5b, 95/08/09
gregre is not a block special device.
Proceed anyway? (y,n) y
Linux ext2 filesystem format
Filesystem label=
1024 inodes, 4096 blocks
204 blocks (4.98%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group

Writing inode tables: done
Writing superblocks and filesystem accounting information: done
# On monte le système obtenu
mkdir root
mount -o loop disque root

A ce niveau, on fabrique sa disquette "root" en mettant en place le système de fichiers sous ce repertoire "root". Ce sera le système de fichiers qui sera monté sur le RAMDISK lors de l'utilisation des disquettes. Une fois ce système fini, on fabrique l'image compressée:

# démontage
umount root
# ZIP
gzip disque
# copie sur la disquette
dd if=disque.gz of=/dev/fd0

Il faut faire attention que le fichier doit tenir sur la disquette. Ne pas hésiter à compresser au maximum mais surtout, il faut éviter les manipulations de fichiers (move, remove, etc) répétées lors de la conception de "root". En effet, le fichier disque est initialisé à "0", un fichier crée puis démoli remplace ces zéros bien régulier par des données irrégulières difficilement comprimables. On peut gagner plus de 15% dans la taille du fichier final en faisant attention.



Enn ce qui concerne le contenu de cette disquette:

La connection réseau de cette disquette se fait par le fichier

/etc/rc.d/rc.inet1

#! /bin/sh
#
# rc.inet1 This shell script boots up the base INET system.
#
# Version: @(#)/etc/rc.d/rc.inet1 1.01 05/27/93
#
HOSTNAME=`cat /etc/HOSTNAME`
# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.

# Edit for your setup.

IPADDR="192.168.1.254" # REPLACE with YOUR IP address!
NETMASK="255.255.255.0" # REPLACE with YOUR netmask!
NETWORK="192.168.1.0" # REPLACE with YOUR network address!
BROADCAST="192.168.1.255" # REPLACE with YOUR broadcast address, if you

# have one. If not, leave blank and edit below.
GATEWAY="192.168.1.2" # REPLACE with YOUR gateway address!

# Uncomment the line below to initialize the ethernet device.
/sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}

# Uncomment these to set up your IP routing table.

/sbin/route add -net ${NETWORK} netmask ${NETMASK} eth0
#/sbin/route add default gw ${GATEWAY} netmask 0.0.0.0 metric 1

Ce lot de deux disquettes permet également d'installer facilement une nouvelle machine.



La disquette porte l'IP 192.168.1.254 et le nom SOS.

Elle seule a pleinement accès au repertoire /home/halt du serveur (qui ne sert qu'à ça) pour des transferts éventuels.



Va au début

6)Partage du fichier /usr. En fait les repertoires exportés deviennent un peu compliqués:

/usr.export et /usr.enmodif sont des liens vers /usr/exporte sur le serveur. Il n'y a donc aucun lien entre le /usr serveur et le /usr client.

/texmf.export est un lien vers /usr/texmf.exporte et contient les fontes de TeX.

Nom sur Serveur

Nom sur client

Ligne /etc/export

/home

/home

(rw)

Aucun droit de root client

/usr.export

/usr

(rw)

Aucun droit de root client

/usr.enmodif

/usr

luke(rw,no_root_squash)

root client = root serveur sur la machine luke

/home/halt

Montage non automatique

SOS(rw,no_root_squash)

root client=root serveur

/texmf.export

/var/spool/texmf

(rw)

Aucun droit de root client

/divers/client

Montage non automatique

luke(rw,no_root_squash)

root client = root serveur sur la machine luke

Le "no_root_squash" signifie que l'utilisateur "root" de la machine client récupère les droits du "root" du serveur. C'est une option dangeureuse car permettant de modifier des fichiers importants partagés.

Le fichier lui même est le suivant

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/home (rw)
/usr.export (rw)
/texmf.export (rw)
/usr.enmodif luke(rw,no_root_squash)
/debian luke(ro)
/divers/client luke(rw,no_root_squash)
/home/halt SOS(rw,no_root_squash)
/divers SOS(rw,no_root_squash)
/ obiwan(ro,no_root_squash)

Les deux dernières entrées, non présentes dans le tableau, permettent pour la première d'avoir un répertoire pour la machine "disquette de secours" (i.e SOS), et pour la seconde de pouvoir faire un backup complet du serveur sur la machine "obiwan".

Le 2 Juin, j'ai rajouté d'autres entrées en (ro) exportant des fichiers utiles par exemples les fichiers CAB de WIN95.



Va au début

7) Installation de la distribution Debian sur le serveur avec la distribution contrib. Il peut être intéressant d'y ajouter des paquets locaux MAIS se méfier des mises à jour automatiques faites par dselect: Parce qu'il y avait une libc6 + récente dans le repertoire ...stable/local/binary-i386, l'installation d'un paquet anodin par dselect à entrainé une mise à jour automatique de libc6 ainsi que d'autres installations automatiques.

Seule la machine "luke" a la possibilté d'installer des logiciels (en modifiant le répertoire

Localisation de xdvi dans le module tmview, de xload, xmem etc dans le paquet xcontrib. Il m'aura fallu 3 semaines!!!

(cf ci-dessus)

La commande copydir se trouve dans le paquet mirrordir.

De même, le serveur DNS est dans le paquet "bind".

Va au début

8) vérification que l'on peut installer une machine à partir du réseau. Le principe est le suivant:



a)La machine luke possède seule la faculté d'installer un logiciel. Une configuration de base a été faite (cf + loin).

b)Un script assez simple permet de copier les repertoires bin, sbin, boot, etc, var, etc sur la serveur en /divers/client tout en y créant les repertoires /msdos (pour y monter /dev/hda1 = partition DOS FAT165 ou VFAT), /tmp, /proc (indispensables), /usr (exporté depuis le serveur).

c)On prend une machine non installée, éventuellement sans CDROM. Puis

-> On boote sur les disquettes "root de secours" et on monte le disque msdos sous /mnt. On profite alors du réseau pour mettre sur le disque msdos un logiciel de partage de disque (Magic Partition par exemple) présent sous un répertoire (/home/halt par exemple).

-> Boot sous DOS et dégagement d'une place de 100-120M environ pour la partition linux et la partiton swap à l'aide de ce logiciel.

-> Boot sous les disquettes "root de secours".

- Installation de 2 partitions, une swap de 20-30M environ, le reste pour la racine.

- Création du swap (mkswap) puis activation du swap (swapon).

- Création de la partition racine (mke2fs) puis installation. (Mkdir /machine et mount sous /machine).

- montage de serveur:/divers/client sous /mnt et exécution de

copydir /mnt/* /machine

- Personalisation de la machine (adresse IP, nom ,etc)

-> Reboot sur la disquette mais en précisant que la racine est la nouvelle crée. Exécution de lilo.

-> C'est fini.



Il reste à écrire des scripts de démarrage rendant la personalisation simple.

Va au début

9) Modification de la disquette "root de secours". Incorporation de less à la place de more, rajout des périphériques manquants. Tentative de ls en couleurs!!

Il suffit en fait de faire alias ls="ls --color"

Va au début

10) Rédaction d'un script de personnalisation des machines à mettre dans /sbin/faitmachine exécuté après installation.

(J'avais pensé le faire à chaque lancement mais c'est finalement + simple de la faire à la demande)

#!/bin/sh
# machine 1 = machine assemblée Vitry
Loc_MACHINE=1
Loc_IPADRESSE=192.168.1.4
Loc_HOSTNAME=R2D2
Loc_NFSNAME=rebelles
Loc_NISNAME=galaxie

# export Loc_MACHINE Loc_IPADRESSE Loc_HOSTNAME Loc_NFSNAME Loc_NISSNAME
# Fabrication de /etc/hostname
echo $Loc_HOSTNAME > /etc/hostname
# Fabrication de /etc/defaultd
echo $Loc_NISNAME > /etc/defaultd
# Fabrication de /etc/motd
exec 3> etc/motd
echo >&3
echo >&3
echo "Machine($Loc_MACHINE) $Loc_NFSNAME.$Loc_HOSTNAME" >&3
echo "Adresse $Loc_IPADRESSE" >&3
echo >&3
echo >&3
echo "Noyau Linux 2.0.37, Lycée Charlemagne Paris" >&3
echo >&3
echo >&3
exec 3>&-

# Fabrication de /etc/init.d/network
exec 3> /etc/init.d/network
echo "#! /bin/sh" >&3
echo "ifconfig lo 127.0.0.1" >&3
echo "route add -net 127.0.0.0" >&3
echo "IPADDR=$Loc_IPADRESSE" >&3
echo "NETMASK=255.255.255.0" >&3
echo "NETWORK=192.168.1.0" >&3
echo "BROADCAST=192.168.1.255" >&3
echo "GATEWAY=192.168.1.2" >&3
echo "ifconfig eth0 \${IPADDR} netmask \${NETMASK} broadcast \${BROADCAST}" >&3
echo "route add -net \${NETWORK}" >&3
echo "[ \"\${GATEWAY}\" ] && route add default gw \${GATEWAY} metric 1" >&3
exec 3>&-

# Configuration de X
cp /etc/X11/XF86config_$Loc_MACHINE /etc/X11/XF86config


Le principe est brutal mais assez efficace.

Pour X, le principe est simple, il y a un fichier XF86config_$[Numéro de la machine]. Il suffit donc de faire une copie de XF86config_$[Numéro de la machine]. Cela permet quoi qu'il arrive de partir sur un fichier de configuration sain de XF86config.

Depuis, ce script s'est compliqué au fur et à mesure des différentes machines. En fait, les fichiers dépendant des machines se sont révélés être:

/boot/vmlinuz (le noyau) ; J'aurais du mettre des modules

/boot/System.map ; carte du noyau

/etc/lilo.conf ; à cause des machines Compaq

/etc/gpm.conf ; souris PS2 ou série

/etc/Xserver ; serveur X utilisé

/etc/XF86Config ; config X

Ces fichiers existent dans chaque version, pour chacunn, on fait lors de "faitmachine"

cp nom_du_fichier.$Loc_MACHINE nom_du_fichier



Va au début

11) Adaptation du fichier lilo.conf

Celui ci est de la forme suivante



# Boot sur disque IDE 1
boot=/dev/hda
compact
# Nom des images : dos et linux
prompt
install=/boot/boot.b
map=/boot/map
vga=normal
message=/boot/message
# Image linux
password=tagada
single-key
# /vmlinuz pointe vers le noyau
image=/vmlinuz
label=linux
alias=1
restricted
read-only
root=/dev/hda2

other=/dev/hda1
restricted
label=dos
alias=2

où le fichier message est le suivant:

Lycée Charlemagne, Paris 4ème

-> Pour lancer Linux, taper "linux" ou bien appuyer sur "1"
-> Pour lancer Windows 95, taper "dos" ou bien appuyer sur "2"

Il est inutile de taper sur <shift>, le clavier est en QWERTY

Va au début

12) Serveur DNS. Celui n'a pas été simple à mettre au point. En gros.

On charge le paquet "bind" en laissant "dpkg" faire la configuration standard. Puis:

-> On modifie le fichier /var/named/named.boot

Pour cela il faut éventuellement "virer" le serveur "cache" mis par défaut et déclarer le serveur primaire du domaine rebelles:

;
; Boot file for name server
;

directory /var/named
; type domain source file
; cache . named.root

; Zone boot information and daemon options are kept in other files

include boot.zones
include boot.options

(Remarquer le ; devant "cache"), une alternative consiste à remplacer le fichier named.root (le cache) contenant les adresses des serveurs DNS d'INTERNET par le fichier suivant ne contenant que le serveur local i.e lui-même:

; Cache local, un seul serveur, yoda

. 3600000 IN NS yoda.rebelles.
yoda.rebelles. 3600000 IN A 192.168.1.1

(Solution retenue finalement).

-> On définit les deux serveurs primaires dans le fichier boot.options:

;
; Options for name server
; Use `bindconfig' to automatically configure this file
;
; type domain source file
primary localhost named.local
primary 127.in-addr.arpa named.rev-local

;; Custom configurations below (will be preserved)

primary rebelles named.rebelles
primary 1.168.192.in-addr.arpa named.rev-rebelles



On peut noter qu'il y a déjà 4 serveurs déclarés. Deux desservent le domaine 127 (i.e les adresses 127.?.?.?) Dont l'unique entrée est la machine locale. Le domaine localhost est le domaine contenant la machine "localhost" tandis que le domaine 127.in-addr.arpa est le domaine des adresses commençant par 127 soit ici la seule machine localhost. Cela se traduit par les fichiers named.local:

;
; BIND data file for local loopback interface
;
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Default TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1


et named.rev-local:
;
; BIND reverse data file for local loopback interface
;
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Default TTL
;
@ IN NS localhost.
1.0.0 IN PTR localhost.

Les données sont constituées des dernières lignes:

"@ IN A 127.0.0.1" dit que la machine locale (i.e @ mais je crois qu'on aurait pu mettre localhost) est d'adresse (donnée type "A") 127.0.0.1.

La ligne "1.0.0 IN PTR localhost." signifie que la machine "1.0.0.127.in-addr.arpa" soit 127.0.0.1 est la machine (champ "PTR") localhost. Il faut absolument mettre le point après localhost sur la ligne

Sur ce même modèle, on définit les deux domaines rebelles et 1.168.192.in-addr.arpa (qui sont en fait les mêmes) par les fichiers named.rebelles:

;
; BIND data file for local loopback interface
;
@ IN SOA yoda.rebelles. root.yoda.rebelles. (
1 ; Serial
604800 ; Délai de mise à jours DNS sec: 1 semaine
86400 ; Délai de reconnection si echec ci-dessus
2419200 ; Validité DNS secondaire si DNS primaire mort
604800 ) ; validité par défaut des adresses
; Nom du serveur
@ IN NS yoda.rebelles.
; le serveur
yoda IN A 192.168.1.1
; le serveur de secours
obiwan IN A 192.168.1.20
; machine prof d'installation
luke IN A 192.168.1.3
; machine type Ivry
R2D2 IN A 192.168.1.4
R2D3 IN A 192.168.1.5
R2D4 IN A 192.168.1.6
R2D5 IN A 192.168.1.7
R2D6 IN A 192.168.1.8
R2D7 IN A 192.168.1.9
R2D8 IN A 192.168.1.10
R2D9 IN A 192.168.1.11
; machine type Compaq
1PO IN A 192.168.1.21
2PO IN A 192.168.1.22
3PO IN A 192.168.1.23
4PO IN A 192.168.1.24
5PO IN A 192.168.1.25
6PO IN A 192.168.1.26
7PO IN A 192.168.1.27
8PO IN A 192.168.1.28
9PO IN A 192.168.1.29
; disquettes de secours
SOS IN A 192.168.1.254

et named.rev-rebelles:

;
; Base d'adresses inverses pour rebelles
;
@ IN SOA yoda.rebelles. root.yoda.rebelles. (
1 ; Serial
604800 ; Délai de mise à jours DNS sec: 1 semaine
86400 ; Délai de reconnection si echec ci-dessus
2419200 ; Validité DNS secondaire si DNS primaire mort
604800 ) ; validité par défaut des adresses
; Nom du serveur
@ IN NS yoda.rebelles.
; le serveur
1 IN PTR yoda.rebelles.
; le serveur de secours
20 IN PTR obiwan.rebelles.
; machine prof d'installation
3 IN PTR luke.rebelles.
; machine type Ivry
4 IN PTR R2D2.rebelles.
5 IN PTR R2D3.rebelles.
6 IN PTR R2D4.rebelles.
7 IN PTR R2D5.rebelles.
8 IN PTR R2D6.rebelles.
9 IN PTR R2D7.rebelles.
10 IN PTR R2D8.rebelles.
11 IN PTR R2D9.rebelles.
; machine type Compaq
21 IN PTR 1PO.rebelles.
22 IN PTR 2PO.rebelles.
23 IN PTR 3PO.rebelles.
24 IN PTR 4PO.rebelles.
25 IN PTR 5PO.rebelles.
26 IN PTR 6PO.rebelles.
27 IN PTR 7PO.rebelles.
28 IN PTR 8PO.rebelles.
29 IN PTR 9PO.rebelles.
; disquettes de secours
254 IN PTR SOS.rebelles.

Notons que dans le deuxième cas, les adresses tiennent sur un seul chiffre complètent le "192.168.1" du domaine "1.168.192.in-addr.arpa".



Sur le serveur comme sur les machines clients, l'utilisation du serveur DNS se fait par les fichiers

/etc/host.conf:
order hosts,bind
multi on

indiquant qu'on regarde d'abord dans le fichier "hosts" contenant en l'occurrence:

127.0.0.1 localhost
192.168.1.1 yoda.rebelles yoda
192.168.1.254 SOS.rebelles SOS
192.168.1.3 luke.rebelles luke
192.168.1.4 r2d2.rebelles r2d2

(Origine historique) puis on fait appel à "bind" (le serveur de nom), et /etc/resolv.conf contenant

search rebelles
nameserver 192.168.1.1

Indiquant que les adresses sont éventuellement à compléter par rebelles et que le serveur d'adresses est à l'adresse 192.168.1.1.

Après quelques mois d'usage, quelques remarques et modifications:

Va au début

13) Imprimante. Problème. Les imprimantes réseau ne peuvent pas être appelée avec un filtre d'entrée dans "printcap"; celui ci est ignoré. Le filtre du serveur semble ne pas intervenir également. La solution semble être le paquet LPRng qui est un serveur lpr, lpd, lpc, lpq lprm bcp + élaboré.

L'installation du paquet LPRng doit être précédée de la suppression du paquet LPR. L'installation de la Lexmark S1255 s'est faite alors très simplement

-> sur le serveur par magicfilterconfig, le filtre utilisé est gs600, l'imprimante étant mis en mode Ghostscript. Le filtre ljet4 a donné des résultats corrects en mode PCL mais de temps en temps, l'imprimante se bloquait en attente de caractères. Une autre imprimante, nommée gl, (alias goldo ou "Lexmark sans filtre") permet d'accéder directement à l'imprimante laser sans utiliser le filtre d'entrée.

-> sur les clients, l'imprimante est simplement déclarée comme étant lp@yoda, sans filtre d'entrée.

Le tout marche très bien.

Va au début

14) Quelques soucis avec les cartes réseaux:

Les ordinateurs sont équipés de 3 types de cartes:

-> le serveur avec une 3COM 905

-> un ou 2 Compaq avec une carte intégrée type Netflex

-> Le reste avec des clones NE2000 équipées Realtek8139 (il fallait tenir dans la ligne de crédit Info du lycée ou alors attendre le mois de Septembre pour mettre en place le réseau... et quand je pourrai le faire alors dans ce cas ... à minuit???)

Il n'y a eu AUCUN problème avec les machines dites assemblées, cependant les machines Compaq m'ont causé du souci.Ci dessous, le message posté au forum "fr.comp.os.linux.configuration"

Bonjour,

Professeur au lycée Charlemagne, Paris, je suis en train de basculer une
salle de 16 machines W95 en un petit réseau fondé sur Linux et appelé à
s'étendre. Du point de vue soft, pas trop de problèmes (mis à part le fait
qu'il me faut des binaires Maple Linux, le lycée ayant les licenses W95
pouvant se convertir mais cela est hors due propos). J'ai installé un serveur NIS,
NFS un un primaire DNS. Le tout fonctionne, merci les Howto et Dejanews.
Cela étant, devant serrer les budgets, j'ai acheté pour toutes les machines
(excepté le seeveur qui a une 3C905) des cartes PCI compatibles NE2000
fondé sur la Realtek 8139. Je n'ai eu aucun souci sur les machines "assemblées",
par conntre la région a fourni en deux ou trois vagues des Compaq Deskpro
(au moins trois sortes) qui me posent des problèmes:
En effet, si je laisse le Noyau Linux avec le pilote rtl8139 démarrer sans
indication, le réseau se "bloque" au moment du lancement de X,
le HUB indiquant des "collisions" et le Compaq signalant le serveur
indisponible (NIS, NFS et DNS primaire sont sur la meme machine, on verra
+ tard une éventuelle répartition). De +, ce blocage affecte alors
au moins les machines branchées sur le même Hub
Une consultation de /proc montre que le Compaq a partagé la même
interruption,la 11, entre la carte Video (ATI Rage 3D ou Matrox Millenium), et la carte
réseau. J'ai donc pensé à un conflit d'interruptions.. La souris, une PS2
sur /dev/psaux, plante également de temps en temps au démarrage mais
j'ignore si elle utilise une interruption.
J'ai donc essayé de "booter" avec la ligne
ether=10,0x0,eth0
afin de forcer la carte réseau à utiliser l'interruption 10 (libre). Après
le boot, ça marche mieux, MAIS un cat /proc/pci me montre que les cartes
utilisent les mêmes interruptions!! Rien ne devrait être changé mais, apparemment
tout va mieux. Voulant comprendre pourquoi l'interruption n'est pas modifié,
je patche le driver en essayant de forcer l'interruption à 10 (au niveau des
lignes 370 de rtl8139.c sachant que PCI_SUPPORT_VER2 n'est pas défini
dans ma configuration). Mais rien de bon, visiblement, le problème est au
niveau du BIOS Compaq qui attribue la meme interruption aux différentes cartes.

1) Est ce normal que "ether=10,0x0,eth0" ne donne pas les résultats prévus?
2) Est ce normal que cela marche mlgré tout mieux? i.e /proc/pci
reflète-t-il la situation réelle?
3) Le problème de la souris se plantant de temps à autre a-t-il un lien?
4) Quelqu'un a-t-il rencontré ce problème et a-t-il une solution?
5) Pourquoi n'ai je des problèmes qu'avec les machines "constructeurs" et
pas les machines "assemblées"?
6) L'age du capitaine?



Merci à ceux qui ont suivi jusqu'ici et encore merci à ceux qui ont une
idée ou une suggestion!!

L'ensemble des machines tournent avec des Pentium, les noyaux sont des
2.0.37 avec les drivers dans le noyau (pas en modules). La distribution est une
Debian 2.0.

François BOISSON
Lycée Charlemagne, Paris

Je n'ai pas eu de réponse à ce jour.

Je n'ai pas de suggestions à la question 1. Pour la question 2, je pense que cela force linux à installer d'abord la carte réseau PUIS les autres cartes. La carte réseau est peut être servie en premier sur l'interruption commune et les problèmes disparaissent. Cela expliquerait pourquoi le lancement de X est accompagné souvent d'une erreur de transmission (imperceptible) sur un paquet.

Va au début



15) Mode Caml. Caml est installé à partir du paquet Debian trouvé sur le site de distribution. Cependant, le mode caml pour emacs n'y est pas inclus. Il a fallu donc reprendre les sources caml (cl74unix.tar.gz), les compiler (pas de problèmes merci Pierre Weiss), puis la compilation des fichiers du repertoire "contrib". Deux problèmes se posent à l'installation:

-> Erreur à l'édition de lien de camltk. -ltk non reconnu

-> Les fichiers définissant le mode caml sont installés sous /usr/lib/emacs/site-lisp au lieu de /usr/share/emacs/site-lisp. Il suffit d'établir un lien.



Va au début

16) Connection avec Windows

Soit en clair installation de Samba. Cela n'a pas été très simple. Lors de l'installation du paquet j'ai finalement choisi le lancement direct des démons et le cryptage des mots de passes. Puis, j'ai édité le fichier "smb.conf" et modifié ce qui suit:

encrypt passwords = no ; Il parait que W95 ne sait pas faire
null passwords = yes ; autorise les mots de passe vides
workgroup = LYCEE ; définit le groupe de travail
wins support = yes ; c'est une bourde à mon avis, YODA deviendrait un serveur WINS ?
local, domain, preferred master = yes ; là aussi je ne maitrise pas vraiment, simplemennt à un moment Windows réclamait un serveur maitre alors n'ayant que yoda sous la main, voilà mais ça n'a rien changé!

Dans le chapitre [home]
read only = no ; afin que l'on puisse écrire dans son répertoire.

Tout le reste a été laissé aux valeurs par défaut.

Sur les machines W95, il faut installer

-> La carte réseau:

2 problèmes rencontrés ici: La cohabitation avec un Winmodem. Je me suis contenté de virer ce dernier, le lycée n'ayant plus de liaison Internet (merci Jussieu et Allègre) et la carte Netflex intégré à un Compaq et mal gérée par W95 installé par le constructeur: UN COMBLE! A noter que j'ai transféré via Linux les CAB windows 95 du CDROM d'installation sur des vieilles machines dont je ne retrouvais plus les disquettes W95. Cela n'a pas posé de problèmes sauf que chaque fois que W95 demande si il faut laisser une version plus récente d'un ficjier Windows, il faut répondre NON contrairement à ce qu'il suggère.

-> un protocole TCP/IP fourni par Microsoft. Il se paramètre par l'onglet Propriétés, on déclare l'adresse IP de la machine, son nom (nom d'hôte), le nom du domaine (rebelles), l'adresse DNS est celle de YODA, pas de WINS.

-> Un client réseau Microsoft paramétré en connexion rapide, pas d'ouverture de session sous serveur NT. (c'est ça qui lui fait réclamer un serveur maitre au début!)

Il faut également paramétrer l'identification avec le nom de la machine et le nom du groupe de travail, accès niveau ressource ou niveau utilisateur avec demande à YODA, je n'ai pas vu de différence.

Lors du début d'une session Windows95, il suffit de rentrer son nom ainsi que son mot de passe "linux". On a alors accès à un repertoire "home" ainsi que deux imprimantes "goldo" et "lexmark" représentant les imprimantes de "yoda" et son répertoire personnel, tout cela sous l'ordinateur "YODA" que l'on découvre dans le "voisinage réseau" (avec une certaine joie je dois dire). L'imprimante à déclarer à Windows95 est "goldo" (i.e la "Lexmark" sans filtre d'entrée) avec le pilote adéquat (ici, l'IBM/Lexmark GS600 pour une imprimante S1255). On a la très grande joie de pouvoir imprmer une page de test parfaite.



Va au début



17) Quelques remarques sur la configuration.

Où root peut se "logger"?: C'est précisé dans le fichier /etc/securetty. Par défaut, il est impossible de se logger en root par "telnet" sur une autre machine.

Comment réserver la console au "log" de root par exemple?: Cela est décrit dans /etc/inittab, il suffit de remplacer "/sbin/getty" par "/bin/login root"

Comment trouver le fichier correspondant à un paramètre?: Cela s'est souvent posé à moi comme problème. Linux est bien fait, la doc est complète mais en Anglais et utilisable si on a déjà une idée de ce que l'on manipule. Le principe est que tous les fichiers sont commentés et sont commentés en Anglais. D'autrepart les fichiers de configurations sont sous /etc. J'ai bcp utilisé le script suivant:



#!/bin/bash

find $1 -type f | xargs grep $2



trouve <dir> <chaine> liste tous les fichiers sous <dir> contenant la chaine <chaine>

Où se trouvent les fichiers de limitations pour les utilisateurs? /etc/security/limits.conf et pour des propriétés de groupes /etc/security/group.conf



Va au début



18) Installation de sudo et exemple d'utilisation.

Le paquets sudo permet à des utilisateurs selectionnés de pouvoir exécuter des commandes avec le SUID (numéro d'utilisateur) et GIUD (numéro de groupe) à 0 (= root). Il se programme via le fichier /etc/sudoers que l'on peut éditer de manière controlée par "visudo". Ainsi, autoriser aux profs la commande "su" se fait par

#
# Sample /etc/sudoers file. (Assumes SunOS 4.x paths)
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for the details on how to write a sudoers file.
#
##
# User alias specification
##
User_Alias PROFS=boisson,wirth
##
# Cmnd alias specification
##
Cmnd_Alias CMNDPROF=/usr/bin/su
##
# Host alias specification
##
##
# User specification
##
# root and users in group wheel can run anything on any machine as any user
root ALL=(ALL) ALL
PROFS ALL=CMNDPROF

Les profs pourront utiliser la commande su via sudo. On peut éventuellement limiter cette commande à tout sauf su root via la ligne

PROFS ALL=/usr/bin/su ?*, !/usr/bin/su root

Par ce moyen, il est possible de créer une commande "espion" renvoyant sur la machine du professeur l'écran d'un élève. C'est le script suivant:

Commande: espion <nom de l'élève> <nom de sa machine>

#!/bin/sh
# prend l'identité de l'élève
sudo su $1 -c "xwd -root -display $2:0 > /tmp/__espion"
xwud < /tmp/__espion
sudo su $1 -c "rm /tmp/__espion"

Va au début

19) Installation de VNC (Virtual Network Computing) sous Linux et Windows 95.

VNC est un système assez sophistiqué créant un serveur X sous Linux ou bien un serveur "Bureau" sous Windows 95 sur lesquels peuvent se connecter une ou plusieurs machines qui peuvent ou non intervenir sur la session. On peut ainsi faire une démonstration de Maple, Scilab, session Emacs, etc devant une classe. Le système ou tourne le client (vncviewer) est indépendant du système ou tourne le serveur. Ce système est présenté dans le Magazine Linux numéro 7 mais avec une version du vncviewer sous Linux qui est buggée. Par contre le paquet Debian actuel (vncserver_3_3_2r2-4.deb) demande xbase-clients qui correspnd au paquet xbase installé. "dpkg" refuse de l'installer, ce crétin (logique). Finalement, j'ai utilisé pour Linux la version "Serveur" de Linux magazine, pour client le petit paquet xvncviewer_3_3_2r2-4.deb de la distribution Debian. Pour W95, j'ai utilisé les programmes fournis par Linux magazine qui ont l'air plus stable que ceux pour Linux. La configuration est assez simple, pour W95, rien à faire une fois l'installation finie, assez bizarrement, les serveur ne peut se configurer qu'une fois lancé. Plusieurs options dont la plus utile est la possibilité pour les clients d'agir ou non. Lors du premier lancement du serveur, il est demandé un mot de passe nécessaire après pour connecter chaque "viewer". La connection se fait sous Linux par

xvncviewer -shared -viewonly <machine:numéro_de_display>

et sous W95 par le lancement de "vncviewer" avec les options cochées et <machine:numéro_de_display> entré dans une boite de dialogue. Le numéro de display est celui du serveur soit enn général 1 sous Linux (0 si X n'est pas lancé au préalable) et 0 sous W95. L'ensemble est assez spectaculaire et à l'air plus stable en mode non interactif.



Va au début



20) Mise en place des r-commandes.

Ces dernières permettent entre autres d'effectuer des commandes sur des machines autres sans avoir à se logguer dessus. Le principe repose sur la définition de "machines" de confiances ou d"utilisateurs" de confiance déclarés dans les fichiers hosts.equiv. Le plus simple a été de mettre dans les fichiers /etc/hosts.equiv des machines les lignes

NOM_D_UNE_MACHINE

-NOM_D_UNE_MACHINE halt

pour chaque machine.

Il est alors possible de se "logger" sur n'importe quelle machine connectée par "rlogin <machine>" ou bien d'éxécuter une commande donnée sur une machine par rsh <machine> commande.

Va au début

21) Installation d'une passerelle. Celle ci est testé sur un vieux 486 SX 25 (12M + 170M sur disque dur) avec un modem Olitec 56K externe pour éviter tout problème. La machine porte le nom de "stargate" et l'adresse IP 192.168.1.2. La ligne +::::: a été supprimé de /etc/passwd de manière à limiter le travail sur cette machine. Les problèmes rencontrés sont:

-> à l'installation de Linux sur la machine. Il faut penser à installer un noyau compilé avec l'émultion coprocesseur et avec du binaire 486. Bien évidemment, ne pas avoir l'idée saugrenue de compiler le noyau sur la machine elle même. X fonctionne mais avec une vidéo minimale.

-> test de la connexion Internet, malgré le préchi précha de M. Allègre, il n'y a pas d'abonnement au lycée et je prend ma connexion personnelle. Attention, les fichiers /var/log/syslog, /var/log/ppp.log, /var/log/debug ainsi que l'éxecution de la console sont accessibles à M. Tout-lemonde et contiennent les mots de passe de la connection Internet. Cela peut être gênant.

Effectivement, une fois la connection ppp établie, seul la passerelle est connue du serveur Internet et des pings effectués des autres machines ne marchent pas. Il faut donc faire du leurre d'IP (IP masquerade). Pour cela, le noyau doit être compilé avec les options FIREWALL, IP_FORWARD, IP_FIREWALL, IP_FIREWALL_VERBOSE et IP_MASQUERADE.

Le reroutage des paquets avec modification des adresses IP se fait avec les commandes suivantes que l'on peut mettre dans /etc/init.d/network par exemple.

ipfwadm -F -p deny # règle par défaut
ipfwadm -F -a masquerade -S 192.168.1.0/24 -D 0.0.0.0/0

Les adresses xxx.yyy.zzz.ttt/n sont les adresses IP concernés (S=source, D=destination, n=nombres de bits significatifs à partir de la gauche). A cela, il faut inviter le noyau à faire le transfert des paquets, parfois, par défaut l'option est de ne pas faire ce transfert. Cela se trouve dans /proc/sys/net/ipv4/ip_forward. Il faut qu'il y ait "1". Cela se force par

echo "1" > /proc/sys/net/ipv4/ip_forward.

Le fichier /etc/network doit être modifié

#!/bin/sh
ifconfig lo 127.0.0.1
route add -net 127.0.0.0
IPADDR=192.168.1.2
NETMASK=192.168.1.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
# GATEWAY=192.168.1.2 ; ça c'est les autres machines
ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
# ça c'était la configuration de la carte réseau
route add -net ${NETWORK}
# rajoute la deuxième ligne dans la table ci dessous.
# [ "${GATEWAY}" ] && route add default gw ${GATEWAY} metric 1

La dernière ligne mise en commentaire n'aurait de toute façon pas été executée puis GATEWAY n'est plus défini.
La table de routage est la suivante:

Destination Gateway Genmask Flags Metric Ref Use Iface
194.206.169.93 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 6 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 2 lo
0.0.0.0 194.206.169.93 0.0.0.0 UG 0 0 0 ppp0

alors que les ports de sortie sont

lo: Link encap:Local Loopback
inet addr:127.0. 0.1 Bcast:127.255.255.255 Mask:255.O..0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:60 errors:0 dropped:0 overruns:0 f rame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
Collisions: O

eth0: Link encap:Ethernet HWaddr 52:54:4C:1A:6A:62
inet addr:192.168.1.2 Bcast :192.168.1.255 Mask: 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3322 errors:0 dropped:0 overruns:0 f rame:0
TX packets:2856 errors:0 dropped:0 overruns:0 carrier:0
Collisions: O
Interrupt:3 Base address:0x300

ppp0: Link encap: Point-to-Point Protocol
inet addr:195.3 .16.163 P-t-P:194.206.169.93 Mask:255.255.255.0
UP POINTOPOINT RUNNING MTU:1524 Metric:1
RX packets:1196 errors:7 dropped:7 overruns:0 frame:0
TX packets:1270 errors:0 dropped:0 overruns:0 carrier:0
Collisions : O
Memory: 5c0038-5c0c34

On voit bien que les paquets non locaux sont envoyés par défaut sur 194.206.169.93 (dernière ligne de la table de routage) i.e sur le port ppp0 (première ligne de la table). L'adresse IP de la machine coté Provider (i.e l'adresse IP coté ppp0 n'apparait pas dans la table de routage). Il est important de noter que les PINGs ne marchent que si le noyau est compilé avec l'option IP_MASQUERADE_ICMP, étant d'un format particulier. C'est écrit en tout petit dans les options du noyau ce qui est pénible. Le PING étant LE test!!

A l'issue de cela, la connexion marche bien. Le DNS, purement local, doit repointer sur des serveurs de noms extérieurs. Cela se fait en restaurant le fichier /var/named/named.root initial et en rectifiant éventuellement le fichier /var/named/named.boot. Voilà le contenu du fichier /var/log/ppp.log lors d'une connexion:

Dec 6 18:59:49 stargate pppd[189]: pppd 2.3.5 startted by root, uid 0
Dec 6 18:59:51 stargate chat [190]: abort on (BUSY)
Dec 6 18:59:51 stargate chat[190]: abort on (NO CARRIER)
Dec 6 18:59:51 stargate chat [190] : abort on (VOICE)
Dec 6 18:59:51 stargate chat [190] : abort on (NO DIALTONE)
Dec 6 18:59:51 stargate chat [190] : abort on (NO ANSWER)
Dec 6 18:59:51 stargate chat [190]: send (ATZ~ M)
Dec 6 18:59:51 stargate chat [190]: expect (0K)
Dec 6 18:59:51 stargate chat [190] : ATZ~M~M
Dec 6 18:59:51 stargate chat [190] : 0K
Dec 6 18:59:51 stargate chat [190] : -- got it
Dec 6 18:59:51 stargate chat [190] : send (ATDT00140356868 ^M)
Dec 6 18:59:51 stargate chat [190] : expect (CONNECT)
Dec 6 18:59:51 stargate chat [190] :
Dec 6 19:00:18 stargate chat [190] : ATDT00140356868~M~M
Dec 6 19:00:18 stargate chat[190]: CONNECT
Dec 6 19:00:18 stargate chat [190]: -- got it
Dec 6 19:00:18 stargate chat [190]: send (\d)
Dec 6 19:00:19 stargate pppd[189] : Serial connection established.
Dec 6 19:00:20 stargate pppd[189]: Using interface pppO
Dec 6 19:00:20 stargate pppd[189] : Connect: pppo <--> /dev/modem
Dec 6 19:00:20 stargate pppd[189] : sent [LCP ConfReq id=Oxl <asyncmap OxO> <m
Dec 6 19:00:23 stargate pppd[189]: sent [LCP ConfReq id=Oxl <asyncmap OxO> <m
Dec 6 19:00:24 stargate pppd[189] : rcvd [LCP ConfReq id=Oxl < 00 04 00 00> <m

Il ne reste plus qu'à installer diald. diald, disponible sur la distribution, se configure par les fichiers sous /etc/diald. C'est assez long à mettre au point. Il est tout d'abord nécessaire d'inclure le mode SLIP dans le noyau, diald étant fondé sur ce mode. En gros, si la connection est une connection ppp nommé provider (défaut de pppconfig), les fichiers sont les suivants (sans les commentaires):

Fichier /etc/diald/diald.options:
mode ppp
pppd-options noauth name lycee.charlemagne
proxyarp
device /dev/modem
connect "/usr/sbin/chat -v -f /etc/chatscripts/provider"
debug
speed 38400
lock
crtscts
local 192.168.1.2
remote 192.168.0.1
dynamic
reroute
defaultroute
ip-up /etc/diald/ip-up ; voir plus bas
ip-down /etc/diald/ip-down ; voir plus bas
# addroute "/etc/diald/trajet"
include /etc/diald/standard.filter

La table de routage obtenue est différente:

Destination Gateway Genmask Flags Metric Ref Use Iface
194.168.0.1 0.0.0.0 255.255.255.255 UH 1 0 0 sl0
195.3.16.119 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 6 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 2 lo
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 14 ppp0
0.0.0.0 0.0.0.0 0.0.0.0 U 1 0 11 sl0

alors que les ports de sorties sont (lo non compris)

eth0: Link encap:Ethernet HWaddr 52:54:4C:1A:6A:62
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask: 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3309 errors:0 dropped:0 overruns:0 f rame:0
TX packets:2913 errors:0 dropped:0 overruns:0 carrier:0
Collisions: O
Interrupt:3 Base address:0x300

sl0: Link encap:Serial Line IP
inet addr:192.168.1.2 P-t-P: 192.168.0.1 Mask: 255.255.255.0
UP POINTOPOINT RUNNING MTU:1500 Metric:l
RX packets:0 errors:0 dropped:0 overruns:0 f rame:0
TX packets:65 errors:0 dropped:0 overruns:0 carrier:0
Collisions : O

ppp0: Link encap:Point-to-Point Protocol
inet addr:195.3 .16.119 P-t-P:194 .206.169.92 Mask:255.255.255.O
UP POINTOPOINT RUNNING MTU:1500 Metric:l
RX packets:71 errors:0 dropped:0 overruns:0 trame:O
TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
Collisions : O
Memory: 8ee038-8eecO4

Le port sl0 est nécessaire à diald (pour tester si la ligne est coupée ou non je pense). Mais la table de routage est différente: la première ligne sert sans doute à diald, l'adresse 192.168.0.1 étant un testde connexion. La deuxième ligne ne sert plus puisque l'adresse correspond à la machine elle même (bizarre ça) et que de toute façon, l'avant dernière ligne indique que par défaut tout est envoyé sur la ligne ppp0.

Voilà ce que donne traceroute de chez moi au routeur:
$ /usr/sbin/traceroute 212.27.43.32
traceroute to 212.27.43.32 (212.27.43.32), 30 hops max, 40 byte packets
1 sad-p01.paris.worldnet.net (194.206.169.92) 142.463 ms 149.377 ms 119.789 ms
2 195.3.6.129 (195.3.6.129) 119.848 ms 119.597 ms 119.848 ms
3 hssi.worldnet.net (195.3.0.26) 129.825 ms 139.663 ms 129.825 ms
4 giga000.mtp1.isdnet.net (194.149.183.252) 149.828 ms 129.606 ms 139.919 ms
5 hssi0-sfinx.isdnet.net (195.154.10.1) 129.763 ms 139.647 ms 119.875 ms
6 proxad.gix-paris.ft.net (194.68.129.223) 129.785 ms 119.633 ms 119.839 ms
7 paris11-1-r1.routers.proxad.net (212.27.32.161) 149.846 ms 149.658 ms 149.842 ms
8 nas-paris11-2.routers.proxad.net (212.27.32.201) 159.897 ms 159.607 ms 139.888 ms
9 paris11-nas2-43-32.dial.proxad.net (212.27.43.32) 329.828 ms 329.647 ms 320.44 ms
/home/francois
$

et de yoda.rebelles à chez moi
$ /usr/sbin/traceroute 195.3.16.223
traceroute to 195.3.16.223 (195.3.16.223), 30 hops max, 40 byte packets
1 stargate.rebelles (192.168.1.2) 1.663 ms 1.652 ms 1.212 ms
2 paris11-nas2-42-254-gw.dial.proxad.net (212.27.42.254) 209.399 ms 158.957 ms 139.879 ms
3 paris11-2.routers.proxad.net (212.27.32.194) 159.961 ms 158.747 ms 159.871 ms
4 paris11-1.routers.proxad.net (212.27.32.193) 150.054 ms 198.62 ms 150.316 ms
5 sfinx.routers.proxad.net (212.27.32.167) 169.54 ms 198.754 ms 170.252 ms
6 isdnet.gix-paris.ft.net (194.68.129.250) 179.466 ms 249.266 ms 179.733 ms
7 hssi1-0-0-mtp-1.isdnet.net (195.154.10.2) 190.004 ms 169.119 ms 179.849 ms
8 worldnet-gw.isdnet.net (194.149.183.245) 179.866 ms 218.852 ms 189.983 ms
9 d2r2.worldnet.net (195.3.0.25) 179.974 ms 229.035 ms 189.853 ms
10 sad-p03.paris.worldnet.net (194.206.169.94) 229.87 ms 218.874 ms 159.97 ms
11 wn16-223.paris.worldnet.fr (195.3.16.223) 299.834 ms 989.184 ms 410.279 ms
/home/boisson
$

On peut remarquer que ce n'est pas symétrique.

Cette installation est provisoire en attendant l'abonnement ADSL du lycée.

Va au début

22) Installation d'un serveur Apache.

L'idée est de permettre aux utilisateurs sous Windows95 de modifier leur mot de passe via un script CGI et de pouvoir consulter une documentation en ligne. Linstallation d'un paquet Apache se fait sans trop de difficultés. Dans les modules, il faut choisir les modules par défauts plus au moins celui permettant le passage d'environnement aux scripts CGI. Cela donne la session suivante:

yoda:/divers/debian/hamm/hamm# dpkg -i ./binary-i386/web/apache_1.3.0-2.deb
Sélection du paquet apache précédemment déselectionné.
(Lecture de la base de données ... 24329 fichiers et répertoires déjà installés.)
Dépaquetage de apache (à partir de .../web/apache_1.3.0-2.deb) ...
Paramétrage de apache (1.3.0-2) ...

Installing new configuration file /etc/apache/httpd.conf ...
Installing new configuration file /etc/apache/access.conf ...
Installing new configuration file /etc/apache/srm.conf ...
Installing new configuration file /etc/apache/cron.conf ...
An Apache configuration exists, but needs some tweaking.

Your config files will not be modified until you select Y at "save changes."
Enter the email address of your server administrator. This address
will be used in error messages allowing users to submit reports of
faulty links or misconfigured cgi-programs to you. It should be an email
address that corresponds to a human.
Who should the ServerAdmin be? [you@your.address] boisson@yoda.rebelles

The Apache server will serve documents from a directory called the
document root or server root. You must specify such a directory for
the server to work: /var/www is recommended.

What should the DocumentRoot be? [/var/www]
Created directory /var/www.
Fixing: L'appartenance de /var/www a été attribué à root.www-data
Installing your new homepage in /var/www.

This release of the Apache server can be configured to load only certain
modules into memory. This program can automagically configure Apache
so only modules that are actually needed are loaded.

Do you want to manually choose which modules to load? [y/N] y

Support for passing environment to CGI? [y/N] y
Support for configurable logfiles [required]? [Y/n]
Support for regex based translations [standard]? [Y/n]
Support for determining document types [required]? [Y/n]
Support for content negotiation [required]? [Y/n]
Support for server status info? [y/N] y
Support for server configuration info? [y/N] y
Support for server-parsed HTML (XBitHack)? [y/N]
Support for automatic directory listings [required]? [Y/n]
Support for index.html indices [required]? [Y/n]
Support for CGI scripts [required]? [Y/n]
Support for sending raw HTTP data? [y/N]
Support for imagemaps? [y/N]
Support for filetype-based scripts? [y/N]
Support for automatic URL spell-correction? [y/N]
Support for user home directories [required]? [Y/n]
Support for caching proxy service? [y/N]
Support for aliases and redirects [required]? [Y/n]
Support for host-based access control [required]? [Y/n]
Support for basic authentication [standard]? [Y/n]
Support for anonymous-FTP authentication? [y/N]
Support for dbm-file authentication? [y/N]
Support for db-file authentication? [y/N]
Support for MD5 authentication? [y/N]
Support for HTTP header metafiles? [y/N]
Support for custom expiration times [standard]? [Y/n]
Support for arbitrary HTTP headers? [y/N]
Support for clickstream logs? [y/N]
Support for unique hit identifiers [standard]? [Y/n]
Support for recognizing UserAgents [required]? [Y/n]
Per-user bandwidth limit support? [y/N]
...

Il faut également modifier le fichier srm.conf de tellle manière à autoriser l'éxécution de script CGI. Il faut décommenter la ligne

#AddHandler cgi-script .cgi.

Le serveur est maintenant près.

Il faut également modifier le routeur pour que le serveur soit accessible de l'extérieur. Cela se fait par le paquet ipportfw. Il faut modifier le noyau en appliquant un patch. J'ai appliquer au noyau 2.0.38 le patch du noyau 2.0.36. Seul le fichier Config.in sous ipv4 a du être repatché à la main. Installation d'une libc6 plus récente, compilation du noyau. Reboot du routeur à distance et ajout de la règle

ipportfw -t -A <adresse IP locale>/80 -D 192.168.1.1/80

permet de se connecter via le modem (i.e le routeur) au serveur localisé sur Yoda (192.168.1.1).

Cette règle est gérée automatiquement par « diald » en rajoutant les lignes

ip-up /etc/diald/ip-up
ip-down /etc/diald/ip-down

dans le fichier diald.options. Les deux fichiers ip-up et ip_down sont les suivants:

ip_up:
#!/bin/sh
iface=$1
netmask=$2
localip=$3
remoteip=$4
metric=$5
#
# La règle proprement dite!!
#
ipportfw -A -t $localip/80 -R 192.168.1.1/80

ip_down:
#!/bin/sh
#
# $Id: ip-down,v 1.2 1996/12/04 20:36:33 gv Exp $
#
# Sample diald ip-down script -- GV
#
iface=$1
netmask=$2
localip=$3
remoteip=$4
metric=$5

ipportfw -D -t $localip/80

Va au début

23) Scripts divers
Plusieurs scripts utiles:

Script de connection automatique à internet se décomposant en une commande d'envoi de mail (sendfb) et un script de connection:
Commande sendfb m'envoyant un fichier en mail:
#!/usr/bin/perl
use Net::SMTP;
$serveur = "smtp.free.fr";

$smtp = Net::SMTP->new($serveur);
$smtp->mail("lycee.charlemagne\@free.fr");
#$smtp->to("lycee.charlemagne\@free.fr");
$smtp->to("Francois BOISSON\<fboisson\@worldnet.fr\>");
$smtp->data();
$smtp->datasend("Subject: lycee charlemagne\n");
open(FIC,$ARGV[0]);
while($ligne=<FIC>) {
print $ligne ;
$smtp->datasend ($ligne)
}
$smtp->dataend();
$smtp->quit;
close($ARGV[1]);

Script de connection:
#!/bin/sh
ping -c 50 www.altavista.fr > /dev/null
ifconfig > /tmp/__connection
sendfb /tmp/__connection
ping -c 1200 www.altavista.fr > /dev/null

Mis dans la table de cron à 21heures, je reçois chez moi le résultat de la commande ifconfig. L'adresse IP est l'adresse local du port ppp0. Un telnet sur cette adresse me permet de m'y connecter.

Rapports des machines (serveur et routeur) pour avoir l'état des lieux:
rapport de yoda.rebelles (le serveur)
#!/bin/sh
cat /var/log/syslog | grep telnet > /tmp/rapport
cat /var/log/syslog | grep " in\." | grep -v "in\.fingerd.*yoda\.rebelles" >> /tmp/rapport
cat /var/log/syslog | grep "mount" | grep -v "192.168.1" >> /tmp/rapport
cat /var/log/syslog | grep "mount" | grep "tried" >> /tmp/rapport
cat /var/log/auth.log | grep root >> /tmp/rapport
cat /var/log/auth.log | grep ROOT >> /tmp/rapport
/usr/local/bin/sendfb /tmp/rapport
rm /tmp/rapport

Rapport de stargate.rebelles (la passerelle/routeur/parfeu)
#!/bin/sh
cat /var/log/syslog | grep telnet > /tmp/rapport
cat /var/log/syslog | grep .*diald.*local.* >> /tmp/rapport
cat /var/log/syslog | grep .*diald.*Closing.* >> /tmp/rapport
cat /var/log/syslog | grep " in\." | grep -v "in\.fingerd.*yoda\.rebelles" >> /tmp/rapport
cat /var/log/auth.log | grep root >> /tmp/rapport
cat /var/log/auth.log | grep ROOT >> /tmp/rapport
/usr/local/bin/sendfb /tmp/rapport
rm /tmp/rapport

Script permettant de savoir si une machine est allumé ou sous Windows 95:
#!/bin/sh
finger @$1 2> /tmp/__sonde
cat /tmp/__sonde |
sed -e '1,$s/finger: connect: No route to host//' |
sed -e '1,$s/finger: connect: Connection refused/Machine sous W95/'

Script de sauvegarde sur la machine obiwan.rebelles
#!/bin/sh
mount /dev/hda5 /backupserveur
# rm -R *
# if [-e /home/public/stargate.tgz]; then
# rm /backupserveur/stargate.tgz
# mv /home/public/stargate.tgz /backupserveur
# fi
cd /
mount yoda:/ /serveur
echo "Copie des fichiers\n"
cp -dpf /serveur/usr.* /backupserveur
cp -dpf /serveur/System.map /backupserveur
cp -dpf /serveur/texmf* /backupserveur
cp -dpf /serveur/debian /backupserveur
rm -R /backupserveur/SOS.root
cp -dpRf /serveur/SOS.root /backupserveur
echo "Copie des repertoires\n"
rm /backupserveur/home.tgz
# cp -dpRf /home /backserveur
tar czf /backupserveur/home.tgz /home
cp -dpRf /serveur/tftpboot /backupserveur
cp -dpRf /serveur/bin /backupserveur
cp -dpRf /serveur/boot /backupserveur
cp -dpRf /serveur/dev /backupserveur
cp -dpRf /serveur/etc /backupserveur
cp -dpRf /serveur/initrd /backupserveur
cp -dpRf /serveur/lib /backupserveur
cp -dpRf /serveur/root /backupserveur
cp -dpRf /serveur/sbin /backupserveur
cp -dpRf /serveur/tmp /backupserveur
cp -dpRf /serveur/usr /backupserveur
cp -dpRf /serveur/var /backupserveur
umount /serveur
umount /backupserveur

Va au début

24) Modifications diverses et problèmes de sécurité.

Plusieurs modifications de faites:
- Ajout sur le serveur d'une racine afin de pouvoir booter sur NFS root, l'intérêt est de disposer d'une racine convenable même sur des machines avec 8M de RAM.
- Modifications des machines: Noyau 2.0.38, Drivers cartes Tealtek8139 plus récent qui supprime la saturation du réseau, ajout de Ted et Lyx. Définition dans /etc/skel de .netscape afin de définir les paramètres par défaut (dont page de démarrage et bookmark)

Sécurité: J'ai rapatrié et compilé « john the ripper ». Testé sur les 230 mots de passe des élèves, 190 étaient trouvés au bout d'une heure dont le mien, celui de root, etc. 200 au bout de 4 heures, 210 au bout de 48 heures. J'ai donc mis les mots de passe en « shadow ». Cela s'est fait simplement par la création du fichier /etc/shadow sur le serveur avec la mise à jour de /etc/passwd. Le fichier de configuration de NIS /var/yp/Makefile est modifié de telle manière à exporter /etc/shadow. Sur les clients, le fichier /etc/shadow est terminé par +:::::::: pour aller lire la suite par NIS lors d'un login.

Cela ne sert à rien, un ypcat shadow.byname sur une machine client permet d'obtenir tous les mots de passe cryptés. La solution consiste à remettre les mots de passe dans /etc/passwd et à configurer yp dans /etc/ypserv.conf de telle manière à ce que les mots de passe apparaissent sous forme d'un 'x' lors d'un ypcat passwd. Cela n'empêche pas quelqu'un d'obtenir cette liste par interrogation plus précise de NIS par une interrogation directe du démon je pense mais cela complique considérablement la tâche. La solution trouvée semble satisfaisante.

Va au début

25) Divers ennuis

Suite à l'installation de Ted, j'ai installé une moitié de X3.3.5, le reste étant X3.3.2. Les fichiers de configuration ont changé. De plus j'ai oublié de mettre les 'locales' dans /etc/profile. J'ai fini par faire un mécanisme de mise à jour au boot des machines:

Fichier de mise à jour à exécuter :/home/boisson/misajour

#!/bin/sh
SOURCE=/home/public/special
if [ \! -e /FINI ]; then
echo "execution de la mise à jour"
# Remplacement du profile
cp -dpf $SOURCE/profile /etc/profile
echo "Profile mis à jour"
cp -dpf $SOURCE/Xsession /etc/X11/Xsession
echo "Xsession mis à jour"
rm -R /etc/X11/Xresources
cp -dpRf $SOURCE/Xresources /etc/X11/Xresources
echo "Répertoire Xresources refait"
cp -dpf $SOURCE/xdm/* /etc/X11/xdm
echo "xdm refait"
echo "Signaler tout problème à F. Boisson"
touch /FINI
fi

Fichier qui exécute la mise à jour sur chaque machine: /etc/init.d/misajour

#!/bin/sh
MAINTENEUR=boisson
if [ -e /home/$MAINTENEUR/misajour ]; then
echo "Fichier de mise à jour trouvé"
/home/$MAINTENEUR/misajour
fi
if [ -e /home/$MAINTENEUR/finmisajour ]; then
echo "Fichier de fin de mise à jour trouvé"
rm /FINI*
fi



Lancement de ce fichier: Lien sous /etc/rc2.d/S98misajour
lrwxrwxrwx 1 root root 18 mar 17 12:31 rc2.d/S98misajour -> ../init.d/misajour

Le fichier /etc/profile est le suivant:

LC_CTYPE=ISO-8859-1
LC_ALL=fr_FR
# (ou fr_BE, fr_CA, fr_CH, fr_LU ...)
LANG=fr
LESSCHARSET=latin1
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
PS1="\\$ "
PROMPT_COMMAND=pwd
PAGER=less
export PATH PS1 PAGER LC_CTYPE LC_ALL LANG LESSCHARSET
umask 002

Va au début

26) Amélioration de la sécurité avec Samba

Beaucoup d'élèves se connectent en « local » et peuvent faire beaucoup de choses ainsi. Dans la pratique tout sauf imprimer et encore il leur suffit de modifier les paramètres définissant l'imprimante. Ça n'est pas satisfaisant. Une « leçon » de Windows 95 avec Pierre Douillet (Luminy 2000) et la lecture de Nullix (il n'est pas un pro-Linux ce qui donne de la valeur à ces conseils sur Windows.
Le principe est le suivant:

-> Sur Samba:
Rajout des options suivantes:
[global]
domains logon = yes
logon script = letsgo.bat
logon path = \\%N\%U\profile
# cela indique où se trouve les fichiers définissant le profil des utilisateurs

[netlogon]
path = /var/windows/netlogon
# Emplacement des scripts
writeable = no
guest ok = no

-> Sur les machines Windows 95
Cela se fait en cinq étapes
Étape 1
Créer dans son répertoire [home] un répertoire profile que l'on peut laisser vide au démarrage

Étape 2
Créer sous DOS un fichier letsgo.bat que l'on mettra sous le répertoire /var/windows/netlogon. Dans ce script, on peut faire plusieurs choses: Personnellement,
J'aligne les horloges Serveur/Client: NET time \\YODA /SET /YES
Je supprime les mots de passe de tout le monde: DEL \windows\*.pwl
J'inscris les paramètres de la connexion dans un fichier:
NET config > \SESSION_EN_COURS

Étape 3
- Sous Panneau de Configuration/Mots de Passe: Attacher « Menu » et « Bureau » au profil utilisateur. NE PAS REBOOTER
- Sous Voisinage Réseau[Propriété]/Contrôle d'accès: Demander contrôle niveau utilisateur géré par le serveur SAMBA (ici YODA)
- Sous Voisinage Réseau[Propriété]/Identification: Mettre le nom du groupe de travail (= nom de domaine aussi ici) LYCEE
- Sous Voisinage Réseau[Propriété]/Configuration[Client microsoft sélectionné]/Propriétés: Mettre ouvrir la session sur un domaine WindowsNT dont le nom est celui du groupe de travail (là je n'ai pas tout compris mais ça marche) soit LYCEE, mette également connexion rapide.
- Reboot

Étape 4
Après le Reboot, ouvrir une session sous son nom et attendre. Le script se déroule puis les profils n'étant pas définis, ils sont crées dans le répertoire profile ainsi qu'une copie de USER.DAT. Se faire un beau bureau avec un menu adéquat. Puis, cela fait, charger le fichier suivant dans la base de registres (le nommer TT.REG et cliquer dessus):
REGEDIT4

[HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Run]
@="C:\\WINDOWS\\RUNDLL32.EXE user.exe,ExitWindows"

Cela entraîne l'arrêt de la machine dans le cas d'une connexion en mode local. En clair, obligation d'être connecté au serveur.

Étape 5
Sur le serveur, recopier le répertoire profile ainsi que tous les répertoires home des utilisateurs en prenant soin de changer les noms des propriétaires de manière récurrente.

Voilà, ça marche.

Va au début

27) Installation de l'ADSL

France Telecom est enfin venu installé le modem ADSL. C'est un modem Alcatel. Il faut adapter le routeur à cela.

La première partie consiste à préparer la machine. Compte tenu du futur trafic, il est nécessaire de prendre un Pentium 75 avec deux cartes réseaux. Les cartes sont des Realtek 8139. Le noyau est directement celui récupéré sur le 486 (non optimisé pour le Pentium mais tant pis). La configuration se fait par la déclaration de la présence de 2 cartes dans la configuration de lilo:

image=/vmlinuz
label=linux
alias=1
append="ether=0,0,eth0 ether=0,0,eth1"
restricted
read-only
root=/dev/hda2

Cela assure la reconnaissance des 2 cartes réseaux. La carte eth0 est configurée usuellement et est connecté au réseau local. La deuxième est connecté via un cable (croisé?) au modem. Je sais qu'il est possible de connecter le modem à un Hub via un alias mais cela m'a paru plus compliqué et plus brouillon. L'autre carte est configurée en même temps qu'ADSL.

Puis il faut installer le protocole pptp et configurer le modem. Pour cela, le ADSL Howto est très bien fait:
Installation du paquet pptp patché vu un bug du modem Alcaltel (paquet pptp-alcatel.tar.gz). La configuration proprement dit se fait à l'aide de scripts bash.
Un script /etc/init.d/adsl (start|stop|restart) appelé avec un lien S90ADSL -> ../init.d/adsl contenant

#! /bin/sh
#
# skeleton example file to build /etc/init.d/ scripts.
# This file should be used to construct scripts for /etc/init.d.
#
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
# Modified for Debian GNU/Linux
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=ADSL
DESC=" ADSL"
# test -f $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
/usr/local/bin/ADSLstart
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
/usr/local/bin/ADSLstop
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
/usr/local/bin/ADSLstop
/usr/local/bin/ADSLstart
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

Script très original donc. Les véritables scripts sont en fait les suivant mis dans /usr/local/bin:
Démarrage:

#!/bin/sh
#
# on vire d'éventuelles traces non désirées
#
#
rm -rf /var/run/pptp/
#
#
# paramétrage de eth1
#
ifconfig eth1 10.0.0.10 up
#
# adresse IP estampillé Alcatel 100%
#
#
# Comment l'atteindre
#
route add -host 10.0.0.138 eth1
#
# Bon, établissement connexion pptp et ppp
#
#
pptp 10.0.0.138
#
# là il faut attendre la liaison ppp
#
echo "On attend le modem, c'est long!"
while ! (ifconfig | grep "ppp0"> /dev/null) ;
do echo "" > /dev/null ;
done
#
# Ca y est, Noël, ppp est là
#
# 1) détruire une éventuelle route par défaut
#
route del default gw `route -n|awk '$1=="0.0.0.0" {print $2}'| head -1`
#
#
# 2) Rajouter le PPP par défaut comme passerelle, on récupère l'adresse dans
# le ifconfig ppp0
#
route add default gw `ifconfig ppp0 | grep "P-t-P" | awk '{print $3}' | cut -d ':' -f 2`
#
# routage fait
#
# Autorisation du forwarding au cas où il n'a pas compris!
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
#
# Mis en place du leurre d'adresse
#
# Défaut
#
ipfwadm -F -p deny
#
# THE règle
#
ipfwadm -F -a masquerade -S 192.168.1.0/24 -D 0.0.0.0/0
#
#
# et maintenant le Forwarding de port pour que les requêtes Web aillent
# sur Yoda
#
# `ifconfig etc etc` = adresse IP locale on peut la récupérer
#
ipportfw -C
ipportfw -A -t 192.168.1.2/80 -R 192.168.1.1/80
ipportfw -A -t `ifconfig ppp0 | grep "P-t-P" | awk '{print $2}' | cut -d ':' -f 2`/80 -R 192.168.1.1/80
#
# bon cette stupidité de mail ne marche plus faute à wanadoo
# alors on met à jour la page de Web !!
#
makegoto > gotolycee.html
sendIPftp
rm gotolycee.html
#
# On envoie l'IP à bibi (mail ci dessus, remplacer smtp.wanadoo.fr par smtp.wanadoo.com)
#
getip > /tmp/__conADSL
sendfb /tmp/__conADSL > /dev/null

Arrêt

#!/bin/sh
killall pppd
killall pptp
rm -rf /var/run/pptp

Assez brutal en fait. Plusieurs scripts sont utilisés ici:

getip renvoie l'adresse IP attribuée par wanadoo à la machine. En fait, la carte eth1 connecte la machine par l'intermédiaire du modem à un réseau local sous protocole pptp. Sous ce protocole est créé une liaison ppp classique avec deux adresses IP à chaque bout. La récupération se fait en lisant l'adresse locale via ifconfig ppp0:
#!/bin/sh
echo "L'adresse IP du lycée est à l'heure actuelle:"
ifconfig ppp0 | grep "P-t-P" | awk '{print $2}' | cut -d ':' -f 2
echo ""

sendfb est un script Perl envoyant le courrier via le serveur Smtp de Wanadoo. Pour lutter contre les Spams, smtp.wanadoo.fr est très strict et ne marche pas sous ADSL. Il faut utiliser smtp.wanadoo.com. Le script est donné plus haut.

Makegoto crée une page html (redirigée vers gotolycee.html) contenant un lien vers le machine avec la nouvelle adresse IP ainsi que l'adresse en clair:
#!/bin/sh
IP=`ifconfig ppp0 | grep "P-t-P" | awk '{print $2}' | sed -e '1,$s/.*://'`
echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">"
echo "<HTML>"
echo "<HEAD>"
echo " <TITLE></TITLE>"
echo " <META NAME=\"GENERATOR\" CONTENT=\"StarOffice/5.1 (Linux)\">"
echo " <META NAME=\"AUTHOR\" CONTENT=\"Boisson Fran&ccedil;ois\">"
echo " <META NAME=\"CREATED\" CONTENT=\"20000626;20374300\">"
echo " <META NAME=\"CHANGEDBY\" CONTENT=\"Boisson Fran&ccedil;ois\">"
echo " <META NAME=\"CHANGED\" CONTENT=\"20000626;20374300\">"
echo "</HEAD>"
echo "<BODY>"
echo "<P ALIGN=CENTER><FONT COLOR=\"#ff0000\"><FONT SIZE=6 STYLE=\"font-size: 26pt\">Serveur"
echo "du Lyc&eacute;e Charlemagne</FONT></FONT></P>"
echo "<P ALIGN=CENTER><BR><BR>"
echo "</P>"
echo "<P ALIGN=LEFT><FONT SIZE=5>Le lyc&eacute;e Charlemagne est connect&eacute;"
echo "&agrave; l'aide d'une connexion ADSL Netissimo 1 et n'a pas d'adresse"
echo "IP fixe. Le lien suivant vous envoie sur le serveur du Lyc&eacute;e.</FONT></P>"
echo "<P ALIGN=LEFT><FONT SIZE=5><A HREF=\"http://$IP\">Lyc&eacute;e"
echo "Charlemagne</A> : $IP</FONT></P>"
echo "<P ALIGN=LEFT><BR><BR>"
echo "</P>"
echo "</BODY>"
echo "</HTML>"

sendIPftp envoie la page gotolycee.html sur un serveur Ftp, en l'occurrence celui des pages abonnés de Worldnet (la mienne en fait), cela permet d'avoir à un lien près tous les avantages d'une IP fixe.
#!/usr/bin/perl
use Net::FTP;
$serveur = "home.worldnet.fr";
$ftp = Net::FTP->new($serveur);
$ftp->login("fboisson","mon_mot_de_passe_a_moi");
$ftp->cwd("/myWeb/public_html");
$ftp->put("gotolycee.html");
$ftp->quit;

Va au début

28) Améliorations diverses d'ADSL
sans que je ne sache très bien pourquoi, ce script n'a pas marché au bout de 2 mois (???). Je l'ai remplacé par le fichier /etc/ppp/ftp-wanadoo suivant (j'en ai profité pour utiliser wanadoo)
open perso-ftp.wanadoo.fr
user lycee.charlemagne mot-de-passe
put index.html
quit
la ligne « sendIPftp » étant remplacée par

ftp -n < /etc/ppp/ftp-wanadoo > /dev/null

Suite à des coupures, il peut arriver que la connexion se fasse sur ppp1 et non ppp0. Le « getip » ne marche plus. J'ai donc modifer la capture de l'adresse IP en supposant qu' une seule liaison ppp existait. Cela donne le nouveau script getip suivant

#!/bin/sh
echo "L'adresse IP du lycée est à l'heure actuelle:"
ifconfig | grep "P-t-P" | awk '{print $2}' | cut -d ':' -f 2
echo ""

ADSLstart est lui même modifié comme suit de manière à créer une trace dans un fichier /var/log/ADSL.log (j'ai de même modifié ADSLstop):

#!/bin/sh
#
# on vire d'éventuelles traces non désirées
#
#
date >> /var/log/ADSL.log
echo "lancement ADSL" >> /var/log/ADSL.log
rm -rf /var/run/pptp/
#
#
# paramétrage de eth1
#
ifconfig eth1 10.0.0.10 up
#
# adresse IP estampillé Alcatel 100%
#
#
# Comment l'atteindre
#
route add -host 10.0.0.138 eth1
#
# Bon, établissement connection pptp et ppp
#
#
pptp 10.0.0.138
#
# là il faut attendre la liaison ppp
#
echo "On attend le modem, c'est long!"
while ! (ifconfig | grep "ppp"> /dev/null) ;
do echo "" > /dev/null ;
done
#
# Ca y est, Noël, ppp est là
#
# 1) détruire une éventuelle route par défault
#
route del default gw `route -n|awk '$1=="0.0.0.0" {print $2}'| head -1`
#
#
# 2) Rajouter le PPP par défault comme passerelle, on récupère l'adresse dans
# le ifconfig ppp?
#
route add default gw `ifconfig | grep "P-t-P" | awk '{print $3}' | cut -d ':' -f 2`
#
# routage
#
# Autorisation du forwarding au cas où il n'a pas compris!
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
#
# Mis en place du leurre d'adresse
#
# Défaut
#
ipfwadm -F -p deny
#
# THE règle
#
ipfwadm -F -a masquerade -S 192.168.1.0/24 -D 0.0.0.0/0
#
#
# et maintenant le Forwarding de port pour que les requêtes Web aillent
# sur Yoda
#
# `ifconfig etc etc` = adresse IP locale
#
ipportfw -C
ipportfw -A -t 192.168.1.2/80 -R 192.168.1.1/80
ipportfw -A -t `ifconfig | grep "P-t-P" | awk '{print $2}' | cut -d ':' -f 2`/80 -R 192.168.1.1/80
#
# bon cette stupidité de mail ne marche plus faute à wanadoo
# alors on met à jour la page de Web !!
#
cd /tmp
makegoto > gotolycee.html
# sendIPftp
ftp -n < /etc/ppp/ftp-worldnet
mv gotolycee.html index.html
ftp -n < /etc/ppp/ftp-wanadoo > /dev/null
mv index.html gotolycee.html
rm gotolycee.html
#
# On envoie l'IP à bibi
#
getip >> /var/log/ADSL.log
getip > /tmp/__conADSL
sendfb /tmp/__conADSL > /dev/null

Un script de test de connexion est par ailleurs effectué toutes les 10 minutes. En effet des coupures arrivent régulièrement et il importe que le système redémarre tout seul. C'est le script justement nommé testconnexion:

#!/bin/sh
cd /tmp
if /bin/ping -c 1 $1 > /dev/null 2> /dev/null; then
echo "connecté";
else
# on arrete tout et on recommence la connexion
echo "Non connecté"
date >> /var/log/ADSL.log
/usr/local/bin/ADSLstop 2>> /var/log/ADSL.log > /dev/null
/usr/local/bin/ADSLstart 2>> /var/log/ADSL.log > /dev/null
fi;

Depuis, tout marche bien depuis bientôt deux mois sans interventions. Il faut noter que j'ai supprimé la déconnexion/reconnexion toutes les 24 heures. Cela a bloqué une fois le modem.

Va au début

29) Sécurité
L 'utilisation de Nessus m'a permis de constater plusieurs pbms de sécurité auxquels il a fallu remédier:

Va au début

30) Synchronisation de l'heure d'une part, exécution de commandes sur Solo d'autrepart.
Le script Perl suivant

#!/usr/bin/perl
use Net::Time qw(inet_time inet_daytime);
my $TIME = inet_daytime(@ARGV[0], 'tcp');
print "L'heure sur $ARGV[0] est $TIME\n";
my $LOCAL = localtime;
print "L'heure locale est $LOCAL\n";
my @HEURE = split / /,$TIME;
system ("date --set=$HEURE[3]");
my $LOCAL = localtime;
print "L'heure locale est maintenant $LOCAL\n";

permet de synchroniser les horloges des machines sous Linux, il utilise le service Inetd Daytime.

Le script suivant permet d'éxécuter une commande sur la machine solo. Ilsera utile sur les petites configurations.

#!/bin/sh
# modèle:
# rsh solo "export DISPLAY=obiwan:0.0; /usr/share/office52/program/soffice"
xhost solo > /dev/null
echo "rsh solo \"export " `hostname | awk '{print "DISPLAY=" \$1 ":0.0;PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/local/mupad/share/bin:/usr/share/office52/program:/usr/local/lib/maple/bin;"}'` $1 " "$2 " " $3 " " $4 " " $6 " " $6 " " $8 " " $9 "\"" | sh

(De echo à sh sur une seule ligne). Le problème est que cela ne marche pas sur maple!?!