Outils pour utilisateurs

Outils du site


Panneau latéral

tplink-w9980

TP-Link W9980 sous OpenWrt

Flasher OpenWrt

Connection serie

Pour cela, il faut une communication série avec le routeur. Il faut donc utiliser un adaptateur usb/ttl et brancher tout ça selon ces indications. On est pas obligé de souder, on peut utiliser des connecteur GPIO. Ils sont un peu plus fins donc ça bouge un peu dans les trous. Un moyen que ça tienne et de les plier en deux pour faire plus d'épaisseur. Attention donc de ne pas brancher de cable lié à l'alimentation ! Le dernier accès sur le port noté J7 de la board doit être vide (celui qui est détouré de manière carrée en circuit imprimé et qui est encadré en blanc).

Pour se connecter, utiliser putty et mettre comme paramètres :

serial line : /dev/ttyUSB0
speed : 115200
data bits : 8
stop bits : 1
parity : none
flow control : none

Lancer la connection puis allumer la machine. Dans la console série, il va s'afficher ceci :

ROM VER: 1.1.4
CFG 05

ROM VER: 1.1.4
CFG 05

DDR autotuning Rev 1.0
DDR size from 0xa0000000 - 0xa3ffffff
DDR check ok... start booting...



U-Boot 2010.06-svn9352-LANTIQ-v-2.3.08 (Dec 15 2014 - 11:05:49)

CLOCK CPU 500M RAM 250M
DRAM:  64 MiB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   Internal phy(GE) firmware version: 0x8434
vr9 Switch8192 KiB W25Q64 at 0:3 is now current device
MAC: 30-b5-c2-cb-14-1d


run "flash_flash" to bring up the kernel

Hit any key to stop autoboot:  2

Il faut donc appuyer sur n'importe quelle touche pour stopper le boot et pour que la machine ne démmarre pas sur le firware propriétaire TP-Link. On arrive donc à un prompt de la sorte :

VR9 #

Préparer le flash du firmware

Il faut ensuite suivre les indications qui sont dans la section de cette page. Ltechnique de flasher directement la mémoire flash avec le firmware openwrt est interessante car au moins, on l'a à disposition (ici)

Il faut donc télécharger ce fichier sur sa machine, on dira dans /home/user/.

Sur sa machine, il faut installer un serveur TFTP. Sous Debian, c'est comme ceci :

sudo apt-get install tftpd

Ensuite, il faut regarder le chemin qu'utilise tftpd pour stocker et servir les fichiers pour les clients TFTP qui s'y connecteraient. Ceci se trouve dans le fichier /etc/inetd.conf. Chez moi j'ai cette ligne :

tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

Ce qui veut dire que je dois mettre les fichiers à disposition dans le répertoire /srv/tftp. Ça peut être ailleurs, pour cela, il suffit de modifier /srv/tftp en ce que l'on veut.

Ensuite on va donc mettre le fichier téléchargé précédemment dans ce répertoire :

sudo mkdir /srv/tftp
cd /home/user
sudo cp openwrt-lantiq-xrx200-TDW8970-sysupgrade.image /srv/tftp/firmware-tdw8970.image

Il faut enfin configurer notre connection réseau pour la transmission du fichier au routeur. Pour cela, configurer une connection filaire avec ces paramètres :

IP fixe :
Adresse : 192.168.1.100
Masque : 255.255.255.0
Passerelle : 192.168.1.1

Se déconnecter du wifi ou de toute autre connexion réseau pour éviter des erreurs d'adressage IP ou de routes.

Procédure de flash

On retourne sur l'interface de la console série et on va configurer les adresse IP du routeur en tappant ces commandes :

setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.100
setenv bootargs 'board=WD9980'

Puis on charge le firware dans la RAM, on efface le rootfs de la flash et on écrit l'image sur la flash. Enfin, on redemmare et normalement ça va booter sur OpenWrt !

tftpboot 0x80800000 firmware-tdw8970.image
sf erase 0x20000 0x7a0000
sf write 0x80800000 0x20000 0x680004
reset

Configurations de OpenWrt

On va configurer OpenWrt pour travailler plus facilement et lui donner un accès Internet via notre box en attendant que le DSL soit disponible. Pour cela, on peut rester sur la connection serie, ce qui évitera de se couper l'herbe sous le pied.

À la première connection, on va déjà modifier le mot de passe de root :

passwd

Ensuite, on va faire un peu de réseau pour donner l'accès Internet sur le port noté LAN4/WAN et mettre le LAN sur les autres ports (LAN 1,2 et 3). Cela permettra d'avoir un accès Internet sur le routeur si on laisse notre machin-box branchée. On pourra mettre à jour, télécharger des drivers, installer des paquets…

Éditer le fichier /etc/config/network (vim /etc/config/network, il faut donc savoir comment utiliser vim ou vi) :

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd33:ef02:86c7::/48'

config interface 'wan'
        option proto 'dhcp'
        option type 'bridge'
        option ifname 'eth0.1'

