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:
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:
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
aber eben auch eine Fehlermeldung
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.
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"]
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4866196821
Url: https://administrator.de/contentid/4866196821
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
VG
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.Netzwerk Management Server mit Raspberry Pi
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
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.
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.
ich glaube aber mit der .local Domainendung wird aber Probleme geben wenn ich das richtig im Kopf habe.
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
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:
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