schneerunzel
Goto Top

AirPrint im Remote Subnets

Moin zusammen,

folgendes Problem: ich habe einen airPrint Drucker in meinem Netzwerk A und möchte aus einem anderen Netzwerk auf diesem per airPrint drucken.

Aufbau:
Netzwerk A (192.168.1.0/24) ist das Netzwerk in dem sich der Drucker (192.168.1.12) befindet. Dieses Netzwerk läuft in einem VLAN.
Netzwerk B (192.168.2.0/24) ist ein Netzwerk in dem sich die privaten Geräte der Mitarbeiter oder Geräte von Gästen befinden (separates VLAN)
Netzwerk C (192.168.3.0/24) ist ein VPN Standort
In der Mitte hängte eine Firewall, die z.B. den Site2Site VPN hält bzw. als Gateway zwischen den Netzwerken fungiert.
Laut der Firewall regeln, dürfen (aktuell zum Testen) die Netzwerk B und C mit any zu dem Drucker (192.168.1.12)

Der Zugriff der Netze B und C auf Netzwerk A beschränkt sich wirklich nur auf das Drucken. Aus unterschiedlichen Gründen ist es z.B. nicht möglich, dass diese Netze einen gemeinsamen DNS Server nutzen.
Im Netzwerk A gibt es weitere Drucker oder Apple TVs, die nicht mit in den Netzwerken B und C gefunden werden sollen. Es betrifft nur einen einzigen Drucker.

Jetzt möchte ich, dass die iOS Geräte aus den Netzwerken B und C auch auf dem Drucker im Netzwerk A Drucken können.

Was muss ich tun, damit die Geräten den Drucker finden.
Bin ich mit meinem iPhone im Netzwerk A, finde ich den Drucker. Bin ich in B oder C, dann natürlich nicht.

Ich habe mal etwas gelesen und z.B. diesen Artikel gefunden:
Netzwerk Management Server mit Raspberry Pi

Den Ansatz finde ich ziemlich passend. Aufgrund der Struktur des Netzwerks passt die Lösung mit einem Linux System in den anderen Netzwerken ganz gut. In jedem der Netzwerke B und C habe ich ohnehin ein Linux System, welches avahi mit hosten kann.

Ich habe als ein Linux System im Netzwerk A geschnappt und mir mit dem Befehl
avahi-browse --all --ignore-local --resolve --terminate
einmal die aktuellen Infos angezeigt.
Ausgabe:
= enp1s0 IPv4 airPrintDrucker                                   Secure Internet Printer local
   hostname = [myq.local]
   address = [192.168.1.12]
   port = [8632]
   txt = ["priority=60" "ty=airPrintDrucker" "adminurl=https://myq.local:8090" "txtvers=1" "rp=queue/airPrintDrucker" "rfo=" "note=aQrate Queue" "qtotal=1" "product=aQrate Product" "pdl=application/postscript,application/octet-stream,application/pdf,image/urf,image/pwg-raster,image/tiff,image/jpeg,application/vnd.hp-PCLXL,application/vnd.xpsdocument,application/postscript" "usb_MFG=" "usb_MDL=" "usbCMD=" "air=username,password" "TLS=1.2" "UUID=e73dbb08-fcda-7f34-85b8-c5a9dc0983c0" "Transparent=F" "Binary=F" "TBCP=F" "kind=document" "Bind=U" "Collate=U" "Color=T" "Copies=T" "Duplex=T" "Fax=U" "PaperCustom=U" "PaperMax=isoC-A2" "Scan=U" "Sort=U" "URF=CP255,DM4,FN3,IFU0,IS19-20-21,MT1-2-3-4-5-6-11-12-13,OB1-10,PQ4,RS600,SRGB24,V1.4,W8"]  

Auf dem Linux System im Netzwerk B habe ich anschließend avahi installier
apt install libnss-mdns avahi-utils
und versucht unter /etc/avahi/services eine drucker.service anzulegen.

