Table des matières
Wifi avec TL-WN821N
Une clé Wifi qui fonctionne sous Debian, et aussi en “access point” …
La voici: TP-Link - TL-WN821NC ~~READMORE~~
Liens:
branché
# lsusb Bus 006 Device 011: ID 0cf3:7015 Atheros Communications, Inc. TP-Link TL-WN821N v3 802.11n [Atheros AR7010+AR9287] ....
[ 2473.455114] usb 6-1.2.1.4: new high-speed USB device number 10 using ehci_hcd [ 2473.563752] usb 6-1.2.1.4: New USB device found, idVendor=0cf3, idProduct=7015 [ 2473.563754] usb 6-1.2.1.4: New USB device strings: Mfr=16, Product=32, SerialNumber=48 [ 2473.563756] usb 6-1.2.1.4: Product: USB WLAN [ 2473.563757] usb 6-1.2.1.4: Manufacturer: ATHEROS [ 2473.563758] usb 6-1.2.1.4: SerialNumber: 12345 [ 2473.572303] cfg80211: Calling CRDA to update world regulatory domain [ 2473.580727] usb 6-1.2.1.4: ath9k_htc: Firmware - htc_7010.fw not found [ 2473.580732] ath9k_htc: probe of 6-1.2.1.4:1.0 failed with error -22 [ 2473.580742] usbcore: registered new interface driver ath9k_htc
“htc_7010.fw not found”
On a un début de réponse là: http://wiki.debian.org/ath9k_htc
# aptitude versions firmware-atheros p 0.28+squeeze1 stable 500 p 0.35~bpo60+1 squeeze-backports 100
Comme g un noyau 3.2 et que les backports sont disponibles:
# aptitude -t squeeze-backports install firmware-atheros
Je rebranche :
[ 3674.292471] usb 6-1.2.1.4: USB disconnect, device number 10 [ 3818.224944] usb 6-1.2.1.4: new high-speed USB device number 11 using ehci_hcd [ 3818.333691] usb 6-1.2.1.4: New USB device found, idVendor=0cf3, idProduct=7015 [ 3818.333696] usb 6-1.2.1.4: New USB device strings: Mfr=16, Product=32, SerialNumber=48 [ 3818.333699] usb 6-1.2.1.4: Product: USB WLAN [ 3818.333701] usb 6-1.2.1.4: Manufacturer: ATHEROS [ 3818.333703] usb 6-1.2.1.4: SerialNumber: 12345 [ 3818.446215] usb 6-1.2.1.4: ath9k_htc: Transferred FW: htc_7010.fw, size: 72992 [ 3818.507430] ath9k_htc 6-1.2.1.4:1.0: ath9k_htc: HTC initialized with 45 credits [ 3818.634017] ath9k_htc 6-1.2.1.4:1.0: ath9k_htc: FW Version: 1.3 [ 3818.634020] ath: EEPROM regdomain: 0x809c [ 3818.634022] ath: EEPROM indicates we should expect a country code [ 3818.634025] ath: doing EEPROM country->regdmn map search [ 3818.634027] ath: country maps to regdmn code: 0x52 [ 3818.634029] ath: Country alpha2 being used: CN [ 3818.634031] ath: Regpair used: 0x52 [ 3818.636811] ieee80211 phy0: Atheros AR9287 Rev:2 [ 3818.637287] Registered led device: ath9k_htc-phy0 [ 3818.637291] usb 6-1.2.1.4: ath9k_htc: USB layer initialized
tools
# aptitude install wireless-tools
# /sbin/iwconfig ... wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off ...
Si iwconfig
ne retourne pas d'informations associé à l'interface wifi (qui peut avoir un autre nom), alors il y a un problème.
wep
Non merci.
wap
# aptitude install wpasupplicant
Préparer un fichier de conf dans /etc/wpa_supplicant/wpa_supplicant.conf
et contenant (adapter) :
eapol_version=1 ap_scan=1 fast_reauth=1 network={ ssid="<LE_SSID>" scan_ssid=1 proto=WPA key_mgmt=WPA-PSK psk="<CLE_PARTAGE>" priority=5 }
Modifier /etc/network/interfaces
afin d'avoir :
# --- Wifi --- # Test allow-hotplug wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf # ------------
On peut monter l'interface: (attention, ca va couper!)
# ifup wlan0 ... DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8 DHCPOFFER from 192.168.86.2 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPACK from 192.168.86.2 bound to 192.168.86.195 -- renewal in 4560 seconds.
Vérifions la connectivité wifi:
# iwconfig wlan0 wlan0 IEEE 802.11bgn ESSID:"FREEBOX_V7" Mode:Managed Frequency:2.462 GHz Access Point: 00:24:D4:xx:xx:xx Bit Rate=78 Mb/s Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=47/70 Signal level=-63 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:2 Missed beacon:0
Et voila.
Si on maintient un usage avec “dhcp”, alors il est bien d'installer aussi le package resolvconf
qui mettra à jour le fichier /etc/resolv.conf
en fonction des reponses des serveurs “dhcp”.
On peut aussi mettre une ip fixe… as usual.
access point
Liens:
Comme j'ai une clé USB, je vais faire en sorte que l'ensemble fonctionne que si la clé est branché.
De toutes les façons, un daemon dhcpd ou hostapd sans interface wlan, ça fonctionne mal.
Donc, ça va être un peu different de ce que j'ai pu glané sur le Net.
reseau wifi
On va poser un subnet, par exemple:
subnet: 10.10.10.192/26 gateway: 10.10.10.193
La machine hébergeant l'access-point est aussi la gateway…
serveur dhcp
Il faudra fournir des IP, donc on a besoin d'un serveur dhcp:
# aptitude install dhcp3-server
Mais on ne va l'utiliser en daemon, on va l'associé à l'interface wlan.
Voici la conf, dans /etc/dhcp/dhcpd-wlan0.conf
:
ddns-update-style none; option domain-name "wifi.local.thierry-jaouen.fr"; option domain-name-servers ns.local.thierry-jaouen.fr, 8.8.8.8, 8.8.4.4; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 10.10.10.192 netmask 255.255.255.192 { range 10.10.10.208 10.10.10.254; option domain-name "wifi.local.thierry-jaouen.fr"; option domain-name-servers 8.8.8.8, 8.8.4.4; option routers 10.10.10.193; }
C'est surtout la section “subnet” l'important.
Donc:
- les IP vont être alloué entre 208 et 254 sans le subnet 10.10.10.192/26.
- on donne les DNS de google et la gateway est l'“access point” lui-même.
Dés que l'interface “wlan” sera monté, on démarrera le daemon ainsi:
/usr/sbin/dhcpd -4 -q -pf /var/run/dhcpd-wlan0.pid -cf /etc/dhcp/dhcpd-wlan0.conf wlan0
Et on l’arrêtera ainsi:
/bin/kill -SIGTERM $( cat /var/run/dhcpd-wlan0.pid )
installer ap
# aptitude install hostapd
Voici la conf que j'ai mis la dedans: /etc/hostapd# cat hostapd-wlan0.conf
interface=wlan0 driver=nl80211 hw_mode=g ssid=<SSID> channel=11 ctrl_interface=/var/run/hostapd-wlan0 ctrl_interface_group=root macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP wpa_passphrase=<SECRET> wpa_ptk_rekey=600
Il faut fournir un “<SSID>” et un “<SECRET>” (d'au moins 8 caractères).
En résumé: Wifi mode G , wpa2 a secret partagé…
On démarrera ce daemon ainsi:
/usr/sbin/hostapd -B -P /var/run/hostapd-wlan0.pid /etc/hostapd/hostapd-wlan0.conf
Pour l'arrêté , on fera ainsi:
/bin/kill -SIGTERM $( cat /var/run/hostapd-wlan0.pid )
interfaces
Et enfin, on configure l'interface wlan dans /etc/network/interfaces
en mettant:
allow-hotplug wlan0 iface wlan0 inet static address 10.10.10.193 netmask 255.255.255.192 up /usr/sbin/dhcpd -4 -q -pf /var/run/dhcpd-$IFACE.pid -cf /etc/dhcp/dhcpd-$IFACE.conf $IFACE up /usr/sbin/hostapd -B -P /var/run/hostapd-$IFACE.pid /etc/hostapd/hostapd-$IFACE.conf down /bin/kill -SIGTERM $( cat /var/run/hostapd-$IFACE.pid ) down /bin/kill -SIGTERM $( cat /var/run/dhcpd-$IFACE.pid )
Donc, c'est la gateway et on lui attribue , de force, l'IP de la gateway.
On a remplacé “wlan0” par “$IFACE” , qui sera substitué au automatiquement par le nom de l'interface, en l’occurrence: wlan0
A ce stade, lorsqu'on branche la clé, le serveur dhcpd
et hostapd
se lance aussi sur l'interface wlan0
.
On devrait pouvoir s'associé en Wifi (avec le SSID et le SECRET qui va bien) .
On devrait obtenir une IP.
Mais on ne peut pas encore surfer: voir la suite.
NAT
La topologie du réseau est simple:
- eth0 : l'interface dans mon LAN, avec en sortie vers le Net, une FreeBox.
- wlan0 : l'interface wifi.
forward
Autoriser le forward entre les interfaces:
Editer un fichier par exemple: /etc/sysctl.d/local.conf
, et ajouter dedans:
# Les requetes ARP ne traversent pas net.ipv4.conf.all.arp_ignore=1 # Activer forward net.ipv4.ip_forward=1
Appliquer immediatement (et ça le sera aussi a chaque reboot):
# sysctl -p /etc/sysctl.d/local.conf
Dans la foulé, il faut aussi mettre des règles iptables…
ferm
Comme a mon habitude, j'utilise ferm
, une surcouche d'Iptables, pour composer les règles.
# modprobe ip_tables
Ajouter aussi dans /etc/modules
:
ip_tables
Et eventuellement aussi:
ip_conntrack_ftp ip_nat_ftp # ip_conntrack_irc ip_nat_pptp ip_conntrack_pptp
# aptitude install ferm
Editer le fichier de conf, /etc/ferm/ferm.conf
, et mettre un truc pas trop facho.
@def $LAN_IF=eth0; @def $LAN_IP=192.168.1.10; @def $WLAN_IF=wlan0; @def $WLAN_NETWORK=10.10.10.192/26; # ce n'est pas un firewall: chain ( INPUT OUTPUT FORWARD ) policy ACCEPT; # pour faire simple: table nat chain POSTROUTING of $LAN_IF saddr $WLAN_NETWORK SNAT to $LAN_IP; # mais comme on est en wifi, # et qu'on veut pas spécialement ce faire piraté son LAN... # si on n'est pas dans le bon subnet, on drop: chain FORWARD if $WLAN_IF saddr ! $WLAN_NETWORK DROP; # si on veut atteindre un subnet local, on DROP: # sauf pour ping ma freebox (gateway vers le net) chain FORWARD if $WLAN_IF { daddr 192.168.1.254 proto icmp icmp-type echo-request ACCEPT; daddr ( 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 ) DROP; } # si on veut causer avec la gateway, on drop, sauf le ping (c'est cool): chain INPUT if $WLAN_IF { proto icmp icmp-type echo-request ACCEPT; DROP; }
Appliquer immédiatement:
# ferm -i ferm.conf
(Confirmer que tout va bien en tapant: “yes” )
Et voila.
Le forward est autorisé et lorsqu'on sort (POSTROUTING) de l'interface reseau, l'IP source est transformé (SNAT) en l'IP de l'interface du “LAN”. ( “MASQUERADE” est plus adapté sur une interface qui n'a pas d'IP fixe ).
Et puis on ajoute deux ou trois bricoles pour le cas où le reseau wifi serait totalement ouvert ! Qu'il aillent sur le Net, mais pas dans mon reseau
Voila.