Partage de fichiers AppleTalk et internet entre Macintosh avec Netatalk et NetBSD

Bannière représentant des ordinateurs sous différentes époques de la Terre : les dinosaures, les pyramides, celle des dauphins qui dansent, celle de this is fine avec l'incendie et le satellite qui relie tous les ordinateurs

Pour partager des fichiers entre mes Macintosh j'avais l'habitude de passer par mon serveur FTP configuré localement sur mon NAS ou en copiant les fichiers sur la carte MicroSD de mon BlueSCSI. C'est pas pratique parce qu'on perd le fork de ressources des fichiers ce qui implique de les compresser par exemple en .sit et ça demande pas mal de manipulations pénibles.

En ce moment j'utilise principalement 4 machines :

J'ai trouvé un peu par hasard un boitier Micro AsantéPrint conçu pour permettre à un Macintosh d'accéder à des imprimantes situées sur un réseau Ethernet, le boitier se branche au port série de l'ordinateur et fait simplement une conversion LocalTalk (AppleTalk sur port série) vers EtherTalk (AppleTalk sur réseau Ethernet).

AppleTalk est le protocole réseau historique du Mac, supporté nativement par toutes les versions du système, il permet de mettre en place très facilement des partages de fichiers entre deux machines branchées directement ensemble par un câble série ou entre plusieurs machines reliées au même réseau.