Die Config drucker.service sieht wie folgt aus:
<?xml version="1.0" standalone='no'?>  
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">  
<service-group>
        <name>airPrintDrucker</name>
        <service>
                <type>_ipps._tcp</type>
                <port>8632</port>
                <host-name>myq.local</host-name>
                <txt-record>URF=CP255,DM4,FN3,IFU0,IS19-20-21,MT1-2-3-4-5-6-11-12-13,OB1-10,PQ4,RS600,SRGB24,V1.4,W8</txt-record>
                <txt-record>Sort=U</txt-record>
                <txt-record>Scan=U</txt-record>
                <txt-record>PaperMax=isoC-A2</txt-record>
                <txt-record>PaperCustom=U</txt-record>
                <txt-record>Fax=U</txt-record>
                <txt-record>Duplex=T</txt-record>
                <txt-record>Copies=T</txt-record>
                <txt-record>Color=T</txt-record>
                <txt-record>Collate=U</txt-record>
                <txt-record>Bind=U</txt-record>
                <txt-record>kind=document</txt-record>
                <txt-record>TBCP=F</txt-record>
                <txt-record>Binary=F</txt-record>
                <txt-record>Transparent=F</txt-record>
                <txt-record>UUID=e73dbb08-fcda-7f34-85b8-c5a9dc0983c0</txt-record>
                <txt-record>TLS=1.2</txt-record>
                <txt-record>air=username,password</txt-record>
                <txt-record>usbCMD=</txt-record>
                <txt-record>usb_MDL=</txt-record>
                <txt-record>usb_MFG=</txt-record>
                <txt-record>pdl=application/postscript,application/octet-stream,application/pdf,image/urf,image/pwg-raster,image/tiff,image/jpeg,application/vnd.hp-PCLXL,application/vnd.xpsdocument,application/postscript</txt-record>
                <txt-record>product=aQrate Product</txt-record>
                <txt-record>qtotal=1</txt-record>
                <txt-record>note=aQrate Queue</txt-record>
                <txt-record>rfo=</txt-record>
                <txt-record>rp=queue/airPrintDrucker</txt-record>
                <txt-record>txtvers=1</txt-record>
                <txt-record>adminurl=https://myq.local:8090</txt-record>
                <txt-record>ty=airPrintDrucker</txt-record>
                <txt-record>priority=60</txt-record>
        </service>
</service-group>


Wenn ich mir syslog ansehe, wird der Service auch erfolgreich geladen.
Leider finde ich den Drucker mit meinem iPhone trotzdem nicht.

Wenn ich auf dem Linux System im Netzwerk B (auf dem auch avahi selbst läuft) wieder versuche mir die Infos mit
avahi-browse --all --ignore-local --resolve --terminate
anzuzeigen, erhalte ich zwar in der Ausgabe
= enp1s0 IPv4 airPrintDrucker                                  Secure Internet Printer local
   hostname = [myq.local]
   address = [10.66.32.12]
   port = [8632]
   txt = ["priority=60" "ty=airPrintDrucker" "adminurl=https://myq.local:8090" "txtvers=1" "rp=queue/airPrintDrucker" "rfo=" "note=aQrate Queue" "qtotal=1" "product=aQrate Product" "pdl=application/postscript,application/octet-stream,application/pdf,image/urf,image/pwg-raster,image/tiff,image/jpeg,application/vnd.hp-PCLXL,application/vnd.xpsdocument,application/postscript" "usb_MFG=" "usb_MDL=" "usbCMD=" "air=username,password" "TLS=1.2" "UUID=e73dbb08-fcda-7f34-85b8-c5a9dc0983c0" "Transparent=F" "Binary=F" "TBCP=F" "kind=document" "Bind=U" "Collate=U" "Color=T" "Copies=T" "Duplex=T" "Fax=U" "PaperCustom=U" "PaperMax=isoC-A2" "Scan=U" "Sort=U" "URF=CP255,DM4,FN3,IFU0,IS19-20-21,MT1-2-3-4-5-6-11-12-13,OB1-10,PQ4,RS600,SRGB24,V1.4,W8"]  
aber eben auch eine Fehlermeldung
Failed to resolve service 'airPrintDrucker' of type '_ipps._tcp' in domain 'local': Timeout reached  
Failed to resolve service 'airPrintDrucker' of type '_ipps._tcp' in domain 'local': Timeout reached  


Interpretiere ich die Meldung richtig: myq.local kann nicht aufgelöst werden?

