logo banniere

S'il n'y a pas de solution c'est qu'il n'y a pas de problème!


The Masq



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:

make modules

Vous devriez "voir passer" la compilation de ip_masq_h323.o
Lancez ensuite:

make modules_install

Essayez ensuite de charger le module par:

insmod ip_masq_h323

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 :

 ./runme extra

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:

depmod -a

Décharger le module par:

rmmod dplay

puis rechargez le par:

modprobe dplay

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!


Dernière modification le jeudi 17 avril 2003 à 00:41:45 Paris
Webmaster: TNK
Valid HTML 4.01! Valid CSS! quanta anybrowser suse powered by

linux apache mod_gzip php mysql openssl modssl