Héberger OpenSim chez soi, oui mais…

Hormis le bon nombre d’étapes à réaliser et à comprendre pour héberger son OpenSim chez soi, il faut savoir que les performances dépendront directement

  • de la quantité de mémoire installée (1 giga est un minimum. 2 si vous utilisez le viewer sur la même machine);
  • de la puissance du processeur;
  • de la quantité d’applications déjà en cours d’éxécution;
  • et surtout… du débit montant de la connection ADSL.

Il ne faudra pas s’attendre à pouvoir accueillir 90 personnes pour une conférence en streaming vidéo direct. Mais à titre d’exemple, il m’est arrivé de me retrouver à 5 ou 6 personnes en même temps, buildant, sans trop de lag. Et encore, c’était à une époque ou les choses n’étaient pas si stables.

Les étapes

Pour que des visiteurs d’internet puissent se rendre sur des régions hébergées sous OpenSim, il faut passer par plusieurs étapes :

  • Déterminer l’adresse IP privée de l’ordinateur qui abrite OpenSim;
  • Déterminer son adresse IP publique. Celle-ci peut être fixe, ou pas;
  • Configurer OpenSim;
    • Pour une installation Standalone;
    • Pour attacher son OpenSim à une Grille;
  • Ouvrir les ports adéquats dans son pare-feu;
  • Rediriger ces ports à l’aide de son routeur. On décortiquera à ce moment le problème du NAT Loopback;
  • Tester l’ensemble (ouf...).

Déterminer l’adresse IP du PC qui abritera OpenSim

Le but est de déterminer l’adresse IP interne de l’ordinateur qui héberge OpenSim, et de s’assurer que celle-ci ne change pas.

Une adresse IP, c’est un numéro à 4 chiffres de 0 à 255 pour identifier de façon unique un périphérique sur le réseau local. Dans le cas d’un ordinateur, il s’agit de sa carte réseau, ou de sa carte Wifi. Pour simplifier, on va associer un ordinateur à une seule adresse IP.

Cette adresse IP est :

  • soit codée dans les paramètres réseaux de la machine ;
  • soit fournie par le routeur ou la trucbox, grâce à un service DHCP.

De manière conventionnelle, cette adresse à quatre chiffres commence par 192.168…

Lorsque le service DHCP est actif, cette adresse IP privée est susceptible de changer. Et c’est pas bon. Il faut être certain que l’adresse IP de l’ordinateur qui héberge OpenSim ne changera pas.

Cela peut se faire :

  • soit par le paramétrage du service DHCP.
    Regardez la documentation de votre routeur, ou votre trucbox, pour savoir comment le paramétrer pour servir toujours la même adresse IP à une machine. Cela se fait en fonction de son adresse mac;
  • soit en codant simplement une adresse IP fixe à l’aide des paramètres réseau.
    Si cette machine se trouvait servie par DHCP auparavant, utilisez de préférence la dernière adresse IP connue pour cette machine.

Pour déterminer l’adresse IP d’une machine sous Windows XP, faites « démarrer », « exécuter », puis taper cmd suivi de Entrée.

Tapez ensuite ipconfig suivi de Entrée :

ipconfig.png

L’adresse IP privée est celle qui est entourée en rouge.

Notez soigneusement cette adresse IP privée. Pour notre exemple, on va dire que l’ordinateur OpenSim a l’adresse IP 192.168.1.102.

Déterminer son adresse IP publique

Le but est de déterminer son adresse IP publique. Dans certains cas elle fixe, dans d’autre cas elle change. Nous allons examiner ces deux cas de figure. En particulier, le moyen d’identifier notre réseau de façon unique avec une adresse IP non fixe.

L’adresse IP publique est l’adresse IP que nous octroie notre fournisseur d’accès pour identifier notre réseau sur internet. En fait, cette adresse IP publique n’est attribuée qu’au routeur (ou la trucbox), qui est le seul périphérique visible depuis internet.

Vérifiez les paramétrages au niveau de votre fournisseur d’accès pour vérifier si ce dernier vous octroie une une adresse IP fixe ou une adresse IP variable.

Une adresse IP fixe est définitivement recommandée pour un ordinateur OpenSim.
C’est encore plus vrai quand ce dernier est relié une grille. Bien sûr, ça peut marcher quand même, mais il faudra assumer les désagrément dûs au changements intempestifs d’adresse IP publique par votre fournisseur d’accès : le redémarrage des régions est nécessaire quand cela se produit.

Une adresse IP non fixe ne convient pas à une installation OpenSim vouée à tourner 24h/24h.

  • Si vous avez une adresse IP fixe

Vous devriez la connaître. Le cas échéant, utilisez http://www.monip.org/ et notez soigneusement cette adresse, on en aura besoin…

  • Vous n’avez pas d’adresse IP fixe

