AirPrintを別ネットワークから使いたい

投稿者: | 2021年6月1日

なんで

普段の作業はFig.1中のrouter-2配下にあるネットワーク内のPCやMacで作業しています。ですのでスマホからプリントする機会もなく今に至ります。
そんな中、なんでまたAirPrintを使ってみたくなったかと言うと、ただただ技術的な興味としか言いようがないです。
ともあれ、タイトルの通り別ネットワークのiPhone1からAirPrintしてみようと思います。

Fig.1

 

調査

現状MacからのプリントのためにServer1でCUPS+GutenPrintが動作しており、AirPrint相当のサービスは動作しています。
詰めるところBonjourでプリンタのサービスを知らせ、プリントはIPPを使うだけなんですが。
この状態で別ネットワークからAirPrintしようとしてもiPhone1側にAirPrint対応プリンタは表示されません。理由は明白でServer1がbonjourでプリンタサービスを知らせるブロードキャスト到達範囲がrouter-2配下のみだから。iPhone1でプリンタが見えるためにはbonjourでAirPrintサービスがiPhone1まで届く必要がある。

解決策として考えてみると

  1. Server1〜iPhone1の間にはルータが2台あり、そこにbonjourのパケット(含むブロードキャストパケット)が通過するようにする
  2. router-1配下でbonjourサービスを立ち上げAirPrintサービスをアドバタイズするようにする

があるのかなと。

(a)はなんとなく気持ち悪いので却下。(c)はrouter-2とrouter-1の2者間でbonjourをリレーするような仕組みとかできそうだけど調査自体の時間コストがかかりそうなので却下。
残った(b)ですが作業コスト的に楽そうなのでbonjourサービスとしてAvahiでやってみることにします。

 

対応作業

先に対応作業を施した最終構成をFig.2に示します。

 

Fig.2

 

手順ですが

(1) AirPrintサービスのサービス情報をrouter-2配下で取得

 

(2) avahi-daemonをrouter-1にインストール

 

(3) 作業1で取得したサービス情報をrouter-1のbonjourサービスに追加

 

(4) Server1のIPとホスト名をavahi-daemonのhostsに追加

 

(5) router-1のavahi-daemonをリスタート

 

(6) router-2、Server1のnetfilterでiPhone1側からのIPP(631)が通過できるようにする

 

 

結果

無事にiPhone1でプリンタを認識できました