Connecter le FreeRunner au web via USB

De openmoko-fr.
(Différences entre les versions)
(tester la connexion)
(Mise en garde)
(30 révisions intermédiaires par 4 utilisateurs sont masquées)
Ligne 3 : Ligne 3 :
  
 
Procédures testées avec les distributions ci-dessous. Pour d'autres distributions, n'hésitez pas à contribuer ;)
 
Procédures testées avec les distributions ci-dessous. Pour d'autres distributions, n'hésitez pas à contribuer ;)
 +
 +
== Un peu de théorie ==
 +
Vous venez de connecter votre Freerunner à votre PC par un câble USB, félicitation; par ce geste anodin , vous venez de créer un nouveau réseau! Ce qui fait de vous un administrateur réseau; rassurez vous ce n'est pas douloureux.
 +
 +
Voyons de quoi se compose votre réseau (en fait vos réseaux)
 +
 +
=== Le LAN ===
 +
Vous avez un ordinateur, que nous appellerons le host, qui est connecté à internet via un modem (ou une "box") à l'aide d'une liaison ethernet ou wifi. Vous avez donc créé un réseau appelle LAN. Sur ce réseau peuvent être connectés plusieurs ordinateurs. Ce réseau possède son propre espace d'adressage (généralement en 102.168.0.0 ou 102.168.1.0).
 +
 +
=== Le FR ===
 +
Sur le PC host, vous venez de créer un réseau compsé de votre host et de votre FR. Ce réseau est distinct du précédent; votre PC host appartient aux 2 réseaux, mais comme il est relié à chacun des réseaux par 2 interfaces différentes, il a 2 adresses (une coté LAN, et une coté FR).
 +
Si vous voulez que le FR communique avec internet, il va falloir configurer votre PC host pour qu'il fasse la passerelle entre les 2 réseaux.
 +
 +
== les espaces d'adressage ==
 +
Votre installation ressemble donc à ceci
 +
 +
FR------HOST------box------internet
 +
  FR        LAN
 +
 +
Le FR étant relié par câble USB, le réseau ainsi créee ne comportera jamais plus que ces 2 éléments
 +
 +
'''Il est impératif que les espaces d'adressage de ces 2 réseaux soient parfaitement distincts'''
 +
 +
Pour cela, vous avez 2 options
 +
- option 1: utiliser un espace d'adressage de base commun (par ex 192.168.0.0), et le scinder en 2 en utilisant des masques de sous réseau
 +
- option 2: utiliser 2 espaces d'adressage de base distinct (par ex 192.168.0.0 d'un coté, et 192.168.9.0 de l'autre)
 +
 +
== configuration ==
 +
=== option 1: 2 sous réseaux ===
 +
Partons de l'hypothése que votre box vous impose un réseau de type 192.168.0.0, et que l'adresse du routeur/modem est 192.168.0.1 (à vous d'adapter)
 +
Par défaut le FR est configuré avec l'adresse 192.160.0.202. Il y a donc un conflit car cette adresse est déjà contenue dans le réseau LAN. Si nous voulons conserver l'adresse du FR, il faut créer un sous réseau coté FR en ne conservant que quelques adresse hautes dans la tranche 192.168.0.0 à l'aide d'un masque, et exclure toute les autres (que nous réserverons pour le LAN).
 +
 +
Ce qui donne coté FR (fichier /etc/network/interfaces):
 +
 +
# Ethernet/RNDIS gadget (g_ether)
 +
# ... or on host side, usbnet and random hwaddr
 +
auto usb0
 +
iface usb0 inet static
 +
address 192.168.0.202
 +
netmask 255.255.255.192
 +
up route add default gw 192.168.0.200 metric 8
 +
up echo nameserver 192.168.0.200 > /etc/resolv.conf
 +
down route del default gw 192.168.0.200 metric 8
 +
 +
explications:
 +
nous affectons au FR l'adresse 192.168.0.202
 +
nous limitons ensuite l'espace d'adressage de ce réseau à l'aide d'un masque. Ce sous réseau ne comportera donc que les adresses 192.168.0.192 à 192.168.0.254 (c'est plus que suffisant puisque de tout façon nous n'en avons besoin que de 2).
 +
Nous définissons ensuite l'adresse de la passerelle pour accéder à toute adresse qui ne serait pas comprise dans la plage ci dessus (internet, ou un autre ordinateur du LAN). La passerelle est à l'adresse 192.168.0.200, qui est en fait l'adresse du port USB de votre PC host (c'est le seul accès vers le monde extérieur pour votre FR, voir croquis) Vous noterez que cette route n'est configurée qu'a la connexion du câble USB de façon à ne pas mette la pagaille lorsque vous travaillez en wifi!
 +
 +