Hat jemand eine Idee, wie man das Problem lösen kann.

Vielen Dank vorab.

Content-ID: 4866196821

Url: https://administrator.de/contentid/4866196821

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

chgorges
chgorges 05.12.2022 um 22:33:03 Uhr
Goto Top
Zitat von @schneerunzel:

Moin zusammen,
Moin,
folgendes Problem: ich habe einen airPrint Drucker in meinem Netzwerk A und möchte aus einem anderen Netzwerk auf diesem per airPrint drucken.
Ok soweit.

In der Mitte hängte eine Firewall, die z.B. den Site2Site VPN hält bzw. als Gateway zwischen den Netzwerken
Vergangenheit? Was hängt das jetzt?

Ich habe mal etwas gelesen und z.B. diesen Artikel gefunden:
Netzwerk Management Server mit Raspberry Pi
Murks und Bastelei.

Hat jemand eine Idee, wie man das Problem lösen kann.
Schreib mal, was deine Firewall als Subnetzrouter abgelöst hat, ggf. kann das auch schon als MDNS-Relay herhalten.

VG
aqui
aqui 05.12.2022 aktualisiert um 22:52:37 Uhr
Goto Top
Murks und Bastelei.
Das ist Unsinn und kann man so pauschal nicht sagen. Es löst auf alle Fälle das Problem wenn man einen Router oder eine Firewall ohne Bonjour Proxy hat.
Ohne einen solchen Proxy ist es nur mit solcher Zusatzhardware zu lösen.
Wenn man eine pfSense oder OPNsense Firewall sein eigen nennt ist das über das AVAHI Package einfach zu lösen. (Siehe auch hier)
Der TO sollte lieber mal mit tcpdump (apt install tcpdump) genau checken was genau der Proxy für mDNS Broadcasts in die entsprechenden Segmente sendet.
schneerunzel
schneerunzel 06.12.2022 um 02:06:01 Uhr
Goto Top
Die Darstellung mit (nur) drei Netzen ist als vereinfachte Darstellung zu verstehen.
Es gibt auch Netzwerke, die durch Hardware von Dritten betrieben werden. Die Freigaben und das Routing in diese Netzwerke funktioniert zwar, aber ich habe keinen Einfluss auf die VPN Hardware. Daher ist eine Lösung über pfsense oder Ähnliches nicht möglich.
Mr-Gustav
Mr-Gustav 06.12.2022 um 07:43:33 Uhr
Goto Top
Das Airprint Geraffel benötigt mDNS und wenns über Netzgrenzen hinweg sein soll brauchst du irgendeine Art Proxy dafür. Ich meine die PFSense kann das bzw. es gibt ein Linux Paket mit welchem man der PFSense das beibringen kann.

ich glaube aber mit der .local Domainendung wird aber Probleme geben wenn ich das richtig im Kopf habe.
aqui
aqui 06.12.2022 aktualisiert um 16:29:28 Uhr
Goto Top
Ich meine die PFSense kann das
Das kann sie und ist das oben genannte AVAHI Package. Das muss man über den onboard Package Manager installieren und entsprechend customizen. Eine Anleitung dafür findet man hier im Forum.
schneerunzel
schneerunzel 14.12.2022 um 08:11:54 Uhr
Goto Top
Hallo zusammen,

wie gesagt im Bereich der Netzwerk Infrastruktur haben ich keine Möglichkeit da etwas zu tun. Daher scheiden die Lösungen rund um pfSense oder ähnliches aus. Ein richtiger Proxy funktioniert in meinem Beispiel leider nicht...
aqui
aqui 14.12.2022 aktualisiert um 10:23:02 Uhr
Goto Top
Ein richtiger Proxy funktioniert in meinem Beispiel leider nicht...
Warum nicht? Normal ist das der richtige Weg das umzusetzen. Wo ist denn genau der Fehler bei dir bzw. WAS genau rennt schief? Mit dem RasPi und AVAHI ist das eigentlich eine sichere Sache und hast du mit dem Linux Rechner in B ja auch schon richtig umgesetzt. B propagiert dann in seinem Netz per mDNS die Endgeräte, Dienste und IPs von A damit Clients in B diese erreichen können. Das ist das simpkle Prinzip.
Hast du dir mit dem Wireshark oder tcpdump einmal die mDNS Multicasts in B genau angesehen, das sie in dem Netz so propagiert werden wie es sein soll?!
Damit sieht man doch dann sofort wo der Fehler ist!
Weitere mDNS Tools gibt es im App Store:
https://apps.apple.com/de/app/discovery-dns-sd-browser/id305441017
schneerunzel
Lösung schneerunzel 14.12.2022 um 17:11:59 Uhr
Goto Top
Hallo,

