AirPrintはiPhoneやiPadなのiOSデバイスから簡単にプリンタから印刷を行える機能です。最近のWi-Fi機能の付いた多くのプリンタが対応しています。メールで送られてきたPDFや申込書などをすぐに印刷できて便利です。
しかし、AirPrintは同一セグメントにiOSデバイスとプリンターがいることが前提で、セグメントが複数ある環境では利用できません。そこでそれを解決しようと思います。
やりたいこと
やりたいことは「プリンタと異なるセグメントにいるiPhoneからAirPrintで印刷をやりたい!」です。
通常に家庭だと、ローカルのセグメントは1つだけ(192.168.0.0/24など)だと思います。しかし、私の環境だと検証などもかねて複数のセグメントが存在しています。
iPhoneなどがWi-Fiで接続して使うセグメント(セグメントA)と、プリンタが繋がっているセグメント(セグメントB)の2種類があります。(実際には、他にもセグメントがありますが、今回はこの2つのみ登場します。
どうやって実現するか
AirPrintを利用する際にまず最初に行われているのが、Bounjourによる危機の探索です。Bounjourは、マルチキャストDNSを用いるため、通常異なるセグメントの場合は探索ができません。
そこで、異なるセグメント間でデバイスの検知を行うため、avahi-deamonを利用します。
事前準備
まずは、今回構築するサーバに必要な事前準備を行います。
インターフェイスの準備
最小構成の場合、以下の2つのインターフェイスが必要です。物理的に2つのNICを用意しても良いですし、CentOS上でVLANの設定をしても良いですし、ESXiなどの仮想環境を利用している場合は、仮想SWでVLANを用いてもOKです。
- AirPrintをするiPhoneなどが接続しているセグメントへの接続インターフェイス
- AirPrintを受け付けるプリンタが接続されているセグメントへの接続インターフェイ
それぞれのセグメントのIPアドレスを持たせればOKです。その際に、GWアドレスは片方だけに持たせてください。もしくは、SSHなどは別インターフェイスからと言う場合は、どちらにもGWアドレスは付与しない方がよいですね。
Firewallの設定(Firewalld)
事前にFirewallの穴あけもしておきましょう。CentOS7系で構築しますので使用するのはFirewalldです。詳しい設定は割愛しますが、それぞれのインターフェイスにpublicゾーンが割り当てられている前提とします。
mdnsという既存のサービスがありますので、ゾーンに追加してあげればOKです。
# firewall-cmd --add-service=mdns --zone=public --permanent
# systemctl restart firewalld
avahi-deamonのセットアップ
avahi-deamonのインストール
# yum install avahi avahi-tools
設定ファイルの修正
# cd /etc/avahi/ # ls -l 合計 8 -rw-r--r--. 1 root root 1750 4月 1 11:17 avahi-daemon.conf drwxr-xr-x. 2 root root 23 5月 9 13:38 etc -rw-r--r--. 1 root root 1121 4月 1 11:17 hosts drwxr-xr-x. 2 root root 6 4月 1 11:18 services
# cp -p avahi-daemon.conf avahi-daemon.conf_old # vim avahi-daemon.conf
設定ファイルの修正箇所は1か所です。enable-reflectorオプションをnoからyesにします。
# diff avahi-daemon.conf avahi-daemon.conf_old 58c58 < enable-reflector=yes --- > #enable-reflector=no
最後に、avahi-daemonを再起動します。
# systemctl restart avahi-daemon
ここまでで、完了です。あとはiPhoneなどで実際にプリンタがでてくるか確認して下さい。