Pour avoir une résolution d'adresse cohérente avec votre politique réseau, il faut mettre dans le fichier /etc/resolv.conf la ligne
 +
nameserver 192.168.0.200; c'est ce qui est fait automatiquement à la connexion du câble usb par la ligne up echo nameserver ....
 +
 +
 +
Les requêtes DNS sont envoyées aux PC HOST, qui transmettra à la box (généralement 192.168.0.1), qui elle même renverra vers les serveurs DNS de votre FAI
 +
 +
Vous pouvez aussi mettre directement l'adresse de votre routeur sur le LAN, la box (192.168.0.1)
 +
 +
Evitez de mettre l'adresse de serveur DNS externe comme on le voit parfois (par ex openDNS). Vous pouvez à la rigueur mettre l'adresse du DNS de votre FAI.
 +
 +
 +
Coté PC host:
 +
Il faut commencer par identifier comment s'appelle la connexion coté USB, ça dépend de la distribution qui tourne sur votre FR. C'est soit usb0, soit eth1 ou eth2 (faire un ifconfig pour le savoir). Prenons le cas eth2, à vous d'adapter.
 +
 +
fichier /etc/network/interfaces
 +
 +
# freerunner SHR
 +
allow-hotplug eth2
 +
auto eth2
 +
iface eth2 inet static
 +
address 192.168.0.200
 +
netmask 255.255.255.192
 +
up iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -j MASQUERADE
 +
up echo 1 > /proc/sys/net/ipv4/ip_forward
 +
down iptables -D POSTROUTING -t nat -s 192.168.0.0/24 -j MASQUERADE
 +
 +
Pour la première partie, se rapporter à la config du FR.
 +
La deuxième partie permet à votre PC host de faire le lien entre le réseau FR coté USB, et le réseau LAN qui donne accès à internet.
 +
Vous constaterez que cette configuration s'active à la connexion du câble USB, et se désactive à sa connexion.
 +
 +
Reste encore un détail à régler: si vous souhaitez contacter votre FR depuis un autre PC du LAN. Ce PC ne va pas savoir qu'il doit passer par le PC host pour joindre le sous réseau du FR (et en particulier l'adresse 192.168.0.202).
 +
Qu'a cela ne tienne, il suffit d'indiquer dans le fichier interface du PC concerné:
 +
up route add -net 192.168.0.192/25 gw 192.168.0.200
 +
 +
Ce qui signifie: pour toute adresse au delà de 192.168.0.125, il faut passer par le PC host.
 +
Vous pourrez ainsi établir un connexion avec votre FR.
 +
 +
=== option 2: 2 réseaux ===
 +
Dans ce cas nous partons toujours du principe que vous êtes en 192.168.0.0 en réseau interne (entre votre pc et le routeur qui vous fournit internet).
 +
Dans cette option, nous allons créer coté FR un espace d'adressage complètement différent de celui du LAN
 +
Prenons par exemple le 192.168.9.0 qui est rarement utilisé par les modem/routeur, vous pouvez changer à votre convenance.
 +
 +
Voici un schéma sommaire pour comprendre:
 +
 +
__________ 192.168.9.0 ___ 192.168.0.0 ________ Ip FAI
 +
 +
Freerunner------------------ Pc ---------------- routeur-----------Internet
 +
 +
 +
'''Configuration du pc host'''
 +
Le PC host sert de passerelle, donc il doit avoir une interface en 192.168.0.x (votre interface normale, si vous êtes déjà connecté au net)
 +
Il nous reste maintenant à configurer l'interface côté réseau du pc qui est frontale au freerunner. Commençons par identifier son nom: faire un ifconfig avant d'avoir branché le freerunner puis après, l'interface qui apparait est celle coté freerunner.
 +
 +