Das Problem ist, dass die Verbindungen zwischen den Netzen existieren und durch einen Dritten betrieben werden. Ich habe also in den meisten Fällen kein VPN zu den Standorten sondern nutzen das vorhandene Netz. Um vom Standort A zum Standort B zu kommen habe ich zum Teil bis zu 20 Hops bis ich im anderen Standort ankommen. Da das Netz extern betrieben wird habe ich keinen Möglichkeit Einfluss auf die Auswahl der Hardware zu nehmen und auch nur begrenzten Administrativen Zugriff.


Ja inzwischen habe ich mir die Ausgaben auch schon genauer angesehen und sowohl die genannte App als auch mit Wireshark probiert. Da ich nur rudimentäre Kenntnisse in Wireshark habe (für mich sieht das alles gut aus) und auch die Anzeige in der App exakt gleich aus, habe ich weiter probiert und die Lösung gefunden.
In der Service Datei hatte ich zwei Fehler:

1. Scheinbar muss die Codierung angegeben werden
2. der subtype fehlte.

Jetzt funktioniert es.

Hier noch einmal vollständig:

Der Hostname muss von AVAHI aufgelöst werden:
avahi-publish -a -R myq.local 192.168.1.12 &


Die drucker.service unter /etc/avahi/services/ sieht wie folgt aus:
<?xml version='1.0' encoding='UTF-8'?>  
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">  
<service-group>
  <name replace-wildcards="yes">FollowMe @ Printserver</name>  
  <service>
    <type>_ipps._tcp</type>
    <subtype>_universal._sub._ipps._tcp</subtype>
    <port>8632</port>
    <host-name>myq.local</host-name>
                <txt-record>URF=CP255,DM4,FN3,IFU0,IS19-20-21,MT1-2-3-4-5-6-11-12-13,OB1-10,PQ4,RS600,SRGB24,V1.4,W8</txt-record>
                <txt-record>Sort=U</txt-record>
                <txt-record>Scan=U</txt-record>
                <txt-record>PaperMax=isoC-A2</txt-record>
                <txt-record>PaperCustom=U</txt-record>
                <txt-record>Fax=U</txt-record>
                <txt-record>Duplex=T</txt-record>
                <txt-record>Copies=T</txt-record>
                <txt-record>Color=T</txt-record>
                <txt-record>Collate=U</txt-record>
                <txt-record>Bind=U</txt-record>
                <txt-record>kind=document</txt-record>
                <txt-record>TBCP=F</txt-record>
                <txt-record>Binary=F</txt-record>
                <txt-record>Transparent=F</txt-record>
                <txt-record>UUID=e73dbb08-fcda-7f34-85b8-c5a9dc0983c0</txt-record>
                <txt-record>TLS=1.2</txt-record>
                <txt-record>air=username,password</txt-record>
                <txt-record>usbCMD=</txt-record>
                <txt-record>usb_MDL=</txt-record>
                <txt-record>usb_MFG=</txt-record>
                                <txt-record>pdl=application/postscript,application/octet-stream,application/pdf,image/urf,image/pwg-raster,image/tiff,image/jpeg,application/vnd.hp-PCLXL,application/vnd.xpsdocument,application/postscript</txt-record>
                <txt-record>product=aQrate Product</txt-record>
                <txt-record>qtotal=1</txt-record>
                <txt-record>note=FollowMe</txt-record>
                <txt-record>rfo=</txt-record>
                <txt-record>rp=queue/FollowMe</txt-record>
                <txt-record>txtvers=1</txt-record>
                <txt-record>adminurl=https://myq.local:8090</txt-record>
                <txt-record>ty=FollowMe</txt-record>
                <txt-record>priority=60</txt-record>
