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
- ajout script AP.sh en MaJ1, versions logiciels, et fonctionne aussi pour partager une connexion Wifi via une seconde carte Wifi.
- MaJ du script avec un peu plus de sécurité, 1 seul client, ssid masqué...
- ajout des fichiers du fichier de conf hostapd.conf pour plus de clarté
Maxime T.
Rédacteur chez Kookyoo.net > blog/farwarx
www.teissedre.info