fichier /etc/network/interfaces
 +
 +
# freerunner SHR
 +
allow-hotplug eth2
 +
auto eth2
 +
iface eth2 inet static
 +
address 192.168.9.200
 +
netmask 255.255.255.192
 +
up iptables -A POSTROUTING -t nat -s 192.168.9.0/24 -j MASQUERADE
 +
up echo 1 > /proc/sys/net/ipv4/ip_forward
 +
down iptables -D POSTROUTING -t nat -s 192.168.9.0/24 -j MASQUERADE
 +
 +
 +
 +
 +
Bien sûr il faut remplacer eth2 par l'interface en question correspondant au freerunner. (
 +
 +
Notre pc est donc maintenant sur le réseau en 192.168.9.0 côté freerunner et eth2 (avec comme adresse 192.168.0.200), et de l'autre au réseau 192.168.0.0 (le LAN, qui donne accés à internet)
 +
 +
'''Configuration du freerunner'''
 +
 +
Ce qui donne coté FR (fichier /etc/network/interfaces):
 +
 +
# Ethernet/RNDIS gadget (g_ether)
 +
# ... or on host side, usbnet and random hwaddr
 +
auto usb0
 +
iface usb0 inet static
 +
address 192.168.9.202
 +
netmask 255.255.255.0
 +
up route add default gw 192.168.9.200 metric 8
 +
up echo nameserver 192.168.9.200 > /etc/resolv.conf
 +
down route del default gw 192.168.9.200 metric 8
 +
 +
 +
Dans ce fichier on voit que le freerunner a une adresse ip de 192.168.9.202 et qu'il a comme passerelle notre pc host via l'adresse 192.168.9.200. Il peut donc se connecter au LAN, et à internet. N'oubliez pas que vous avez changé l'adresse ip de votre FR (192.168.0.202 par défaut sur la quasi totalité des distributions). Il faut s'en souvenir si vous essayez d'appliquer un tuto qui donne cette adresse.
 +
 +
== tests ==
 +
Nous allons procéder par étape:
 +
 +
=== tester la connection entre le PC host et le FR ===
 +
coté FR:
 +
ping 192.168.9.200
 +
 +
coté PC:
 +
ping 192.168.9.202
 +
 +
=== test de l'accés à internet du FR ===
 +
 +
Depuis le FR (en direct ou via ssh)
 +
ping 74.125.19.147
 +
 +
Il s'agit d'une adresse de google qui est normalement toujours active.
 +
 +
Dernier test pour vérifier la résolution d'adresse:
 +
ping www.google.fr
 +
 +
