
ในการทำงานปัจจุบัน การทำ Screen Casting และ Screen Mirroring เป็นสิ่งที่นำเข้ามาใช้งานกันให้เห็นมากขึ้น เช่น อาจารย์ ถือ iPad/Tablet แล้ว Cast ขึ้นจอ Smart TV เพื่อสอน นักศึกษา ซึ่งจะค่อนข้างสะดวกกว่าการนำคอมพิวเตอร์ไปต่อ HDMI แล้วต่อเมาส์ปากกาเพื่อเขียน Slide
อย่างไรก็ตาม ถ้า Network เรา Designed มาให้ครอบคลุมกับการใช้งาน ทำ Policy ให้กับ VLAN ต่างๆแล้ว เช่น WiFi-Student (VLAN10), WiFi-Teacher (VLAN20), WiFi-sTV (VLAN30) ในท่าปกติ mDNS (คือ Bonjour service) จะไม่สามารถข้าม VLAN หรือก็คือ เราไม่สามารถนำ iPad/Tablet เรา เกาะ WiFi-Student แล้ว Cast ไปยัง TV ที่เกาะ WiFi ชื่อ WiFi-sTV ได้นั่นเอง
เพื่อความสะดวกในการใช้งาน เราต้องไปเปิดการใช้งาน mDNS Gateway บน WLC 9800 เพื่อทำให้สามารถ Casting ข้าม VLAN กันได้ครับ
ก่อนอื่น เราจะมาเข้าใจกันก่อนว่า การคุยกันระหว่างอุปกรณ์ปลายทาง (Smart TV, Apple AirPlay, Printer) กับ อุปกรณ์ต้นทาง (iPad/Tablet หรือ Computer/macOS) เค้าคุยกันยังไง
การคุยกันของ 2 อุปกรณ์นี้ เราจะใช้โปรโตคอลที่ชื่อว่า Bonjour (Apple service discovery protocol) ของทางฝั่ง Apple ซึ่ง Based มาจาก Multicast Domain Name System (mDNS) และ DNS-Based Service Discovery (DNS-SD) ทำให้ทุกๆอุปกรณ์ที่รองรับ Bonjour มี mDNS Responder อยู่ในอุปกรณ์ของตัวเอง ซึ่งสามารถ เก็บ IP addresses และสามารถ discover services ได้ โดยมีวิธีการทำงานคือ
ทำการค้นหาอุปกรณ์ โดยเริ่มจากให้อุปกรณ์ปลายทาง advertisement Bonjour ไปที่ Multicast Address (224.0.0.251 สำหรับ ipv4, FF02::FB สำหรับ ipv6 ผ่าน UDP 5353) และอุปกรณ์ต้นทาง ก็จะส่ง query ไปยัง Multicast Address เดียวกัน ซึ่งจะทำให้หากันเจอผ่าน mDNS แล้วจากนั้นก็สามารถ Casting ได้เลย
แต่เนื่องจากหลักการในการออกแบบ mDNS นี้ มีค่า TTL = 1 ทำให้ไม่สามารถ Route ตัวเอง ออกไป L3 ได้ ดังนั้นแล้ว ในการใช้งาน Bonjour หรือ mDNS จะใช้ได้แค่ภายใน Layer 2 เท่านั้น (VLAN เดียวกัน) ไม่สามารถ Route ข้ามกันได้ (link-local multicast addresses) ซึ่งก็จะเกิดปัญหาในการใช้งานดังที่ยกตัวอย่างไป
ดังนั้นแล้ว สิ่งที่จะมาช่วยเราก็คือ mDNS Gateway
mDNS Gateway คือ เจ้าตัว WLC ก็จะทำตัวเองเป็น mDNS proxy คอย snoop และ cache Bounjor ที่ส่งมาให้ตัวเอง ทำหน้าบันทึก mDNS ของแต่ละ VLAN เอาไว้ เพื่อให้สามารถส่ง Bonjour ข้าม VLAN ได้ นั่นเอง (อย่างไรก็ตาม หาก มี block ที่ gateway ของ vlan หรือ SVI ก็ไม่สามารถส่งได้นะครับ)
ถ้าหากว่า AP เป็น FlexConnect Mode แล้ว จะทำดังนี้
** ที่เขียนว่า Site-Tag คือค่า Default นะครับ เราสามารถไปเลือกได้ว่าจะให้ Group ยังไง
– AP ทุกตัว จะ build service-string DB (Bonjour Cache) เป็นของตัวเอง แล้วทำการ Sync กันภายในกลุ่ม Site-Tag ของตัวเอง ดังนั้นแล้ว ทุก AP มี Bonjour Cache ที่อยู่ใน Site-Tag เดียวกัน เหมือนกันหมด
– มี AP 1 ตัว จาก Site-Tag (FlexConnect Group) เดียวกัน มาทำเป็น Master AP เพื่อทำการคุยกับ WLC, Build/Update service-string DB ของฝั่ง Wired (แล้ว Sync ให้กับเพื่อนๆใน Site-Tag เดียวกัน), คอยตอบ mDNS Respond ให้กับ Wired Client
มีแยกเป็น 2 กรณีในการตอบ mDNS respond (query) กลับไป
– ถ้าเป็น Wireless Connection ตัว AP ที่ Client เกาะอยู่สามารถตอบกลับไปเองได้เลย (เช่น iPad VLAN20 | Apple TV VLAN30 iPad query มาหา AP ที่เกาะอยู่ สามารถ provide ให้ได้เลย เนื่องจาก Bonjour Cache Sync กันอยู่แล้ว)
– ถ้าเป็น Wired Connection ตัว AP ที่ทำหน้าที่เป็น Master ทำการตอบกลับไปเอง เท่านั้น (เช่น PC VLAN 21 | Apple TV VLAN30 ตัว PC จะได้รับ mDNS Response จาก AP ที่เป็น Master ใน Site-Tag นั้น เท่านั้น)
หลังจากอธิบาย ทฤษฏี เสร็จเรียบร้อยแล้ว เรามาลงมือปฎิบัติกันครับ
วิธีการ Configure mDNS Gateway บน Cisco WLC C9800
เปิด mDNS Gateway แล้วคลิก Apply
(Optional) ทำ Service List ขา IN (จะ Cache อะไร) OUT (จะตอบอะไรกลับไป) ควรตั้งให้เหมือนกันทั้งขา IN OUT ครับ ในที่นี้ ตั้งเป็น All ทั้งคู่ครับ
(Optional) สร้าง Service Policy ดังรูป โดย Location คือ จะให้ตอนตอบกลับ mDNS ใครเห็นได้บ้าง (เช่น ถ้าเราทำ Site-Tag แยกแต่ละชั้น ตอนที่เราหยิบ iPad ขึ้นมาดู ก็จะเห็นแค่ Apple TV ในชั้นๆนั้น ที่ iPad เราเกาะ AP อยู่ เป็นต้น) ในที่นี้เลือกเป็น Site-Tag นะครับ เพราะครอบคลุมที่สุด
(Optional) ไปที่ Policy แล้วนำ mDNS Service Policy ที่สร้างไปแปะ
เปลี่ยน mDNS บน WLAN เป็น mDNS Gateway
เพียงเท่านี้ ก็สามารถทำ Screen Casting ข้าม WLAN (VLAN) ได้แล้วครับผม