AppleTalk n'est pas du TCP/IP, le support de TCP/IP dans Mac OS se fait via MacTCP pour les systèmes 6 et 7 puis via OpenTransport à partir de Mac OS 7.5. AppleTalk n'est plus supporté par les dernières versions de macOS mais les partages de fichiers AppleShare le sont toujours à travers TCP/IP (afp://) !

Boitier Asanté qui comporte du côté visible un port Ethernet, un BNC, un DB15 et derrière un port série mini-DIN

Pour en revenir au Micro AsantéPrint : ma première difficulté a été de l'alimenter en électricité. Je l'ai reçu sans son transfo d'origine et sur l'étiquette c'est marqué 12V alternatif ! Finalement j'ai démonté un vieil adaptateur secteur linéaire qui trainait chez moi, j'ai enlevé tous les composants pour garder juste le transformateur qui sort 10 ou 20V~ selon comment on se branche, je me suis branchée de sorte à avoir 10V~ à vide (8,5 en charge), c'est du bricolage mais ça fonctionne très bien !

D'un côté le AsantéPrint est connecté au Macintosh SE par le port série mini-DIN et de l'autre il est connecté au réseau local en Ethernet. Aucune configuration ni installation de pilote n'est nécessaire. Mes Macintosh se voient entre eux mais le SE ne peut toujours pas accéder à mon FTP ni à Internet parce qu'il ne communique qu'en AppleTalk ou en encapsulant TCP/IP dans AppleTalk via MacTCP et le Asanté fait juste la conversion entre le port série et l'Ethernet. D'après ce que je comprends un vrai adaptateur réseau SCSI comme le Daynaport émulé par le BlueSCSI fonctionne nativement en TCP/IP, genre il a une adresse MAC (mdr) et comprend quels paquets lui sont adressés.

Mes objectif étaient donc les suivants :

Et après pas mal de temps j'y suis arrivée !

Pour réussir cette mission nous allons avoir besoin des trois mousquetaires de la distribution : le logiciel serveur Netatalk, la passerelle MacIPgw et le système d'exploitation NetBSD !

J'ai choisi NetBSD parce qu'il offre toujours le support du protocole AppleTalk ! C'est compilé dans le noyau de la release x86 mais c'est pas le cas pour toutes les architectures !

Mise en place de la VM dans TrueNAS

Configuration du réseau

La VM doit être mise en réseau en mode bridge, c'est normalement plutôt simple à mettre en place mais j'ai pas mal galéré avec ça sur TrueNAS donc je vous donne les étapes :

Un émoji allongé sur le sol à côté d'une fenêtre « serveur introuvable » géante

Une fois que c'est fait, il faut appliquer les paramètres et redémarrer la machine parce que la connexion ne se réinitialise pas toute seule. En expérimentant j'ai perdu la connexion au NAS plusieurs fois mais ces paramètres sont modifiables facilement depuis une interface semi-graphique accessible depuis la machine en connectant un clavier et un moniteur.

C'est important que la VM soit en mode bridge parce qu'elle doit apparaitre sur le réseau local comme si c'était une machine physique comme les autres. Chez moi le NAS est sur 192.168.1.100 et la VM est sur 102.

Moi j'utilise des IP fixes mais je pense que vous pouvez passer par des IP attribuées par DHCP sans problème, par contre dans ce cas configurez le serveur DHCP pour que les IP ne bougent pas sinon ça va être chiant !

Création de la VM

La mise en place de la VM ensuite se fait simplement, il faut la mettre en réseau sur le bridge qu'on s'est éreintés à configurer, lui donner un peu de mémoire, un peu d'espace disque et une image ISO de NetBSD.

Installation et configuration de NetBSD

Ancien « logo » de NetBSD inspiré du tableau « La liberté guidant le peuple »

NetBSD c'est du UNIX un peu à l'ancienne mais c'est pas chiant du tout ! C'est ma première expérience avec cet OS et j'ai bien aimé !

L'installation se fait simplement en suivant les étapes du programme d'installation, j'ai choisi le partitionnement par défaut et une installation minimale (c).

Toujours dans l'installation, après la mise en place du système de base, c'est important de configurer le réseau (a) en choisissant un hostname et il faut que l'IP ne bouge pas, moi j'ai spécifié l'IP manuellement. Vous pouvez en profiter pour activer le serveur SSH (g) et éventuellement créer un utilisateur autre que root - si vous le faites c'est su pour passer en root. La config du serveur SSH est dans /etc/ssh/sshd_config comme sur Linux je crois.

Après l'installation vous pouvez revenir au programme d'installation avec la commande sysinst !

NetBSD utilise par défaut pkgsrc pour gérer les paquets, il faut ajouter une source :

# PKG_PATH="http://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/$(uname -p)/$(uname -r|cut -f '1 2' -d.)/All/"
# export PKG_PATH

Maintenant vous pouvez télécharger et installer des paquets avec pkg_add ! Une bonne occasion pour installer un éditeur de texte un peu moins chelou que l'espèce de vi fourni par défaut, moi j'ai installé vim mais nano est aussi disponible.

Il existe aussi l'outil pkgin de plus haut niveau pour installer, supprimer et surtout mettre à jour les paquets comme le font apt ou dnf mais il n'est pas installé par défaut et n'est pas indispensable ici donc je vais pas m'embêter avec ça.

Installation et configuration de Netatalk

En un coup de cuillère à pot :

# pkg_add netatalk

Si c'est ok on a du texte qui nous indique que des scripts sont dispo dans un dossier d'exemple. Ces scripts qui servent à contrôler les services peuvent aller dans /etc/rc.d/ ! Pas de systemd ici, surtout ne dites rien à Lennart 😎

# cp /usr/pkg/share/examples/rc.d/timelord /etc/rc.d/timelord
# cp /usr/pkg/share/examples/rc.d/papd /etc/rc.d/papd
# cp /usr/pkg/share/examples/rc.d/netatalk /etc/rc.d/netatalk
# cp /usr/pkg/share/examples/rc.d/macipgw /etc/rc.d/macipgw
# cp /usr/pkg/share/examples/rc.d/atalkd /etc/rc.d/atalkd
# cp /usr/pkg/share/examples/rc.d/a2boot /etc/rc.d/a2boot
# cp /usr/pkg/share/examples/netatalk/netatalk.pam /etc/pam.d/

On ne va pas se servir de tous les services mais une fois qu'ils sont dans rc.d on peut facilement les démarrer ou les arrêter comme on le souhaite. Le fichier pam sert pour l'authentification centralisée je crois, moi je m'en sers pas mais si jamais on peut le retrouver facilement.

La configuration de Netatalk se passe dans /usr/pkg/etc/netatalk/afp.conf, je vous montre mon fichier :

[Global]
hostname = NetBSD
appletalk = yes
afp listen = 192.168.1.102
uam list = uams_clrtxt.so uams_guest.so

[mac]
volume name = Partage NetBSD
path = /afp
legacy volume size = yes
unix priv = no
invisible dots = yes

Ça suffit déjà pour le partage de fichiers ! Pour tester il faut démarrer atalkd et netatalk :

# service atalkd onestart
# service netatalk onestart

Ensuite vous démarrez un Macintosh connecté au même réseau, vous allez dans le Sélecteur et vous devriez voir le partage apparaître ! Réciproquement, avec la commande nbplkup vous devez voir le Macintosh apparaître !

netatalk# nbplkup
                    192.168.2.1:IPGATEWAY                          65280.58:72
                         NetBSD:AFPServer                          65280.58:128
                       netatalk:netatalk                           65280.58:4
                       netatalk:Workstation                        65280.58:4
           AsantéPrint 94765C9A:AsantéPrint                        65295.15:252
                   Macintosh SE:Macintosh SE                       65295.16:253

Pour que Netatalk se lance automatiquement avec la VM il faut ajouter dans /etc/rc.conf les deux lignes suivantes :

atalkd=YES
netatalk=YES

Le partage doit aussi être accessible sur macOS moderne en allant dans le Finder, menu Aller puis Se connecter au serveur (ou juste Cmd-K) puis en rentrant l'adresse afp://...

Fenêtre de connexion au partage dans le système 6
Le serveur apparait automatiquement sur le Macintosh !
Fenêtre de connexion au partage dans macOS 26
Sur macOS 26.0 je dois rentrer l'adresse IP manuellement

Passerelle AppleTalk - TCP/IP

Cette partie traite de la configuration de MacIPgw pour permettre à mon Macintosh SE d'accéder aux autres machines en IP et à Internet en passant par le boitier AsantéPrint. Si vous avez un BlueSCSI ou n'importe quelle vraie carte réseau ce qui suit n'est pas nécessaire.

On part du préalable que le Macintosh est connecté sur un réseau Ethernet à travers une liaison série LocalTalk et que les outils MacTCP et MacTCP Ping téléchargeables ici sont présents.

Au commencement, Dieu créa un tunnel et activa le IP forwarding. Ce fut le premier jour.

# ifconfig tun0 create
# sysctl -w net.inet.ip.forwarding=1

Normalement en faisant ifconfig vous voyez votre tunnel tun0 sans IP et down, c'est normal il sera autoconfiguré par MacIPgw.

Dieu configura MacIPgw. Ce fut le deuxième jour.

On crée le fichier /usr/pkg/etc/netatalk/macipgw.conf avec :

[Global]
network = 192.168.2.0
netmask = 255.255.255.0
nameserver = 192.168.1.100

Pareil vous adaptez la config, dans network j'ai choisi un sous-réseau en 192.168.2.x mais vous pouvez mettre ce que vous voulez. Le nameserver c'est le DNS, le mien est sur 100 mais vous pouvez mettre 8.8.8.8 par exemple (Google 😡)

Dieu mit en place un NAT. Ce fut le troisième jour.

Pour que les paquets destinés au Macintosh arrivent à destination on configure un NAT.

Dans /etc/npf.conf :

map wm0 dynamic 192.168.2.0/24 -> 192.168.1.102 

group default {
    pass in all
    pass out all
}

Vous adaptez en remplaçant 192.168.1.102 par l'IP de votre VM, 192.168.2.0 par le sous-réseau et wm0 par le nom de l'interface réseau principale telle qu'affichée dans ifconfig.

Puis on applique la config et on lance npf :

# npfctl reload
# npfctl start

Dieu dit « lançons la passerelle ! » et cela se passa ainsi. Ce fut le quatrième jour.

On lance la passerelle :

# service macipgw onestart

Maintenant sur le Macintosh il faut configurer MacTCP :

Première fenêtre de configuration MacTCP pour l'IP
Deuxième fenêtre MacTCP avec les options supplémentaires décrites ci-dessus

Après avoir redémarré, vous pouvez ouvrir MacTCP Ping et essayer de ping une adresse random. Côté NetBSD on peut voir ce qui se passe avec tcpdump !

La commande ci-dessous permet de voir les paquets AppleTalk qui atteignent la VM (pensez à adapter wm0).

# tcpdump -i wm0 -n atalk

La commande ci-dessous permet de voir les paquets convertis par MacIPgw dans le tunnel. Si vous voyez quelque chose là-dedans c'est que la passerelle fonctionne ; il faut que le Macintosh soit démarré après la mise en route du service macipgw !

# tcpdump -i tun0 -n

La commande ci-dessous permet de voir les paquets destinés à une adresse (par exemple celle d'un ping) une fois ressortis du tunnel. Si le NAT fonctionne, l'origine du paquet est affichée comme 192.168.1.102 (dans ma config) ; si vous voyez l'origine réelle 192.168.2.x alors il y a un problème et le ping finit probablement en timeout.

# tcpdump -i wm0 -n dst 8.8.8.8

Dieu regarda tout ce qu'il avait fait, et il constata que c'était très bon. Il persista la configuration.

# echo create > /etc/ifconfig.tun0
# echo net.inet.ip.forwarding=1 >> /etc/sysctl.conf

Dans /etc/rc.conf :

macipgw=YES
npf=YES

Les connexions FTP en mode actif ne sont pas possibles à travers le NAT c'est pour ça que Fetch sur le Macintosh renvoie une erreur liée à PORT, je n'ai pas trouvé de solution mais je n'ai plus besoin d'utiliser le FTP.

Pour conclure

Les partages AppleShare sont hyper pratiques ! J'aurais vraiment du me pencher sur ça plus tôt. C'est pas si dur à configurer une fois qu'on a pris les outils en main et la possibilité de partager des fichiers entre des Macs de n'importe quelle époque sans plus jamais avoir de souci du fork de ressource qui se barre c'est juste magique.

La possibilité de se connecter en IP depuis une liaison LocalTalk c'est très pratique aussi : juste deux câbles à brancher, pas de pilote à installer et rien à démonter.

Le seul inconvénient du LocalTalk c'est sa faible vitesse, environ 200 kb/s d'après ce que j'ai lu, la vitesse a l'air similaire à celle du lecteur de disquettes.

Macintosh SE ouvert sur une page Web

Si comme moi vous aimez les Macintosh 68k vous avez peut-être déjà entendu parler de NetBSD parce que c'est je crois le seul UNIX (avec A/UX) qui fonctionne sur cette architecture !

Jean-Pierre Pernaut

« Loin du tumulte moderne des grandes distributions linux et de systemd il existe encore des petits coins de paradis paisibles où il fait bon vivre comme le petit village de NetBSD où d'authentiques artisans unixiens façonnent leur système d'exploitation comme autrefois ! »

En cas d'erreur ou de problème je vous encourage à m'écrire sous ce toot pour que je puisse corriger la page ou vous aider 👇

Post by @mayasynth@eldritch.cafe
View on Mastodon