C’est la situation la plus fréquente : l’adresse IP publique est susceptible de changer à tout moment. Et c’est plutôt gênant.

  • Pour une installation OpenSim Standalone, les utilisateurs qui se connectent aux régions devraient être prévenus à chaque changement d’adresse IP. C’est lourd et inenvisageable;
  • Pour une installation en mode Grille, cette adresse devra être codée dans les paramètres d’OpenSim pour être transmise à la grille. Si cette adresse change, la grille ne retrouvera plus nos régions et ça provoquera des erreurs de réseau et des latences.

Mais il est quand même possible de faire tourner OpenSim de cette manière.

Un des moyens dont on dispose pour référencer de manière unique son adresse IP publique est d’utiliser un service de DNS dynamique pour la lier à une adresse internet de type http://.

Le rôle d'un DNS est de résoudre un nom de machine (ou une adresse internet) du style http://machine.truc.bidule.com en adresse IP.

Chaque fois que notre IP publique changera, un petit programme installé sur notre ordinateur se chargera d’avertir le service DNS pour qu’il se mette à jour. Le changement peut se faire dans la minute ou après plusieurs heures pour être répercuté sur l’ensemble des DNS du réseau internet. De cette façon, les resources externes utilisant le nom que vous aurez choisi pourront toujours y accéder.

Une fois votre adresse créée via le service de DNS Dynamique, notez celle-ci soigneusement.

Pour l’exemple, on choisira l’adresse myopensim.ath.cx.

Paramétrer les fichiers d’OpenSim

Le but est ici d’indiquer à OpenSim quels seront les ports réseaux qu’on va utiliser. Cela se fait à l’aide des fichiers régions et du fichier opensim.ini.

Il y’a autant de fichiers *.xml dans le répertoire bin\régions que de régions hébergées.

Modifiez les parties en gras de vos fichiers régions comme suit :

<Config sim_UUID="1e988108-76ec-45db-b89e-4ba98905681c"
sim_name="monsim" sim_location_x="1000" sim_location_y="1000"
internal_ip_address="192.168.1.102" internal_ip_port="9000" allow_alternate_ports="false"
external_host_name="myopensim.ath.cx" master_avatar_uuid="00000000-0000-0000-0000-000000000000"
estate_covanant_uuid="00000000-0000-0000-0000-000000000000"
master_avatar_first="grumly" master_avatar_last="thebear" master_avatar_pass="***** " />
  • Dans internal_ip_address, placez l’adresse IP locale de la machine sur laquelle cette région est hébergée.
    Ici, c’est 192.168.1.102;
  • Dans internal_ip_port, placez le numéro de port que la région utilisera pour accueillir des visiteurs.
    La valeur 9000 est une valeur standard pour OpenSim. N’utilisez un autre port que vous êtes sûr de votre coup.
    Gardez bien à l’esprit que plusieurs régions ne peuvent pas partager le même port. Si vous avez par exemple quatre fichiers régions, il vous faudra utiliser 9000, 9001, 9002 et 9003 comme numéro de ports respectifs;
  • Dans external_host_name, placez l’adresse publique externe que les utilisateurs (ou la grille) devront connaître pour pouvoir visiter votre région.
    Dans notre exemple, c’est myopensim.ath.cx.
    C'est cette adresse (résolue en adresse IP) qui sera transmise aux viewers (pour les téléports) et aux autres régions.

En mode grille, il vous faudra en plus configurer les sections suivantes du fichier OpenSim.ini :

gridmode = true
asset_database = "grid"

[Network]
http_listener_port = 9000
remoting_listener_port = 8895

grid_server_url = "http://adresse du grid server "
grid_send_key = "clé envoi du grid server"
grid_recv_key = " clé réception du grid server"

user_server_url = "http://adresse du region server"
user_send_key = "clé envoi du user server"
user_recv_key = " clé reception du user server "

asset_server_url = " http://adresse de l’asset server"
inventory_server_url = " http://adresse de l’inventory server"

Ces informations vous seront fournies par le boss de la grid à laquelle vous souhaitez vous rattacher.

Ouvrir les ports adéquats dans son pare-feu

Le but est de rendre une machine visible de l’extérieur. Nous allons ouvrir certains ports utilisés par OpenSim dans notre pare-feu, et les faire rediriger à l’aide de la fonction NAT du routeur.

D’abord une petite explication sur la circulation des paquets réseaux : un paquet de données continent des informations sur sa provenance et sa destination. Ces informations sont :

  • L’adresse IP de départ
  • Le port de départ
  • L’adresse IP de destination
  • Le port de destination

Le rôle d’un pare feu, c’est d’interdire ou d’autoriser le traitement des paquets de données en fonction des ports et des adresses IP sur lesquels ils arrivent ou proviennent.

