Login
blog > farwarx > [TUTO] Créer un point d'accès Wifi et partager une connexion Internet

[TUTO] Créer un point d'accès Wifi et partager une connexion Internet

Posté par : farwarx - Le Samedi 12 Février 2011 à 01:16


android

Bonsoir à tous,

 

Ayant un smartphone Android depuis quelques jours, je m'amuse avec, vous vous en doutez bien ;)

Bref, n'ayant pas d'abonnement Internet dans mon abonnement, j'ai utilisé quelques points pour tester ça pendant 10 jours et c'est vraiement sympa ;)

Bon, j'ai Internet en Wifi à la maison, un peu dans la rue (hotspots gratuit) mais pas au boulot :'( (pas de wifi!!! grrr)

J'ai un pc portable en revanche avec une carte Wifi et un port USB!!!

 

Je dois donc répondre à la problématique suivante: Comment partager Internet de son PC vers son smartphone? (et pas l'inverse)

 

 

Je me suis dis, je vais trouver un moyen de partager Internet via le port USB et c'est réglé, mais non, cela s'appelle du reverse tethering et il faut rooter son smartphone et je n'en ai pas envie...

Donc il reste le Wifi... Sur mon Ubuntu du boulot, je créé un réseau ad-hoc, je le cherche avec mon smartphone et rien... je regarde sur le net, et paf!!!! Android ne gère pas les réseaux ad-hoc. Il y a bien sûr un moyen en rootant son tel.... très peu pour moi....

Dernière solution, créer un point d'accès Wifi sur son PC, mais c'est un peu plus compliqué et je veux que ce soit simple. Aimant approfondir les choses, j'ai passé la soirée à scripter un point d'accès Wifi et j'ai réussi (qui l'eut cru!).

 

 

J'utilise hostapd et dnsmasq sur une carte Wifi avec un chipset Atheros et bien sur sur Ubuntu 10.10.

Donc je me lance, il faut:

  • avoir Internet en filaire
  • configurer la carte réseau Wifi
  • créer le point d'accès avec sécurité WPA quand même
  • lancer le serveur DHCP/DNS
  • tester ;)

 

Prérequis: installation de hostapd et dnsmasq

J'ai utilisé hostapd en version 0.6.10 et dnsmasq en version 2.55.

 

Voici mon script

 

AP.sh
#!/bin/bash
# inspiration: http://forum.ubuntu-fr.org/viewtopic.php?id=427681
# Il faut désactiver les réseaux sans fils dans network-manager avant de lancer le script!!!

internet="eth0"
wifi="wlan0"
channel="6"
driver="nl80211"
ssid="Kookyoo_AP"
passphrase="Kookyoo.net"
IP="192.168.66"
netmask="255.255.255.0"
conf="/tmp/hostapd.conf"
conf_exemple="/usr/share/doc/hostapd/examples/hostapd.conf.gz"

case "$1" in
  start)
    echo -e " Démarrage de l'AP en cours...."
    zcat $conf_exemple > $conf
    sed -i "s/^interface=.*/interface=$wifi/" $conf
    sed -i "s/^channel=.*/channel=$channel/" $conf
    echo "driver=$driver" >> $conf
    sed -i "s/^ssid=.*/ssid=$ssid/" $conf
    echo "wpa_passphrase=$passphrase" >> $conf
    echo "wpa=3" >> $conf
    echo "wpa_key_mgmt=WPA-PSK" >> $conf
    echo "wpa_pairwise=TKIP CCMP" >> $conf
    echo "hw_mode=g" >> $conf
    ifconfig $wifi down
    ifconfig $wifi $IP.1 netmask $netmask up
    hostapd -B $conf
    dnsmasq --interface $wifi --cache-size=256 --dhcp-range=$IP.2,$IP.3,1h
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -F INPUT
    iptables -F OUTPUT
    iptables -F FORWARD
    iptables -I INPUT -i lo -j ACCEPT
    iptables -I INPUT -i $wifi -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    iptables -t nat -A POSTROUTING -o $internet -j MASQUERADE
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo -e " AP on. "
  ;;
  stop)
    echo -e " Arrêt de l'AP en cours..."
    kill -15 `pidof hostapd`
    rm -f $conf
    kill -15 `pidof dnsmasq`
    ifconfig $wifi down
    /etc/network/if-pre-up.d/iptables-start
    echo 0 > /proc/sys/net/ipv4/ip_forward
    echo -e " AP off. "
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  status)
    echo "pidof hostapd: `pidof hostapd`"
    echo "pidof dnmasq: `pidof dnsmasq`"
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}" >&2
    exit 1
  ;;
esac

exit 0

 

 

Je viens de faire une version améliorer du script, mais qui fait la même chose.

 

 