config interface 'lan'
        option proto 'static'
        option netmask '255.255.255.0'
        option ipaddr '192.168.2.1'
        option _orig_ifname 'eth0.1'
        option ifname 'eth0.2'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan 'eth0_1'
        option device 'switch0'
        option vlan '1'
        option vid '1'
        option ports '4 6t'

config switch_vlan 'eth0_2'
        option device 'switch0'
        option vlan '2'
        option vid '2'
        option ports '0 2 5 6t'

Editer le fichier /etc/config/firewall et y mettre :

config defaults
        option syn_flood '1'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'REJECT'

config zone
        option name 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option network 'lan'
        option masq '1'

config zone
        option name 'wan'
        option output 'ACCEPT'
        option masq '1'
        option mtu_fix '1'
        option input 'REJECT'
        option forward 'REJECT'

config forwarding
        option src 'lan'
        option dest 'wan'

config rule
        option name 'Allow-DHCP-Renew'
        option src 'wan'
        option proto 'udp'
        option dest_port '68'
        option target 'ACCEPT'
        option family 'ipv4'

config rule
        option name 'Allow-Ping'
        option src 'wan'
        option proto 'icmp'
        option icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-DHCPv6'
        option src 'wan'
        option proto 'udp'
        option src_ip 'fe80::/10'
        option src_port '547'
        option dest_ip 'fe80::/10'
        option dest_port '546'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Input'
        option src 'wan'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        list icmp_type 'router-solicitation'
        list icmp_type 'neighbour-solicitation'
        list icmp_type 'router-advertisement'
        list icmp_type 'neighbour-advertisement'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config include
        option path '/etc/firewall.user'

On ajoute les serveurs DNS de FDN et LDN pour le LAN 

uci add_list dhcp.lan.dhcp_option="6,80.67.169.12,80.67.188.188"
uci commit dhcp

On branche le port LAN4/WAN à la box, on branche notre machine à un des ports libres.

On relance le réseau : /etc/init.d/network restart et maintenant, le port 4 devrait reccupérer une IP depuis la box, notre machine devrait reccupérer une IP de la forme 192.168.2.xxx depuis le routeur. On test depuis la console série : ping www.google.com et depuis notre machine ping www.google.com et ça devrait pinguer.

Quelques pages sur le sujet :

http://wiki.openwrt.org/toh/tp-link/td-w8980

http://wiki.openwrt.org/toh/tp-link/td-w8970

https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fadrenaline.uol.com.br%2Fforum%2Fshowthread.php%3Ft%3D497887%26p%3D1070237896%23post1070237896&edit-text=&act=url

https://forum.openwrt.org/viewtopic.p

https://forum.openwrt.org/viewtopic.php?id=42380

Rootfs sur cléUSB

Deux bonnes pages sur le sujet ici et .

Étant donné que l'espace disponible pour installer des paquets d'OpenWrt est relativement restreint sur l'espace flash du routeur, on va installer la raçine du système (rootfs) sur une cléUSB branchée à l'arrière du routeur. Pour cela, il faut commencer par installer des paquets qui vont bien :

opkg update
opkg install fdisk kmod-usb-core kmod-usb2 usbutils block-mount kmod-usb-storage kmod-fs-ext4

Redémmarer le routeur et pendant ce temps, formater sa clé au format de fichier ext4. Puis brancher la clé à l'arrière du routeur après redemmarrage.

Si nous sommes en accès série, on devrait voir des choses qui se passent lors de l'insertion de la clé. Pour vérifier que la clé est bien présente et reconnue par OpenWrt, lancer ces commandes :

lsusb
fdisk -l

La dernière commande devrait nous donner le nom de device de la clé (par exemple /dev/sda1)

On va maintenant monter la clé et copier tout le système de fichiers dessus :

mkdir /mnt/cleusb
mount /dev/sda1 /mnt/cleusb
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/cleusb -xf -
umount /tmp/cproot

On configure maintenant fstab pour monter au démmarrage en éditant le fichier /etc/config/fstab pour y voir ces lignes :

config mount
        option target        /
        option device        /dev/sda1
        option fstype        ext3
        option options       rw,sync
        option enabled       1
        option enabled_fsck  0

Rebooter et checker en lançant la commande df -h et voir qu'on a maintenant ceci :

Filesystem                Size      Used Available Use% Mounted on
rootfs                    7.1G     35.3M      6.7G   1% /

et mount nous donne :

/dev/sda1 on / type ext4 (rw,relatime,data=ordered)

Faire marcher le VDSL

Pour cela, il va falloir installer un firmware proprietaire. Pour cela, un script est prévu dans l'image (/sbin/vdsl_fw_install.sh).

On va modifier un peu le début du fichier pour qu'il ressemble à ça :

#!/bin/sh
. /lib/functions.sh
 