</service>
</service-group>
aqui
aqui 14.12.2022 aktualisiert um 18:15:58 Uhr
Goto Top
dass die Verbindungen zwischen den Netzen existieren und durch einen Dritten betrieben werden.
Das ist für dein Vorhaben völlig irrelevant. Wichtig ist lediglich das diese IP netze sich routingtechnisch erreichen. Ob da Dritte, ein VPN oder keins oder ein feuchter Bindfaden dazwischen ist spielt keine Rolle solange ein Ping von A nach B und vice versa klappt.
Um vom Standort A zum Standort B zu kommen habe ich zum Teil bis zu 20 Hops bis ich im anderen Standort ankommen.
Auch das spielt keinerlei Rolle. es können auch 40 Hops sein. Wichtig ist einzig und allein nur das die Netze A und B routingtechnsich gegenseitig erreichbar sind.

Die Logik dahinter ist doch eine ganz banale.
mDNS/Bonjour macht den Endgeräten im lokalen LAN über die Multicast Adresse 224.0.0.251 und Port UDP 5353 Namen und IP Adressen der relevanten Endgeräte bekannt. Mit anderen Worten dein Drucker in A (192.168.1.12) sendet aus "Hallo hier ist Drucker TintenpinklerXYZ und ich habe die IP: 192.168.1.12". Das empfangen dann alle Endgeräte und TintenpinklerXYZ.local ist dann auch immer pingbar. Wenn du dann in Word dann auf Drucken mit "TintenpinklerXYZ" klickst weiss der Druckdienst das er die Druckdaten an 192.168.1.12 senden muss. Kinderleichte Logik also...

Das Blöde ist aber das mDNS Link Lokal Multicast IP Adressen nutzt die per se unroutebar sind und generell Multicast ohne PIM Routing nicht klappt. Sprich also in Netz B ist nix von den mDNS Infos zu sehen weil die Routergrenzen nicht überwunden werden können. Folglich "kennen" die Geräte dort also den TintenpinklerXYZ in A auch nicht, geschweige seine IP.
Der Grund warum man also einen Proxy ins Netz B wie deinen dortigen Linux Rechner, RasPi oder was auch immer setzt und den den dortigen Endgeräten vorgaukeln lässt der Drucker wäre in ihrem Netz.
Genau das macht dein AVAHI Server. Alle Endgeräte in B sehen dann auch wieder den Multicast "Hallo hier ist Drucker Tintenpinkler XYZ und ich habe die IP: 192.168.1.12" und drucken an die 192.168.1.12. Wichtig ist dann einzig nur das das Druckernetz 192.168.1.0 /24 routingtechnisch auch vom Client erreichbar ist.
Was dazwischen ist ob VPN oder "Dritte" und wieviel Hops das auch immer hat ist dabei völlig unerheblich. Solange es nicht irgendwelche ACLs oder FW Blocklisten sind die den Druckdatenstrom zwischen den 2 IP Netzen behindern.

Sofern das ein normaler Netzwerkdrucker ist sollte man zusätzlich auch mit einem nicht Airprint Endgerät diesen Drucker aus B problemlos erreichen können und auch auf ihm drucken können. Das sollte man vorab immer sicherstellen.

Deshalb die Empfehlung testweise mit dem Wireshark oder tcpdump und einem mDNS Browser einmal genau in B nachzusehen ob die mDNS Broadcasts auch wirklich ausgesendet werden UND ob sie im richtigen Format wie in A gesendet werden. Ein Ping oder nslookup in B auf "myq.local" sollte dann ebenfalls klappen sofern der Drucker myq heisst?!
Hier am Beispiel eines HP Druckers:
mdnsbrow
user@debiansrv ~> ping -c 3 hp5030printer.local
PING hp5030printer.local (192.168.7.200): 56 data bytes
64 bytes from 192.168.7.200: icmp_seq=0 ttl=64 time=103.257 ms
64 bytes from 192.168.7.200: icmp_seq=1 ttl=64 time=20.903 ms
64 bytes from 192.168.7.200: icmp_seq=2 ttl=64 time=39.098 ms

--- hp5030printer.local ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 20.903/54.419/103.257/35.323 ms