Intro
Ci dessous vous trouverez des infos et les fichiers nécessaires à des usages "non courants" de masquerade:
- Netmeeting
- Direct Play (jeux comme Age of Empire)
Vous avez besoin des outils de développements (make, compilateur C et autres) habituels, et allez
devoir éventuellement recompiler votre noyau (certainement si vous souhaitez pouvoir recevoir des appels netmeeting derrière votre
passerelle Linux). Vous êtes sensé avoir déjà configuré masquerade...
Attention, pour Netmeeting, suivant votre noyau, 2.2.12-16 ou 2.2.19
(pour le noyau 2.4 voir plus loin), les modules et les fonctionnalités
sont différentes.
La configuration pour 2.2.19 permet simplement à l'aide du module supplémentaire
d'appeler et de recevoir
des appels derrière la passerelle linux nat (recevoir à condition d'utiliser aussi ipmasqadm,
procédure écrite plus bas)
Pour les noyaux, 2.2.12-16, l'utilisation du module
permet d'appeler mais pas de recevoir des appels, avec ces noyaux, il faut appliquer un
petit patch au noyau (décrit plus bas) pour recevoir des appels (en plus de ipmasqadm)
SI vous le pouvez, utilisez un 2.2.19!!!
En résumé:
2.2.12-16: module ip_masq_h323 (spécifique noyau) seul: passer des appels
2.2.12-16: module ip_masq_h323 (spécifique noyau) + patch noyau + ipmasqadm: appels et réceptions
2.2.19: module ip_masq_h323 (spécifique noyau) + ipmasqadm: appels et réceptions
Netmeeting pour recevoir des appels, quel que soit le noyau 2.2.12-16 ou
2.2.19 (sautez ce § si vous
souhaitez juste passer des appels)
Ne vous lancez dans cette configuration que si vous maitrisez "un minimum" la recompilation du noyau... Vous êtes prevenu!!
Vous avez besoin d'options "supplémentaires" du noyau:
prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL=y)
IP masquerading special modules support
IP ipautofw masquerade support (CONFIG_IP_MASQUERADE_IPAUTOFW=y/m)
IP ipportfw masquerade support (CONFIG_IP_MASQUERADE_IPPORTFW=y/m)
IP ipmarkfw masquerade support (CONFIG_IP_MASQUERADE_MFW=y/m)
|
Avant de relancer la compilation du noyau avec ces options, lisez cette page jusqu'au bout, il
y a peut-etre d'autres choses à faire sur le noyau...
Vous avez ensuite besoin de ipmasqadm package (glibc2) disponible directement ici ou à
http://juanjox.kernelnotes.org/.
Une fois que vous aurez chargé le module ip_masq_h323 (voir plus bas),
il vous faudra lancer:
/usr/sbin/ipmasqadm portfw -a -P tcp -L votre_ip_public 1720 -R ip-local 1720
/usr/sbin/ipmasqadm portfw -a -P tcp -L votre_ip_public 1503 -R ip-local 1503
|
et d'attendre qu'on vous appelle!!
J'ai fait un petit script netmeeting qui permet de démarrer, d'arrêter ou de connaître l'état de la redirection. Il récupère
l'ip public de la machine par la même fonction getip des scripts de connexion reconnexion. Sa syntaxe est:
netmeeting start ip-local
netmeeting stop
netmeeting status
|
où ip-local est l'adresse de la machine locale vers laquelle vous redirigez
les appels netmeeting.
Recevoir des appels avec les noyaux 2.2.12-2.2.16 (sautez ce § si vous
utilisez un noyau 2.2.19
ou que vous souhaitez uniquement passer des appels avec des noyaux 2.2.12.16)
Ne vous lancez dans cette option que si vous maitrisez un minimum la
recompilation du noyau...
Il vous faut modifier un des fichiers source du noyau :
/usr/src/linux/net/ipv4/ip_masq_app.c
Commencer par sauvegarder précieusement le source d'origine de ce fichier!!!
Dans votre éditeur favori, ouvrez le fichier et repérez la structure:
struct ip_masq_app * ip_masq_bind_app(struct ip_masq *ms)
struct ip_masq_app * mapp;
if (ms->protocol != IPPROTO_TCP && ms->protocol != IPPROTO_UDP)
return NULL;
mapp = ip_masq_app_get(ms->protocol, ms->dport);
#if 0000
/* #ifdef CONFIG_IP_MASQUERADE_IPAUTOFW */
if (mapp == NULL)
mapp = ip_masq_app_get(ms->protocol, ms->sport);
/* #endif */
#endif
if (mapp != NULL) {
/*
* don't allow binding if already bound
*/
if (ms->app != NULL) {
IP_MASQ_ERR("ip_masq_bind_app() called for already bound object.\n");
return ms->app;
}
ms->app = mapp;
if (mapp->masq_init_1) mapp->masq_init_1(mapp, ms);
ip_masq_app_bind_chg(mapp, +1);
}
return mapp;
}
|
Vous allez devoir la remplacer par:
struct ip_masq_app * ip_masq_bind_app(struct ip_masq *ms)
{
struct ip_masq_app * mapp;
if (ms->protocol != IPPROTO_TCP && ms->protocol != IPPROTO_UDP)
return NULL;
mapp = ip_masq_app_get(ms->protocol, ms->dport);
#if 0000
/* #ifdef CONFIG_IP_MASQUERADE_IPAUTOFW */
if (mapp == NULL)
mapp = ip_masq_app_get(ms->protocol, ms->sport);
/* #endif */
#endif
if (mapp == NULL)
/*
* paolo 24/10/2000
*/
mapp = ip_masq_app_get(ms->protocol, ms->mport);
if (mapp != NULL) {
/*
* don't allow binding if already bound
*/
if (ms->app != NULL) {
IP_MASQ_ERR("ip_masq_bind_app() called for already bound object.\n");
return ms->app;
}
ms->app = mapp;
if (mapp->masq_init_1) mapp->masq_init_1(mapp, ms);
ip_masq_app_bind_chg(mapp, +1);
}
return mapp;
}
|
Vous pouvez récupérer cette fonction ici directement.
A présent, recompiler votre noyau avec les options indiquées plus haut et ce patch.
N'oubliez pas de garder sous la main un noyau de secours "just in case".
Module pour Netmeeting noyaux 2.2
Attention
le module n'est pas le même pour les noyaux 2.2.12-16 d'une part
et 2.2.19 d'autre part (2.2.17-18, je ne sais pas, jamais utilisé ces noyaux).
Merci à www.coritel.it de
m'avoir fourni toutes les
informations nécessaires. Merci à Régis Lemaire d'avoir réussi à "extorquer" à Coritel
la version du module pour le noyau 2.2.19 et de me l'avoir transmis.
Avec le module ci dessous pour 2.2.19 (et ipmasqadm),
vous aurez les fonctionnalités d'appel et réception.
Avec celui pour 2.2.12-16, il vous aura fallu patcher le noyau pour recevoir des appels,
en plus de ipmasqadm, voir plus haut
J'ai testé tout ça avec des noyaux 2.2.14, 2.2.16, 2.2.19 et cela fonctionne parfaitement bien. Toutes les
opérations ci dessous se font sous le compte root .
Pour 2.2.12-16
Le source du module nécessaire est ip_masq_h323.c
Pour 2.2.19
Le source du module nécessaire est ip_masq_h323.c
Copiez le fichier ip_masq_h323.c correpondant à votre noyau
dans /usr/src/linux/net/ipv4 .
Editez le fichier /usr/src/linux/net/ipv4/Makefile dans lequel modifiez la ligne:
M_OBJS += ip_masq_ftp.o ip_masq_irc.o ip_masq_raudio.o ip_masq_quake.o ip_masq_h323.o
|
c'est à dire que vous avez rajouté ip_masq_h323.o à la fin de la ligne (qui ne comprend pas nécessairement tous ces modules
chez vous)
Assurez vous d'avoir bien activé les modules et le chargement dynamique des modules dans votre noyau
(voir la page liens pour trouver des infos sur le noyau)
Placez vous ensuite dans un terminal dans le répertoire /usr/src/linux et lancez:
Vous devriez "voir passer" la compilation de ip_masq_h323.o
Lancez ensuite:
Essayez ensuite de charger le module par:
Regardez les messages d'erreurs éventuels dans /var/log/messages et si le module est bien chargé par lsmod .
Attention
Il ne peut pas y avoir plusieurs sessions Netmeeting lancées en même temps: une seule session Netmeeting à la fois!
Ca y est, vous avez redémarré... vous n'avez pas porté plainte
contre Linux-SottisesTM pour avoir saccagé votre noyau...
H323 (netmeeting/gnomeeting) pour noyaux
2.4.x par Gysmo www.xsproject.org
Pour utiliser ce protocle vous aurez besoin de compiler votre noyau (2.4.x) vous même.
Commencez par configurez votre noyau avec le support netfilter activé et
les dépendances faites (make menuconfig/ make dep).
On suppose que vous installez votre noyau dans le repertoire /usr/src/linux ou que ce
repertoire pointe vers les sources de votre noyau.
Ensuite il vous faut récuperez la dernière version de netfilter.
Une solution simple est de les récupérer par CVS. Suivez la procédure suivante:
cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic login
le mot de passe demandé est "cvs"
cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic co netfilter/userspace
cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic update -P
|
Vous voilà enfin avec la dernière version de netfilter.
Ensuite il vous faut appliquer ces patchs netfilter au noyau.
Mettez vous dans le répertoire netfilter/userspace/patch-o-matic.
Exécutez la commande pour appliquer les patchs newnat à votre noyau :
Cela doit correspondre a un nom de repertoire existant, mais sans le slash terminal.
Ensuite, suivez les instructions à l'écran, on vous propose pour chaque patch si vous voulez
l'installer ou pas. Il est préferable de d'abord tester en
appuyant sur la touche 'T' et ensuite d'appliquer le patch avec la touche 'y'.
Dans notre cas nous avons besoin de deux patchs
qui sont 'newnat et 'contrack_h323' mais regardez si d'autres patch ne vous intéressent
pas, même s'ils sont inutiles pour le prtocole H323, ils
peuvent coriger des trous de sécurité.
Soyez patient le patch contrack_h323 peut etre en fin de liste...
Voilà, votre noyau est patché, il vous faut maintenant installer dans votre noyau
les nouvelles fonctionalités ajoutées précedement.
Pour cela, retournez dans le répertoire /usr/src/linux (endroit où sont installés
les sources du noyau) et refaites un make menuconfig (ou xconfig...)
Là, ajoutez aux modules: conntrack_h323 qui se situe dans le sous menu netfilter.
Installez vos modules et voilà votre noyau est maintenant configuré.
Il vous faut maintenant recompiler iptables.
Retournez dans le répertoire netfilter/userspace/ et faites 'make all install',
cette commande doit être exécutée en tant que root.
Je vous conseille de retirer la version précédente de netfilter installée
sur votre machine si vous en avez une d'installée.
Voilà, ça marche maintenant (enfin ça devrait, NDTNK :-) ), voilà un petit script pour
rediriger les connexions h323 vers une machine de votre réseau local
(écrit par Vern Gill et modifié par Gysmo):
#! /bin/bash
EXTERNAL_IF=eth0
EXTERNAL_IP=mon.ip.pub.lic
PCA_HOST=mon.ip.pri.vee
$IPTABLES=/usr/local/sbin/iptables
/sbin/modprobe -a -k -s -v ip_nat_h323
logger -s "H323 Ports"
H323_PORTS="389 522 1503 1720 1731 8080"
for PORT in $H323_PORTS; do
$IPTABLES -t nat -A PREROUTING -i $EXTERNAL_IF -p tcp -d $EXTERNAL_IP \
--dport $PORT -m state --state NEW,ESTABLISHED,RELATED \
-j DNAT --to-destination $PCA_HOST -v
done
logger -s "H323 Ports"
H323_PORTS="389 522 1503 1720 1731 8080"
for PORT in $H323_PORTS; do
$IPTABLES -t nat -A PREROUTING -i $EXTERNAL_IF -p udp -d $EXTERNAL_IP \
--dport $PORT -m state --state NEW,ESTABLISHED,RELATED \
-j DNAT --to-destination $PCA_HOST -v
done
|
Le \ indique que c'est la suite de la ligne....
Si vous avez besoin d'aide ou de conseils, vous pouvez me contacter à frederic@xsproject.org
Direct Play
J'ai testé le module avec un noyau 2.2.14 et cela fonctionne parfaitement bien. Toutes les
opérations ci dessous se font sous le compte root .
Il est nécessaire d'avoir un noyau compilé non seulement avec les options "habituelles" de masquerade
(dans Networking options ), mais aussi l'option IP masquerade special modules support
dans Networking options . Cette option n'est accessible qu'en répondant yes à
Prompt for development and/or incomplete code/drivers dans Code maturity level options .
Si cette option n'est pas activée, il faudra recompiler votre noyau (voir la page de liens
pour des infos usr la compilation du noyau).
Le source du module nécessaire est ip_masq_dplay-0_3_00.tgz .
Décompressez le:
tar -zxf ip_masq_dplay-0_3_00.tgz
|
Vous obtenez un nouveau répertoire (que vous pouvez mettre par exemple dans /usr/local/src )
dans lequel vous lancez make . Copiez le fichier ip_masq_dplay.o obtenu dans le repértoire où sont les
autres modules ip_masq_* (chez moi c'est /lib/modules/2.2.14/ipv4 ).
Pour utilisez le module en le chargeant par:
insmod ip_masq_dplay host=ip_local
|
où ip-local est l'adresse locale de la machine du réseau qui va jouer à Age of Empire ou autre. Si c'est toujours
la même machine du réseau qui joue, vous pouvez
rajouter les lignes:
alias dplay ip_masq_dplay
options dplay host=ip_local
|
à votre fichier /etc/modules.conf (modules.conf sur certaines distributions). Lancez ensuite:
Décharger le module par:
puis rechargez le par:
Le module se décharge en cas de déconnexion du réseau et arrêt du masquerading...ce qui arrive au moins une fois
par jour sur l'adsl netissimo 1. Vous devrez recharger le module, ce que vous pouvez faire en rajoutant l'ordre
modprobe dplay à votre procédure de reconnexion, à moins que vous n'utilisiez le
pare-feu proposé ici, auquel cas rajoutez dplay à la ligne FW_MASQ_MODULES du fichier de configuration du pare-feu.
Bon jeu!
|