Faire marcher TFTP sous Debian

Bonjour,

Je viens de récupérer un téléphone IP Cisco 7940. Je dois mettre à jour le firmware de cet appareil pour me permettre d’utiliser le protocole SIP.

Pour cela, il est nécessaire de mettre en place un serveur TFTP. J’ai donc suivit les instructions trouvées dans le post suivant : https://askubuntu.com/questions/457094/tftpd-hpa-server-timeout-from-client-side-please-help

A savoir:
apt-get install xinetd tftpd tftp

Edition /etc/xinetd.d/tftp

service tftp
{
   protocol = udp
   port = 69
   socket_type  = dgram
   wait = yes
  user = nobody
  server = /usr/sbin/in.tftpd
  server_args = /tftpboot
  disable  = no
}

Création du répertoire et positionnement des droits “qui vont bien” :

mkdir /tftpboot
chmod -R 777 /tftpboot
chown -R nobody /tftpboot

Redémarage du serveur
systemctl restart xinetd

Une fois cela fait, je teste mon service en boucle locale :

# tftp localhost
tftp> get OS79XX.TXT
Transfer timed out.

J’obtiens donc ce message ennuyeux : Transfer timed out.

J’ai regardé les traces réseau générée, je vois le message suivant :
0.000016 ::1 ::1 ICMPv6 138 Destination Unreachable (Port unreachable)

Est-ce que cela est du à une mauvaise configuration du firewall ?

Pour info la commande iptable, me renvoi les commandes suivantes :

 Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Ce qui pour moi signifie qu’il n’y a aucun blocage de port en cours… bref je coince et je m’en remet au forum :wink:

Tu as vérifié avec netstat -unap qu’une socket sur le port TFTP est bien ouverte par xinetd ?
Tu as essayé avec 127.0.0.1 au lieu de localhost ?

Hélas ça m’a l’air ok de ce que coté là :

# netstat -taupe | grep inet
udp        0      0 0.0.0.0:tftp            0.0.0.0:*                           root       10233529   22348/xinetd        
udp        0      0 0.0.0.0:tftp            0.0.0.0:*                           root       10233528   22348/xinetd        

Par contre, lorsque je me connecte avec 127.0.0.1, j’observe l’erreur suivante

# tftp 127.0.0.1
tftp> get OS79XX.TXT
Error code 2: Access violation

J’investigue…

Bon le problème est réglé… mais je reste dubitatif : lors d’un précédent essais, j’avais installé tftp via inetd (et non xinetd).

J’ai modifié le fichier /etc/inetd.conf pour qu’il utilise le répertoire de xinetd i.e. /tftpboot

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

J’ai relancé le service :
systemctl restart xinetd

Et hop ça marche :

tftp 127.0.0.1
tftp> get OS79XX.TXT
Received 14 bytes in 0.0 seconds

Ça répond. Je suppose qu’il y a une ligne

::1    localhost

dans ton fichier /etc/hosts, et que le client tftp est compatible IPv6. Par conséquent il essaie d’abord de se connecter en IPv6, alors que le serveur n’écoute qu’en IPv4. Mais après l’échec il devrait réessayer en IPv4.

La ligne existait déjà ou tu l’as créée ?

1 J'aime

Oui, il y a bien une telle ligne dans mon /etc/hosts.

Et reoui, la ligne existait déjà, je l’ai juste changée.