Das Problem:
Ich habe einen managed Switch welcher die diversen VLAN verwaltet und auch das Routing übernimmt. Nur Verkehr welcher der Switch nicht selber routen kann, geht an die Firewall für das weitere Routing.
Die iOS Geräte hängen in einem eignen VLAN. Wäre der AirPrint/Bonjour Drucker im gleichen VLAN, würde dieser automatisch erkannt. Aber als Broadcast wird es nicht geroutet und bleibt innerhalb des eignen Subnetztes. Da dies jedoch nicht der Fall ist, hatte das bei mir nicht funktioniert. Die Firewall (pfsense) hätte zwar eine Lösung, da diese aber weder das VLAN vom Drucker noch das VLAN von den iOS Geräten explizit kennt, war dies auch keine Lösung.
Nach etwas Recherche im Internet und vielen Stunden Rumprobieren, habe ich ein funktionierende Lösung gefunden.
Hintergrund:
Eigentlich steht alles hier: http://www.dns-sd.org/ServerStaticSetup.html
Die Clients versuchen beim DNS welcher via DHCP mitgeteilt wurde nachzufragen, ob dieser auch dns-sd Anfragen beantwortert. Die wird mit der PTR Query lb._dns-sd._udp.<such domäne> gemacht. Die Antwort ist ein Name des DNS welcher diese Anfragen beantwortet. Einziger Nachteil, der Drucker darf seinen Namen nicht ändern.
Lösung:
Damit ich die Anfragen mit dem DNS auf meiner DS beantworten konnte, habe ich eine weitere Sub-Domäne (master) bonjour.lan.example.com erstellt. Müsste aber auch innerhalb einer bestehenden funktionieren. Dies habe ich noch mit dem Webclient gemacht. Danach geht es mit via SSH und Console weiter. Die Dateien befinden sich (bei mir) unter /volume1/@appstore/DNSServer/named/etc/zone.
Im /master Ordner ist die Zonen-Datei und im /data Ordner. Bearbeiten muss man die Zonen-Datei
Die Details für die PTR und TXT Records hierzu bekommt man (unter Windows) wie folgt:
1. Von Apple den Bonjour SDK runterladen und installieren
2. Falls nötig den Bonjour Service manuell starten (bei mir unter Win10 musste ich den Service erst starten)
3. In einem Command-Fenster "dns-sd -Z _ipp._tcp,_universal" ausführen dieser gibt z.B. folgendes Ergebnis
Wichtig: Der PC wo dns-sd ausgeführt wird, muss den Drucker natürlich sehen können - d.h. im gleichen Subnetz sein!
Eigentlich kann man diese Information einfach in die Zonen-Datei einfügen. Damit es aber wirklich funktioniert, braucht es noch eine weitere Zeile:
Den DNS muss man danach neu starten
Wenn alles geklappt hat sieht man bei einem erneuten Aufruf dns-sd folgenden Output
Jetzt muss nur noch bei der Such-Domäne (diese wird vom DHCP ebenfalls an den Client mitgeteilt - in meinem Beispiel also "lan.example.com") die Anfragen für b._dns-sd._udp und lb._dns-sd._udp mittels PTR Eintrag in der Zone (hier im Beispiel lan01.example.com) eingefügt werden
Wahrscheinlich braucht es die beiden ersten beiden Einträge nicht. Müsste ich noch ausprobieren. Sie haben bisher auch nicht geschadet.
Und dann sollte das iPhone oder der iPad beim Drucker Dialog den Drucker wieder anzeigen.
Ich habe einen managed Switch welcher die diversen VLAN verwaltet und auch das Routing übernimmt. Nur Verkehr welcher der Switch nicht selber routen kann, geht an die Firewall für das weitere Routing.
Die iOS Geräte hängen in einem eignen VLAN. Wäre der AirPrint/Bonjour Drucker im gleichen VLAN, würde dieser automatisch erkannt. Aber als Broadcast wird es nicht geroutet und bleibt innerhalb des eignen Subnetztes. Da dies jedoch nicht der Fall ist, hatte das bei mir nicht funktioniert. Die Firewall (pfsense) hätte zwar eine Lösung, da diese aber weder das VLAN vom Drucker noch das VLAN von den iOS Geräten explizit kennt, war dies auch keine Lösung.
Nach etwas Recherche im Internet und vielen Stunden Rumprobieren, habe ich ein funktionierende Lösung gefunden.
Hintergrund:
Eigentlich steht alles hier: http://www.dns-sd.org/ServerStaticSetup.html
Die Clients versuchen beim DNS welcher via DHCP mitgeteilt wurde nachzufragen, ob dieser auch dns-sd Anfragen beantwortert. Die wird mit der PTR Query lb._dns-sd._udp.<such domäne> gemacht. Die Antwort ist ein Name des DNS welcher diese Anfragen beantwortet. Einziger Nachteil, der Drucker darf seinen Namen nicht ändern.
Lösung:
Damit ich die Anfragen mit dem DNS auf meiner DS beantworten konnte, habe ich eine weitere Sub-Domäne (master) bonjour.lan.example.com erstellt. Müsste aber auch innerhalb einer bestehenden funktionieren. Dies habe ich noch mit dem Webclient gemacht. Danach geht es mit via SSH und Console weiter. Die Dateien befinden sich (bei mir) unter /volume1/@appstore/DNSServer/named/etc/zone.
Im /master Ordner ist die Zonen-Datei und im /data Ordner. Bearbeiten muss man die Zonen-Datei
Rich (BBCode):
$ORIGIN bonjour.lan.example.com.
$TTL 86400
bonjour.lan.example.com. IN SOA ns.bonjour.lan.example.com. mail.bonjour.lan.example.com. (
2019060901 ; serial YYYYMMTTNN (NN version in the day)
180 ; refresh
180 ; retry
1209600 ; expiry
10800 ; minimum
)
bonjour.lan.example.com. NS ns.bonjour.lan.example.com.
ns.bonjour.lan.example.com. A 192.168.1.99
pr01.bonjour.lan.example.com. A 192.168.2.199
b._dns-sd._udp PTR @
lb._dns-sd._udp PTR @
_ipp._tcp PTR HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp
_universal._sub._ipp._tcp PTR HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp SRV 0 0 631 pr01.bonjour.lan.example.com.
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp TXT (
"txtvers=1"
"qtotal=1"
"pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf"
"rp=ipp/print"
"PaperMax=<legal-A4"
"kind=document,envelope,photo"
"URF=CP1,MT1-2-8-9-10-11,OB9,OFU0,PQ3-4-5,RS300-600,SRGB24,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,DM3,IS1-2,V1.3"
"ty=HP Officejet Pro 8620"
"product=(HP Officejet Pro 8620)"
"usb_MFG=HP"
"usb_MDL=HP Officejet Pro 8620"
"priority=20"
"mac=xx:xx:xx:xx:xx:xx"
"adminurl=http://pr01.bonjour.lan.example.com./#hId-pgAirPrint"
"note="
"Fax=F"
"UUID=1c852a4d-b800-1f08-abcd-fc15b4A789E5"
"Color=T"
"Duplex=T"
"Scan=T"
)
Die Details für die PTR und TXT Records hierzu bekommt man (unter Windows) wie folgt:
1. Von Apple den Bonjour SDK runterladen und installieren
2. Falls nötig den Bonjour Service manuell starten (bei mir unter Win10 musste ich den Service erst starten)
3. In einem Command-Fenster "dns-sd -Z _ipp._tcp,_universal" ausführen dieser gibt z.B. folgendes Ergebnis
Wichtig: Der PC wo dns-sd ausgeführt wird, muss den Drucker natürlich sehen können - d.h. im gleichen Subnetz sein!
Rich (BBCode):
Browsing for _ipp._tcp,_universal
; To direct clients to browse a different domain, substitute that domain in place of '@'
lb._dns-sd._udp PTR @
; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names.
; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local
; names with the correct fully-qualified (unicast) domain name of the target host offering the service.
_ipp._tcp PTR HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp SRV 0 0 631 HPFC15B4A789E5.local. ; Replace with unicast FQDN of target host
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp TXT "txtvers=1" "qtotal=1" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf" "rp=ipp/print" "PaperMax=<legal-A4" "kind=document,envelope,photo" "URF=CP1,MT1-2-8-9-10-11,OB9,OFU0,PQ3-4-5,RS300-600,SRGB24,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,DM3,IS1-2,V1.3" "ty=HP Officejet Pro 8620" "product=(HP Officejet Pro 8620)" "usb_MFG=HP" "usb_MDL=HP Officejet Pro 8620" "priority=20" "mac=xx:xx:xx:xx:xx:xx" "adminurl=http://HPFC15B4A789E5.local./#hId-pgAirPrint" "note=" "Fax=F" "UUID=1c852a4d-b800-1f08-abcd-fc15b4A789E5" "Color=T" "Duplex=T" "Scan=T"
Eigentlich kann man diese Information einfach in die Zonen-Datei einfügen. Damit es aber wirklich funktioniert, braucht es noch eine weitere Zeile:
Rich (BBCode):
_universal._sub._ipp._tcp PTR HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp
Den DNS muss man danach neu starten
Rich (BBCode):
sudo /volume1/@appstore/DNSServer/script/restart.sh
Wenn alles geklappt hat sieht man bei einem erneuten Aufruf dns-sd folgenden Output
Rich (BBCode):
Browsing for _ipp._tcp,_universal
; To direct clients to browse a different domain, substitute that domain in place of '@'
lb._dns-sd._udp PTR @
; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names.
; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local
; names with the correct fully-qualified (unicast) domain name of the target host offering the service.
_ipp._tcp PTR HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp SRV 0 0 631 pr01.bonjour.lan.example.com. ; Replace with unicast FQDN of target host
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp TXT "txtvers=1" "qtotal=1" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf" "rp=ipp/print" "PaperMax=<legal-A4" "kind=document,envelope,photo" "URF=CP1,MT1-2-8-9-10-11,OB9,OFU0,PQ3-4-5,RS300-600,SRGB24,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,DM3,IS1-2,V1.3" "ty=HP Officejet Pro 8620" "product=(HP Officejet Pro 8620)" "usb_MFG=HP" "usb_MDL=HP Officejet Pro 8620" "priority=20" "mac=xx:xx:xx:xx:xx:xx" "adminurl=http://pr01.bonjour.lan.example.com./#hId-pgAirPrint" "note=" "Fax=F" "UUID=1c852a4d-b800-1f08-abcd-fc15b4A789E5" "Color=T" "Duplex=T" "Scan=T"
_ipp._tcp PTR HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp SRV 0 0 631 HPFC15B4A789E5.local. ; Replace with unicast FQDN of target host
HP\032Officejet\032Pro\0328620\032[A789E5]._ipp._tcp TXT "txtvers=1" "qtotal=1" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf" "rp=ipp/print" "PaperMax=<legal-A4" "kind=document,envelope,photo" "URF=CP1,MT1-2-8-9-10-11,OB9,OFU0,PQ3-4-5,RS300-600,SRGB24,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,DM3,IS1-2,V1.3" "ty=HP Officejet Pro 8620" "product=(HP Officejet Pro 8620)" "usb_MFG=HP" "usb_MDL=HP Officejet Pro 8620" "priority=20" "mac=xx:xx:xx:xx:xx:xx" "adminurl=http://HPFC15B4A789E5.local./#hId-pgAirPrint" "note=" "Fax=F" "UUID=1c852a4d-b800-1f08-abcd-fc15b4A789E5" "Color=T" "Duplex=T" "Scan=T"
Jetzt muss nur noch bei der Such-Domäne (diese wird vom DHCP ebenfalls an den Client mitgeteilt - in meinem Beispiel also "lan.example.com") die Anfragen für b._dns-sd._udp und lb._dns-sd._udp mittels PTR Eintrag in der Zone (hier im Beispiel lan01.example.com) eingefügt werden
Rich (BBCode):
b._dns-sd IN PTR bonjour.lan.example.com.
lb._dns-sd IN PTR bonjour.lan.example.com.
b._dns-sd._udp IN PTR bonjour.lan.example.com.
lb._dns-sd._udp IN PTR bonjour.lan.example.com.
Wahrscheinlich braucht es die beiden ersten beiden Einträge nicht. Müsste ich noch ausprobieren. Sie haben bisher auch nicht geschadet.
Und dann sollte das iPhone oder der iPad beim Drucker Dialog den Drucker wieder anzeigen.