FW="/tmp/Firmware_Speedport_W921V_1.21.000.bin"
URL="http://hilfe.telekom.de/dlp/eki/downloads/Speedport/Speedport%20W%20921V/Firmware_Speedport_W921V_1.21.000.bin"
FW_TAPI="vr9_tapi_fw.bin"
FW_DSL="vr9_dsl_fw_annex_b.bin"
MD5_FW="0a099d08dbf091c74d685b532cbb1390"
MD5_TAPI="06b6ab3481b8d3eb7e8bf6131f7f6b7f"
MD5_DSL="59dd9dc81195c6854433c691b163f757"

Et ensuite on lance ce script qui va télécharger le firmware pour le VDSL et l'installer au bon endroit :

/sbin/vdsl_fw_install.sh

On va ensuite mettre la bonne configuration dans le fichier /etc/config/network :

config vdsl 'dsl'
    option annex 'a'
    option firmware '/lib/firmware/vdsl.bin'
    option tone 'av'
    option xfer_mode 'ptm'

config atm-bridge 'atm'
    option unit '0'
    option atmdev '0'
    option encaps 'llc'
    option payload 'bridged'
    option vci '35'
    option vpi '8'

Enfin, il faut configurer l'interface WAN pour qu'elle puisse utiliser ce DSL et permettre aux autres machines branchées sur le LAN de joindre Internet. Du coup, on va modifier notre configuration précédente pour l'interface WAN :

config interface 'wan'
    option ifname 'ptm0.835'
    option proto 'pppoe'
    option ipv6 '1'
    option username 'fti/xxxxxxxxx'
    option password 'xxxxxxx'

config interface 'wan6'
    option ifname '@wan'
    option proto 'dhcpv6'

On remarquera que c'est ici que l'on met nos identifiants de connexion de notre fournisseur d'accès Internet. Cette conf correspond à Orange : on utilise le Vlan 835 (d'où l'interface ptm0.835)

Client OpenVpn

Le but est d'installer un client OpenVpn pour faire profiter tout le LAN d'une connexion VPN par un vrai fournisseur d'accès Internet : Rézine.

Installer les paquets qui vont bien :

opkg update
opkg install openvpn-openssl wget

Ajouter dans le fichier /etc/config/network ces lignes :

config interface 'VPN'
    option proto 'none'
    option ifname 'tun0'

Se placer dans le répertoire des configs d'OpenVPN et y mettre le certificat de Rézine :

cd /etc/openvpn
wget www.rezine.org/documentation/tunnels_chiffres/tunnel.rezine.org.pem

Créer un fichier /etc/openvpn/vpn-id.cnf contenant l'utilisateur vpn et le mot de passe sur deux lignes :

vpn87
Ceciestlemotdepasseduvpn==

Créer un fichier de conf pour openvpn /etc/openvpn/vpn-conf.ovpn et y mettre dedans :

client
dev tun
proto tcp
resolv-retry infinite
remote tun.rezine.org 443
nobind
persist-key
persist-tun
script-security 2
cipher BF-CBC
comp-lzo
auth-user-pass /etc/openvpn/vpn-id.cnf
ca /etc/openvpn/tunnel.rezine.org.pem
verb 3

(pour utiliser le port 1194, remplacer proto tcp par proto udp et remote tun.rezine.org 443 par remote tun.rezine.org 1194)

Modifier le fichier /etc/config/openvpn pour que le début ressemble à ça :

#################################################
# Sample to include a custom config file.       #
#################################################

config openvpn custom_config

        # Set to 1 to enable this instance:
        option enabled 1

        # Include OpenVPN configuration
        option config /etc/openvpn/vpn-conf.ovpn

Il faut bien vérifier que toutes les lignes du fichier contenant option enable soit bien à zéro (sauf celle-ci)

Maintenant, on peut lancer les commandes suivantes pour tester puis redemmarer pour voir si tout se lance bien au boot (parfois le montage de l'interface tun0 peut prendre du temps, c'est normal.

/etc/init.d/network restart
/etc/init.d/openvpn stop
/etc/init.d/openvpn start

On vérifie que l'interface est bien montée avec ifconfig et on vérifie que les routes sont bonnes avec route. On devrait alors avoir un truc du genre :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gw-tun.rezine.o 0.0.0.0         UG    0      0        0 tun0
192.168.1.0     *               255.255.255.0   U     0      0        0 br-wan
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0.2
193.33.56.0     *               255.255.255.0   U     0      0        0 tun0
193.33.56.28    192.168.1.1     255.255.255.255 UGH   0      0        0 br-wan

Il y a un bug après l'utilisation du vpn : le reboot ne marche plus depuis une console car le vpn monté l'empêche. Pour cela, il faut rentrer ces commandes pour permettre le reboot ou l'arrêt :

ps | grep openvpn | head -n 1 | awk '{print $1}' | xargs kill -9
reboot

Pour me contacter : julpec@gresille.org

tplink-w9980.txt · Dernière modification: 2015/07/10 22:00 (modification externe)