AP.sh (MaJ1)

#!/bin/bash
# inspiration: http://forum.ubuntu-fr.org/viewtopic.php?id=427681

#appli
iptables="/sbin/iptables"
echo="/bin/echo"
ifconfig="/sbin/ifconfig"
hostapd="/usr/sbin/hostapd"
dnsmasq="/usr/sbin/dnsmasq"
kill="/bin/kill"
rm="/bin/rm"
sh="/bin/sh"

#variables
internet="wlan0"
wifi="wlan1"
channel="6"
driver="nl80211"
ssid="
Kookyoo_AP"
passphrase="Kookyoo.net"
IP="192.168.66"
netmask="255.255.255.0"
conf="/tmp/AP.hostapd"
firewall="/tmp/AP.firewall"

case "$1" in
  start)
    $echo -e " Démarrage de l'AP en cours...."
    $echo -e "#fichier de conf temporaire pour hostapd interface=$wifi channel=$channel driver=$driver ssid=$ssid wpa_passphrase=$passphrase wpa=3 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP hw_mode=g" >> $conf
    $ifconfig $wifi down
    $ifconfig $wifi $IP.1 netmask $netmask up
    $hostapd -B $conf
    $dnsmasq --interface $wifi --cache-size=256 --dhcp-range=$IP.2,$IP.3,1h
    echo -e "$iptables -P INPUT DROP $iptables -P OUTPUT ACCEPT $iptables -P FORWARD ACCEPT $iptables -F INPUT $iptables -F OUTPUT $iptables -F FORWARD $iptables -I INPUT -i lo -j ACCEPT $iptables -I INPUT -i $wifi -j ACCEPT $iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT $iptables -t nat -A POSTROUTING -o $internet -j MASQUERADE" > $firewall
    $sh $firewall
    $echo 1 > /proc/sys/net/ipv4/ip_forward
    $echo -e "Rappel configuration: - ESSID: $ssid - Channel: $channel - Security: WPA - Passphrase: $passphrase "
    $echo " AP on. "
  ;;
  stop)
    $echo -e " Arrêt de l'AP en cours..."
    $kill -15 `pidof hostapd`
    $rm -f $conf $firewall
    $kill -15 `pidof dnsmasq`
    $ifconfig $wifi down
    $sh /etc/network/if-pre-up.d/iptables-start
    $echo 0 > /proc/sys/net/ipv4/ip_forward
    $echo -e " AP off. "
  ;;
  restart)
    $0 stop
    $0 start
  ;;

  status)
    $echo "pidof hostapd: `pidof hostapd`"
    $echo "pidof dnmasq: `pidof dnsmasq`"
  ;;
  *)
    $echo "Usage: $0 {start|stop|restart|status}" >&2
    exit 1
  ;;
esac

exit 0

 

 

AP.sh (MaJ2)

#!/bin/bash
# inspiration: http://forum.ubuntu-fr.org/viewtopic.php?id=427681
# Il faut désactiver les réseaux sans fils dans network-manager avant de lancer le script!!!

#appli
iptables="/sbin/iptables"
echo="/bin/echo"
ifconfig="/sbin/ifconfig"
hostapd="/usr/sbin/hostapd"
dnsmasq="/usr/sbin/dnsmasq"
kill="/bin/kill"
rm="/bin/rm"
sh="/bin/sh"

#variables
internet="wlan0"
wifi="wlan1"
channel="6"
driver="nl80211"
ssid="
Kookyoo_AP"
passphrase="Kookyoo.net"
IP="192.168.66"
netmask="255.255.255.0"
conf="/tmp/AP.hostapd"
firewall="/tmp/AP.firewall"
MAC="AA:BB:CC:DD:FF:GG"
MACOK="/etc/hostapd.accept"

case "$1" in
  start)
    $echo -e " Démarrage de l'AP en cours...."
    $echo -e "#fichier de conf temporaire pour hostapd interface=$wifi channel=$channel driver=$driver ssid=$ssid wpa_passphrase=$passphrase wpa=3 wpa
_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP hw_mode=g max_num_sta=1 macaddr_acl=1 accept_mac_file=$MACOK ignore_broadcast_ssid=1" >> $conf
    $echo -e "$MAC" > $MACOK
    $ifconfig $wifi down
    $ifconfig $wifi $IP.1 netmask $netmask up
    $hostapd -B $conf
    $dnsmasq --interface $wifi --cache-size=256 --dhcp-range=$IP.2,$IP.3,1h
    echo -e "$iptables -P INPUT DROP $iptables -P OUTPUT ACCEPT $iptables -P FORWARD ACCEPT $iptables -F INPUT $iptables -F OUTPUT $iptables -F FORWARD