Des routeurs font office de pare feu. Windows XP a un pare feu intégré également. En règle générale, il faut autoriser vos pare-feus à traiter les données arrivant sur les ports utilisés par OpenSim :

  • En mode Standalone
    • Pour une premiere région : port 9000, protocoles UDP et TCP
    • Pour une deuxième région : port 9001, protocoles UDP et TCP
    • Pour une troisième région : port 9002, protocoles UDP et TCP
    • ...
  • En mode Grille
    • Procéder comme en mode Standalone, mais activer en plus le port 8895, protocole TCP

Rediriger ces ports à l’aide de son routeur

Cette étape est primordiale. Elle permettra en outre de comprendre ce fameux problème de NAT Loopback qui empêche les gens de se connecter à leur propre sim depuis l’interieur de leur réseau, alors que d’autres personnes y parviennent de l’extérieur.

A l’extérieur, personne n’est en mesure de savoir si on a un, trois ou douze PC dans notre réseau local, puisque seul le routeur est visible depuis Internet, via notre adresse IP publique.

Le principe du NAT (Network Address Translation) est de demander au routeur d’intercepter les paquets de données réseau entrants sur un certain port de les rediriger vers la bonne machine.

Dans notre exemple, tout ce qui arrive sur le port 9000 devra être redirigé vers notre machine OpenSim qui a l’IP 192.168.1.102. Comme indiqué dans le schéma ci-dessous :

nat1.png

A l’identique, notre routeur « marque » les paquets sortants vers internet comme _provenant de notre adresse IP publique__, de façon à ce que les ordinateurs destinataire connaissent l'adresse pour répondre.

nat2.png

Pour notre propre exemple, Il va falloir définir les redirections suivantes dans le routeur. Consultez sa documentation pour savoir comment faire :

  • En mode Standalone
    • port 9000 TCP, UDP redirigé sur 192.168.1.102, port 9000
    • port 9001 TCP, UDP redirigé sur 192.168.1.102, port 9001
    • port 9002 TCP, UDP redirigé sur 192.168.1.102, port 9002
    • … (autant de 900x) que vous avez de régions
  • En mode Grille
    • Les mêmes redirections que pour le mode standalone, ainsi que le
      port 8895 UDP, redirigé sur 192.168.1.102, port 8895

Mais alors, qu’est ce qui nous empêche de nous connecter sur notre sim depuis l’intérieur ?

  • Lorsque quelqu’un de l’exterieur se connecte à notre OpenSim…
    • Son viewer envoie des paquets de données vers la destination myopensim.ath.cx, sur le port 9000 (revoir le schéma plus haut).
    • Le routeur intercepte le paquet entrant, puis transforme sa destination myopensim.ath.cx en 192.168.1.102 sur le port 9000 grâce aux règles de redirection.
      De cette manière, le paquet arrivera sur la machine OpenSim pour être correctement traité.
  • Lorsque nous nous connectons à notre propre installation OpenSim depuis l’intérieur de notre réseau
    • Notre viewer envoie des paquets de données vers la destination myopensim.ath.cx sur le port 9000.
    • Le routeur intercepte un paquet sortant. Et c’est la qu’est l’os…

Tous les routeurs ne sont pas capables de rediriger des paquets sortants dont l'adresse de destination est notre propre adresse IP publique. Faire une redirection dans ce cas équivaut à renvoyer le paquet vers l'intérieur (loopback). Pour ce genre de routeur, le paquet est perdu comme ci dessous :

loopbacknon.png

En revanche, pour un routeur prenant en charge le loopback, les choses se passent bien mieux :

loopbackoui.png

La première idée qui vient à l’esprit, pour une installation standalone seulement, c’est de mettre l’adresse IP locale de l’ordinateur qui abrite OpenSim derrière le paramètre –loginuri dans le raccourci, plutôt que d’y mettre l’adresse publique. Comme ceci : -loginuri http://192.168.1.102:9000. Hélas !!! Il se trouve que l’information external_host_name qu'on a mis tout à l'heure dans le fichier régions est fournie par OpenSim sous la forme d’adresse IP à tous les viewers. Cette information est utilisée au logins et à chaque téléportation, y compris pour le viewer qui se connecte depuis l’intérieur du réseau local. "Tricher" de la sorte ne peut pas fonctionner avec le viewer actuel.

Stephan Anderson, l’auteur de tribal.net, explique ce phénomène à un utilisateur.

La seule solution est de s’équiper d’un routeur prenant en charge le NAT Loopback. Pour vérifier si votre matériel le prend en charge, faites une recherche dans google.

Voilà

A présent il ne vous reste plus qu’à tester votre installation ! Les commentaires sont à vous pour discuter de vos expériences.