AirPlay, HomeKit ข้าม VLAN ด้วย Avahi

หลายๆ คน อาจจะวางระบบเน็ตเวิร์คในบ้าน โดยการแยก Device ที่ใช้งานส่วนตัว แยกออกจากทีวี, อุปกรณ์ IoT ต่างๆ ที่บางครั้งก็อาจจะไม่ค่อยน่าเชื่อถือมากนัก ทำให้การใช้งาน AirPlay, HomeKit หรือบริการอื่นๆ จากแอปเปิลไม่สามารถใช้งานได้ เช่น Cast เพลง หรือหน้าจอไปยังทีวีไม่ได้, Add accessory HomeKit เข้าใช้งานไม่ได้ (ผมใช้ Home Assistant ผ่าน HomeKit Bridge)

ขออธิบายสั้นๆ ว่าการใช้งาน AirPlay, HomeKit นั้น ถ้าอยู่บนคนละ Subnet กัน จะไม่สามารถใช้ได้ ถึงแม้ว่าอุปกรณ์ทั้งสองฝั่ง จะสามารถเข้าถึงกันได้ ไม่ติด firewall ก็ตาม ส่วนเรื่อง Protocol ของทั้งสอง service นี้ ขอไม่ลงรายละเอียดแล้วกันครับ

หลังจากหาข้อมูลมานาน ก็ค้นพบว่ามันจำเป็นต้องใช้ service ที่ชื่อว่า Avahi ครับ โดยใช้ทำหน้าที่เป็น mDNS reflector ระหว่าง 2 VLAN ทำให้สามารถใช้ service AirPlay, HomeKit ได้

ซึ่งสิ่งที่ต้องการคือ mDNS Reflector ที่สามารถอยู่บน Subnet ทั้ง 2 ที่เราต้องการได้ โดยผมเลือกติดตั้ง Avahi ไว้บน docker ด้วยคำสั่ง

docker run -d --name=mdns-reflector -e REFLECTOR_ENABLE_REFLECTOR=yes flungo/avahi

จากนั้นก็เชื่อม container ดังกล่าว ไปที่ vlan ที่ต้องการให้ mDNS reflector ทำงาน ด้วยคำสั่ง

docker network connect ipvlan10 mdns-reflector
docker network connect ipvlan50 mins-reflector

โดยเน็ตเวิร์ค ipvlan10, ipvlan50 เป็นเน็ตเวิร์ค ที่ tagged มาจากเราเตอร์หลัก และใช้สำหรับอุปกรณ์ภายในบ้าน แยกออกจากพวก IoT (ทีวี, Home Assistant) ไว้

หลังจากที่ติดตั้ง mDNS Reflector แล้ว ลองแอด HomeKit Bridge จาก Home Assistant บนแอพ Home ในไอโฟน ก็สามารถแอด และใช้งานได้ในทันที

Reference: Using HomeKit Devices Across VLANs and Subnets