Outils pour utilisateurs

Outils du site


tplink-w9980

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

tplink-w9980 [2015/07/10 22:00] (Version actuelle)
Ligne 1: Ligne 1:
 +====== 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 [[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|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 :
 +
 +<​code>​
 +serial line : /​dev/​ttyUSB0
 +speed : 115200
 +data bits : 8
 +stop bits : 1
 +parity : none
 +flow control : none
 +</​code>​
 +
 +Lancer la connection puis allumer la machine. Dans la console série, il va s'​afficher ceci :
 +
 +<​code>​
 +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
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +VR9 #
 +</​code>​
 +
 +==== Préparer le flash du firmware ====
 +
 +Il faut ensuite suivre les indications qui sont dans la section de [[http://​wiki.openwrt.org/​toh/​tp-link/​td-w8970#​installation_direct_to_flash|cette page]]. Ltechnique de flasher directement la mémoire flash avec le firmware openwrt est interessante car au moins, on l'a à disposition ([[https://​downloads.openwrt.org/​barrier_breaker/​14.07/​lantiq/​xrx200/​openwrt-lantiq-xrx200-TDW8970-sysupgrade.image|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 :
 +
 +<code bash>
 +sudo apt-get install tftpd
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +tftp            dgram   ​udp ​    ​wait ​   nobody ​ /​usr/​sbin/​tcpd ​ /​usr/​sbin/​in.tftpd /srv/tftp
 +</​code>​
 +
 +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 :
 +
 +<code bash>
 +sudo mkdir /srv/tftp
 +cd /home/user
 +sudo cp openwrt-lantiq-xrx200-TDW8970-sysupgrade.image /​srv/​tftp/​firmware-tdw8970.image
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +IP fixe :
 +Adresse : 192.168.1.100
 +Masque : 255.255.255.0
 +Passerelle :​ 192.168.1.1
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +setenv ipaddr 192.168.1.1
 +setenv serverip 192.168.1.100
 +setenv bootargs '​board=WD9980'​
 +</​code>​
 +
 +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 !
 +
 +<​code>​
 +tftpboot 0x80800000 firmware-tdw8970.image
 +sf erase 0x20000 0x7a0000
 +sf write 0x80800000 0x20000 0x680004
 +reset
 +</​code>​
 +
 +===== 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 :
 +
 +<​code>​
 +passwd
 +</​code>​
 +
 +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''​) :
 +
 +<​code>​
 +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'
 +</​code>​
 +
 +
 +Editer le fichier ''/​etc/​config/​firewall''​ et y mettre :
 +
 +<​code>​
 +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'​
 +</​code>​
 +
 +On ajoute les serveurs DNS de FDN et LDN pour le LAN 
 +
 +<​code>​
 +uci add_list dhcp.lan.dhcp_option="​6,​80.67.169.12,​80.67.188.188"​
 +uci commit dhcp
 +</​code>​
 +
 +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 [[https://​www.loganmarchione.com/​2015/​02/​openwrt-with-openvpn-client-on-tp-link-tl-mr3020-3/#​Setup_WAN_interface|ici]] et [[https://​samhobbs.co.uk/​2013/​11/​more-space-for-packages-with-extroot-on-your-openwrt-router|là]].
 +
 +É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 :
 +
 +<​code>​
 +opkg update
 +opkg install fdisk kmod-usb-core kmod-usb2 usbutils block-mount kmod-usb-storage kmod-fs-ext4
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +lsusb
 +fdisk -l
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +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
 +</​code>​
 +
 +On configure maintenant ''​fstab''​ pour monter au démmarrage en éditant le fichier ''/​etc/​config/​fstab''​ pour y voir ces lignes :
 +
 +<​code>​
 +config mount
 +        option target ​       /
 +        option device ​       /dev/sda1
 +        option fstype ​       ext3
 +        option options ​      ​rw,​sync
 +        option enabled ​      1
 +        option enabled_fsck ​ 0
 +</​code>​
 +
 +Rebooter et checker en lançant la commande ''​df -h''​ et voir qu'on a maintenant ceci :
 +
 +<​code>​
 +Filesystem ​               Size      Used Available Use% Mounted on
 +rootfs ​                   7.1G     ​35.3M ​     6.7G   1% /
 +</​code>​
 +
 +et ''​mount''​ nous donne :
 +
 +<​code>​
 +/dev/sda1 on / type ext4 (rw,​relatime,​data=ordered)
 +</​code>​
 +
 +===== 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 :
 +
 +<code bash>
 +#!/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"​
 +</​code>​
 +
 +Et ensuite on lance ce script qui va télécharger le firmware pour le VDSL et l'​installer au bon endroit :
 +
 +<code bash>
 +/​sbin/​vdsl_fw_install.sh
 +</​code>​
 +
 +On va ensuite mettre la bonne configuration dans le fichier ''/​etc/​config/​network''​ :​
 +
 +<​code>​
 +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'​
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +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'​
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +opkg update
 +opkg install openvpn-openssl wget
 +</​code>​
 +
 +Ajouter dans le fichier ''/​etc/​config/​network''​ ces lignes :
 +
 +<​code>​
 +config interface '​VPN'​
 +    option proto '​none'​
 +    option ifname '​tun0'​
 +</​code>​
 +
 +Se placer dans le répertoire des configs d'​OpenVPN et y mettre le certificat de Rézine :
 +
 +<​code>​
 +cd /​etc/​openvpn
 +wget www.rezine.org/​documentation/​tunnels_chiffres/​tunnel.rezine.org.pem
 +</​code>​
 +
 +Créer un fichier ''/​etc/​openvpn/​vpn-id.cnf''​ contenant l'​utilisateur vpn et le mot de passe sur deux lignes :
 +
 +<​code>​
 +vpn87
 +Ceciestlemotdepasseduvpn==
 +</​code>​
 +
 +Créer un fichier de conf pour openvpn ''/​etc/​openvpn/​vpn-conf.ovpn''​ et y mettre dedans :
 +
 +<​code>​
 +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
 +</​code>​
 +
 +(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 :
 +
 +<​code>​
 +#################################################​
 +# 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
 +</​code>​
 +
 +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.
 +
 +<​code>​
 +/​etc/​init.d/​network restart
 +/​etc/​init.d/​openvpn stop
 +/​etc/​init.d/​openvpn start
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +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
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +ps | grep openvpn | head -n 1 | awk '​{print $1}' | xargs kill -9
 +reboot
 +</​code>​
 +
 +
 +Pour me contacter : julpec@gresille.org
 +
 +
  
tplink-w9980.txt · Dernière modification: 2015/07/10 22:00 (modification externe)