n$iptables -I INPUT -i lo -j ACCEPT $iptables -I INPUT -i $wifi -j ACCEPT $iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT $iptables -t nat -A PO
STROUTING -o $internet -j MASQUERADE" > $firewall
    $sh $firewall
    $echo 1 > /proc/sys/net/ipv4/ip_forward
    $echo -e "Rappel configuration: - ESSID: $ssid - Channel: $channel - Security: WPA - Passphrase: $passphrase "
    $echo " AP on. "
  ;;
  stop)
    $echo -e " Arrêt de l'AP en cours..."
    $kill -15 `pidof hostapd`
    $rm -f $conf
    $kill -15 `pidof dnsmasq`
    $ifconfig $wifi down
    $sh /etc/network/if-pre-up.d/iptables-start
    $echo 0 > /proc/sys/net/ipv4/ip_forward
    $echo -e " AP off. "
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  status)
    $echo "pidof hostapd: `pidof hostapd`"
    $echo "pidof dnmasq: `pidof dnsmasq`"
  ;;
  *)
    $echo "Usage: $0 {start|stop|restart|status}" >&2
    exit 1
  ;;
esac

exit 0

 

Le script est totalement modifiable (interface, channel, ssid, passphrase etc.... vous n'avez qu'à lire et modifier ce dont vous avez besoin.

 

Vous remarquez également que je générère le fichier du point d'accès à chaque fois, vous pouvez le modifier en dur si besoin. Au niveau parefeu, je reconfigure le mien ans le stop et pour dnsmasq, je le lance avec les options necessaires mais le stric minimum.

 

 

 

Une fois lancé, mon smarphone voit bien le point d'accès, s'y connecte et peut même surfer ;)

J'en ai profité pour faire des captures de trames pour voir ce qu'il fait sur Internet (widget, sync, appli...), il faut que j'analyse ça.

 

Bon, le seul hic, c'est que je l'ai testé sur mon eeepc (chipset atheros) et pas sur le portable du boulot (chipster intel 3945)... il faut que je teste ça, mais bon, le proof of concept est fait ;)

 

héhéhéhé!!!!

 

 

hostapd.conf

#fichier de conf pour hostapd

# interface wifi qui deviendra un AP
interface=wlan1

#channel d'écoute
channel=6

#driver universel, à modifier si vous avez une carte non reconnue
driver=nl80211

#SSID
ssid=
Kookyoo_AP

#Passphrase
wpa_passphrase=Kookyoo.net

#WPA-PSK
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP

#Mode G (54Mbit/s)
hw_mode=g

#nombre maximum de client
max_num_sta=1

#refuser tous les clients, sauf ceux de la liste blanche
macaddr_acl=1

#fichier de liste blanche qui doit contenir la ou les adresses MAC, 1/ligne
accept_mac_file=/etc/hostapd.accept

#masquer le SSID
ignore_broadcast_ssid=1

 

 

Liens

  • http://forum.ubuntu-fr.org/viewtopic.php?id=427681
  • http://www.android.com/
  • http://hostap.epitest.fi/hostapd/
  • http://www.thekelleys.org.uk/dnsmasq/doc.html

 

 

Compatiblité (MaJ)

  • Dlink DWL-G122 (rt73usb) OK
  • Dlink DWL-G650 (ath5k) OK
  • Intel 3945ABG (iwl3945) NOK
  • Atheros AR9285 (ath9k) OK

 

 MAJ

  1. ajout script AP.sh en MaJ1, versions logiciels, et fonctionne aussi pour partager une connexion Wifi via une seconde carte Wifi.
  2. MaJ du script avec un peu plus de sécurité, 1 seul client, ssid masqué...
  3. ajout des fichiers du fichier de conf hostapd.conf pour plus de clarté

 

 

Billet sous licence Creative Commons BY-NC-SA 

Maxime T.

Rédacteur chez Kookyoo.net > blog/farwarx

www.teissedre.info







Commentaires 3 commentaires

Seb le 12 Février 2011 à 16:12

Bien joué, c'est une bonne solution. N'ayant toujours pas de smartphone je ne suis pas prêt de tester mais ça m'a l'air pas mal.

invité le 07 Novembre 2011 à 13:36

petites modifs à faire : rajouter des saut de lignes ( ) après chaque paramètre pour l'écriture des fichiers de conf dans /tmp;
et sinon il manque le code du script /etc/network/if-pre-up.d/iptables-start dans le stop du case.
Avec ça, ça fonctionne parfaitement.
merci!

farwarx le 07 Novembre 2011 à 14:49

invité > merci à toi ;)



.laisser un commentaire




Codes html interdits. Les liens sont convertis automatiquement.

Réalisation

Code & Design : Sébastien Cardona

Page générée en : 0.388932s