Vous noterez que dans la configuration proposée, la résolution d'adresse est effectuée par le DNS configuré pour votre LAN. Nous n'utilisons pas de serveur DNS spécifique pour le FR comme on peut le voir quelquefois (en tant qu'administrateur réseau, vous devez maîtriser la résolution d'adresse et ne pas la confier à n'importe qui).
 +
 +
Si la résolution d'adresse ne fonctionne pas, vous pouvez ajouter la ligne
 +
nameserver 192.168.0.1
 +
dans le fichier /etc/resolv.conf du FR (en adaptant avec l'adresse de votre box sur le LAN, 192.168.0.1 étant un cas courant)
 +
Si ça ne fonctionne toujours pas, recopiez le contenu du fichier resolv.conf du PC HOST dans celui du FR.
 +
 +
== Mise en garde ==
 +
 +
Il y a un conflit avec le gestionnaire de réseau (k)networkmanager fait que, lorsque l'on branche notre FR avec son cable usb, la connection automatique mise en place, avec la procédure que vous venez de suivre, tombe au bout de 2 secondes. Une solution est faire
 +
sudo killall *networkmanger* avant de brancher le FR et
 +
sudo networkmanger &.
 +
Apres un redémarrage de l'ordinatuer , il n'y plus besoin de fermer (k)networkmanager, mais cela ne marche qu'un seul fois chez moi..
 +
 +
= LA SECTION QUI SUIT EST OBSOLETE =
 +
 +
  
 
== Sur le PC hôte ==
 
== Sur le PC hôte ==

Version du 26 septembre 2009 à 22:24

Inspirée de cette page [1] Pour tout autres questions sur le sujet, allez nous la poser sur le forum [2]

Procédures testées avec les distributions ci-dessous. Pour d'autres distributions, n'hésitez pas à contribuer ;)

Sommaire

Un peu de théorie

Vous venez de connecter votre Freerunner à votre PC par un câble USB, félicitation; par ce geste anodin , vous venez de créer un nouveau réseau! Ce qui fait de vous un administrateur réseau; rassurez vous ce n'est pas douloureux.

Voyons de quoi se compose votre réseau (en fait vos réseaux)

Le LAN

Vous avez un ordinateur, que nous appellerons le host, qui est connecté à internet via un modem (ou une "box") à l'aide d'une liaison ethernet ou wifi. Vous avez donc créé un réseau appelle LAN. Sur ce réseau peuvent être connectés plusieurs ordinateurs. Ce réseau possède son propre espace d'adressage (généralement en 102.168.0.0 ou 102.168.1.0).

Le FR

Sur le PC host, vous venez de créer un réseau compsé de votre host et de votre FR. Ce réseau est distinct du précédent; votre PC host appartient aux 2 réseaux, mais comme il est relié à chacun des réseaux par 2 interfaces différentes, il a 2 adresses (une coté LAN, et une coté FR). Si vous voulez que le FR communique avec internet, il va falloir configurer votre PC host pour qu'il fasse la passerelle entre les 2 réseaux.

les espaces d'adressage

Votre installation ressemble donc à ceci

FR------HOST------box------internet

  FR        LAN

Le FR étant relié par câble USB, le réseau ainsi créee ne comportera jamais plus que ces 2 éléments

Il est impératif que les espaces d'adressage de ces 2 réseaux soient parfaitement distincts

Pour cela, vous avez 2 options - option 1: utiliser un espace d'adressage de base commun (par ex 192.168.0.0), et le scinder en 2 en utilisant des masques de sous réseau - option 2: utiliser 2 espaces d'adressage de base distinct (par ex 192.168.0.0 d'un coté, et 192.168.9.0 de l'autre)

configuration

option 1: 2 sous réseaux

Partons de l'hypothése que votre box vous impose un réseau de type 192.168.0.0, et que l'adresse du routeur/modem est 192.168.0.1 (à vous d'adapter) Par défaut le FR est configuré avec l'adresse 192.160.0.202. Il y a donc un conflit car cette adresse est déjà contenue dans le réseau LAN. Si nous voulons conserver l'adresse du FR, il faut créer un sous réseau coté FR en ne conservant que quelques adresse hautes dans la tranche 192.168.0.0 à l'aide d'un masque, et exclure toute les autres (que nous réserverons pour le LAN).

Ce qui donne coté FR (fichier /etc/network/interfaces):

# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
auto usb0
iface usb0 inet static
address 192.168.0.202
netmask 255.255.255.192
up route add default gw 192.168.0.200 metric 8
up echo nameserver 192.168.0.200 > /etc/resolv.conf
down route del default gw 192.168.0.200 metric 8

explications: nous affectons au FR l'adresse 192.168.0.202 nous limitons ensuite l'espace d'adressage de ce réseau à l'aide d'un masque. Ce sous réseau ne comportera donc que les adresses 192.168.0.192 à 192.168.0.254 (c'est plus que suffisant puisque de tout façon nous n'en avons besoin que de 2). Nous définissons ensuite l'adresse de la passerelle pour accéder à toute adresse qui ne serait pas comprise dans la plage ci dessus (internet, ou un autre ordinateur du LAN). La passerelle est à l'adresse 192.168.0.200, qui est en fait l'adresse du port USB de votre PC host (c'est le seul accès vers le monde extérieur pour votre FR, voir croquis) Vous noterez que cette route n'est configurée qu'a la connexion du câble USB de façon à ne pas mette la pagaille lorsque vous travaillez en wifi!

Pour avoir une résolution d'adresse cohérente avec votre politique réseau, il faut mettre dans le fichier /etc/resolv.conf la ligne

nameserver 192.168.0.200; c'est ce qui est fait automatiquement à la connexion du câble usb par la ligne up echo nameserver ....


Les requêtes DNS sont envoyées aux PC HOST, qui transmettra à la box (généralement 192.168.0.1), qui elle même renverra vers les serveurs DNS de votre FAI

Vous pouvez aussi mettre directement l'adresse de votre routeur sur le LAN, la box (192.168.0.1)

Evitez de mettre l'adresse de serveur DNS externe comme on le voit parfois (par ex openDNS). Vous pouvez à la rigueur mettre l'adresse du DNS de votre FAI.


Coté PC host: Il faut commencer par identifier comment s'appelle la connexion coté USB, ça dépend de la distribution qui tourne sur votre FR. C'est soit usb0, soit eth1 ou eth2 (faire un ifconfig pour le savoir). Prenons le cas eth2, à vous d'adapter.

fichier /etc/network/interfaces

# freerunner SHR
allow-hotplug eth2
auto eth2
iface eth2 inet static
address 192.168.0.200
netmask 255.255.255.192
up iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -j MASQUERADE
up echo 1 > /proc/sys/net/ipv4/ip_forward
down iptables -D POSTROUTING -t nat -s 192.168.0.0/24 -j MASQUERADE 

Pour la première partie, se rapporter à la config du FR. La deuxième partie permet à votre PC host de faire le lien entre le réseau FR coté USB, et le réseau LAN qui donne accès à internet. Vous constaterez que cette configuration s'active à la connexion du câble USB, et se désactive à sa connexion.

Reste encore un détail à régler: si vous souhaitez contacter votre FR depuis un autre PC du LAN. Ce PC ne va pas savoir qu'il doit passer par le PC host pour joindre le sous réseau du FR (et en particulier l'adresse 192.168.0.202). Qu'a cela ne tienne, il suffit d'indiquer dans le fichier interface du PC concerné:

up route add -net 192.168.0.192/25 gw 192.168.0.200

Ce qui signifie: pour toute adresse au delà de 192.168.0.125, il faut passer par le PC host. Vous pourrez ainsi établir un connexion avec votre FR.

option 2: 2 réseaux

Dans ce cas nous partons toujours du principe que vous êtes en 192.168.0.0 en réseau interne (entre votre pc et le routeur qui vous fournit internet). Dans cette option, nous allons créer coté FR un espace d'adressage complètement différent de celui du LAN Prenons par exemple le 192.168.9.0 qui est rarement utilisé par les modem/routeur, vous pouvez changer à votre convenance.

Voici un schéma sommaire pour comprendre:

__________ 192.168.9.0 ___ 192.168.0.0 ________ Ip FAI

Freerunner------------------ Pc ---------------- routeur-----------Internet


Configuration du pc host Le PC host sert de passerelle, donc il doit avoir une interface en 192.168.0.x (votre interface normale, si vous êtes déjà connecté au net) Il nous reste maintenant à configurer l'interface côté réseau du pc qui est frontale au freerunner. Commençons par identifier son nom: faire un ifconfig avant d'avoir branché le freerunner puis après, l'interface qui apparait est celle coté freerunner.

fichier /etc/network/interfaces

# freerunner SHR
allow-hotplug eth2
auto eth2
iface eth2 inet static
address 192.168.9.200
netmask 255.255.255.192
up iptables -A POSTROUTING -t nat -s 192.168.9.0/24 -j MASQUERADE
up echo 1 > /proc/sys/net/ipv4/ip_forward
down iptables -D POSTROUTING -t nat -s 192.168.9.0/24 -j MASQUERADE 



Bien sûr il faut remplacer eth2 par l'interface en question correspondant au freerunner. (

Notre pc est donc maintenant sur le réseau en 192.168.9.0 côté freerunner et eth2 (avec comme adresse 192.168.0.200), et de l'autre au réseau 192.168.0.0 (le LAN, qui donne accés à internet)

Configuration du freerunner

Ce qui donne coté FR (fichier /etc/network/interfaces):

# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
auto usb0
iface usb0 inet static
address 192.168.9.202
netmask 255.255.255.0
up route add default gw 192.168.9.200 metric 8
up echo nameserver 192.168.9.200 > /etc/resolv.conf
down route del default gw 192.168.9.200 metric 8


Dans ce fichier on voit que le freerunner a une adresse ip de 192.168.9.202 et qu'il a comme passerelle notre pc host via l'adresse 192.168.9.200. Il peut donc se connecter au LAN, et à internet. N'oubliez pas que vous avez changé l'adresse ip de votre FR (192.168.0.202 par défaut sur la quasi totalité des distributions). Il faut s'en souvenir si vous essayez d'appliquer un tuto qui donne cette adresse.

tests

Nous allons procéder par étape:

tester la connection entre le PC host et le FR

coté FR:

ping 192.168.9.200

coté PC:

ping 192.168.9.202

test de l'accés à internet du FR

Depuis le FR (en direct ou via ssh)

ping 74.125.19.147

Il s'agit d'une adresse de google qui est normalement toujours active.

Dernier test pour vérifier la résolution d'adresse:

ping www.google.fr

Vous noterez que dans la configuration proposée, la résolution d'adresse est effectuée par le DNS configuré pour votre LAN. Nous n'utilisons pas de serveur DNS spécifique pour le FR comme on peut le voir quelquefois (en tant qu'administrateur réseau, vous devez maîtriser la résolution d'adresse et ne pas la confier à n'importe qui).

Si la résolution d'adresse ne fonctionne pas, vous pouvez ajouter la ligne

nameserver 192.168.0.1

dans le fichier /etc/resolv.conf du FR (en adaptant avec l'adresse de votre box sur le LAN, 192.168.0.1 étant un cas courant) Si ça ne fonctionne toujours pas, recopiez le contenu du fichier resolv.conf du PC HOST dans celui du FR.

Mise en garde

Il y a un conflit avec le gestionnaire de réseau (k)networkmanager fait que, lorsque l'on branche notre FR avec son cable usb, la connection automatique mise en place, avec la procédure que vous venez de suivre, tombe au bout de 2 secondes. Une solution est faire sudo killall *networkmanger* avant de brancher le FR et sudo networkmanger &. Apres un redémarrage de l'ordinatuer , il n'y plus besoin de fermer (k)networkmanager, mais cela ne marche qu'un seul fois chez moi..

LA SECTION QUI SUIT EST OBSOLETE

Sur le PC hôte

Il faut installer: usbutils pour bénéficier de la connexion

tester la connexion

# pc hote en root
iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
sysctl -w net.ipv4.ip_forward=1
ip addr add 192.168.0.200/24 dev usb0
ifconfig usb0 up


puis on se connecte en SSH au freerunner (utilisateur normal)

# pc hote en utilisateur normal
ssh root@192.168.0.202

On peut alors lancer des commande comme si on était sur le freerunner

Ensuite on teste via des ping :

# freerunner : test de la connexion au PC
ping 192.168.0.200
# freerunner : test de la connexion à une adresse ip hors réseau local (ici google)
ping 74.125.19.147
# freerunner : verification de la configuration DNS
ping www.google.com

Si cette dernière commande ne fonctionne pas, on peut tenter de rajouter un DNS public comme suit:

# freerunner
echo nameserver 208.67.222.222 > /etc/resolv.conf

sous Mandriva

Testé avec Mandriva2008.1 (version free x86_64)

1. Lancer le Centre de Contrôle Mandriva :

  • menu outils > outils système > configurer votre ordinateur
ou
  • taper "mcc" en ligne de commande

2. Aller dans Réseau & Internet puis partager la connexion internet avec d'autres machines locales

Il suffit ensuite de suivre l'assistant :
  • confirmer l'interface détectée comme connectée à internet (généralement la carte ethernet ou wifi)
  • configurer l'interface détectée pour le neo (usb0) : adresse IP = 192.168.0.200 et masque = 255.255.255.252
  • désactivez ce qui concerne DNS, DHCP, proxy-cache et la diffusion d'imprimantes

Et voilà : l'interface usb0, le partage de connexion internet et le firewall sont configurés ! (et la config est conservée après reboot)

sous Debian/Ubuntu

Sur le PC hôte, éditer le fichier /etc/network/interfaces pour avoir :

# freerunner
auto usb0
iface usb0 inet static
       address 192.168.0.200
       netmask 255.255.255.192
       post-up /etc/network/freerunner start
       pre-down /etc/network/freerunner stop

Créer le fichier /etc/network/freerunner

#!/bin/sh
#
# configures the freerunner for internet
# 
# 
DEVICE=usb0
IPADDR=192.168.0.200
REMOTE_IPADDR=192.168.0.202
NETMASK=255.255.255.0

# get first ip for dns
DNSIP=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' | head -n 1 )

case "$1" in
start)
       iptables -A POSTROUTING -t nat -j MASQUERADE -s $REMOTE_IPADDR
       iptables -A PREROUTING -t nat -p tcp -s $REMOTE_IPADDR -d $IPADDR --dport domain -j DNAT --to-destination $DNSIP
       iptables -A PREROUTING -t nat -p udp -s $REMOTE_IPADDR -d $IPADDR --dport domain -j DNAT --to-destination $DNSIP
       
       if [ "$(cat /proc/sys/net/ipv4/ip_forward)" = "0" ]; then
               echo "temoprarely allow ip_forward for openmoko" > /var/run/openmoko.ip_forward
               echo 1 > /proc/sys/net/ipv4/ip_forward
       fi
       ;;
stop)
       iptables -D POSTROUTING -t nat -j MASQUERADE -s $REMOTE_IPADDR
       iptables -D PREROUTING -t nat -p tcp -s $REMOTE_IPADDR -d $IPADDR --dport domain -j DNAT --to-destination $DNSIP
       iptables -D PREROUTING -t nat -p udp -s $REMOTE_IPADDR -d  $IPADDR --dport domain -j DNAT --to-destination $DNSIP

       if [ -f /var/run/openmoko.ip_forward ]; then
               rm /var/run/openmoko.ip_forward
               echo 0 > /proc/sys/net/ipv4/ip_forward
       fi
       ;;
esac

Rendre le fichier /etc/network/freerunner exécutable avec la commande

chmod +x /etc/network/freerunner

Sur le Freerunner

éditer le fichier /etc/network/interfaces pour avoir :

# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
auto usb0
iface usb0 inet static
	address 192.168.0.202
	netmask 255.255.255.0
	network 192.168.0.0 
	gateway 192.168.0.200
	up echo nameserver 208.67.222.222 > /etc/resolv.conf 
	up echo nameserver 208.67.220.220 >> /etc/resolv.conf


Résoudre le problème des LAN en 192.168.0.0

Par Erwin (d'après la mailing officielle http://lists.openmoko.org/pipermail/support/2008-August/001288.html)

Avec les freebox par exemple, le réseau par défaut est 192.168.0.0 et on a pas toujours la possibilité de changer ce paramètre. Voici comment changer le réseau du FR pour que votre table de routage fonctionne dans ces conditions. J'ai trouvé le moyen de changer les fichiers /etc/network/interfaces sur le FR et sur le pc pour utiliser le réseau en 192.168.9.0 qui est surement non utilisé. Extrait de mon fichier sur le FR :

# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
auto usb0
iface usb0 inet static
        address 192.168.9.202
        netmask 255.255.255.0
        network 192.168.9.0
        gateway 192.168.9.200
# freebox
        up echo nameserver 212.27.40.240 >/etc/resolv.conf
# neufbox
#       up echo nameserver 192.168.1.1 >/etc/resolv.conf

Les 4 dernières lignes, bien sûr, sont à adapter à votre configuration pour passer sur les bons dns.

Extrait de mon fichier sur le pc :

iface usb0 inet static
        address 192.168.9.200
        netmask 255.255.255.192
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.9.192/26
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up iptables -P FORWARD ACCEPT
        pre-down iptables -D POSTROUTING -t nat -j MASQUERADE -s 192.168.9.192/26

Pour le netmask à 192, vous pouvez utiliser 0 aussi.

Si vous faites cela, toute machine ayant une ip en 192.168.9.xxx sera sur le même réseau que le Freerunner tandis qu'avec un masque (netmask) en .192 vous avez 4 sous réseaux indépendants sur l'ip 192.168.9.xxx

Remplacez alors 192.168.9.192/26 par 192.168.9.0/24 dans les lignes post-up iptables ... ci-dessus

Outils personnels