Linuxのネットワークプリンタに印刷できない

(Last Updated On: 2021年5月4日)

Fedora 33にアップグレードした時にも直したのですが、Fedora 34でも同じように今まで使えていたネットワークプリンタがアップグレード後使えなくなりました。

原因

デフォルトのnsswitch.conf設定だとmDNSを参照しないで名前解決する事が原因。

トラブルシューティング

ネットワークプリンタは自動的に見つかった名前でアクセスしています。

そもそもmDNSが使える状態でないとプリンタのホスト名は解決できません。avahi-daemonの状態を確認します。

[root@dev etc]# systemctl status avahi-daemon.service 
 ● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
      Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
      Active: active (running) since Sun 2021-05-02 10:05:56 JST; 34min ago
 TriggeredBy: ● avahi-daemon.socket
    Main PID: 2241 (avahi-daemon)
      Status: "avahi-daemon 0.8 starting up."
       Tasks: 2 (limit: 76873)
      Memory: 1.9M
      CGroup: /system.slice/avahi-daemon.service
              ├─2241 avahi-daemon: running [dev.local]
              └─2251 avahi-daemon: chroot helper

動いていればmDNSは使えます。動いていない場合は avahi-daemon.socketもチェックします。systemdで有効になっているとソケットアクセスでavahi-daemonが起動されます。

次に/etc/nsswitch.confのhost行にmdnsが含まれているか確認します。

hosts:      files dns myhostname

デフォルトの/etc/nsswitch.confにはmdnsがありません。最後にmdnsを追加します。

hosts:      files dns myhostname mdns4_minimal

変更してしばらくするとキューに溜まっている印刷ジョブも印刷されます。mdns4_minimal (IP v4のみの最小限) でなくmdns_minimal (IPv4/6 両方の最小限)やmdns(全て)でも動きますが、必要最小限はmdns4_minimalなので「最小権限の原則」に従ってmdns4_minimalにしています。

何も考えないでrpmconf -aで/etc/nsswitch.confのディストリビューションデフォルトに差し替えたことが原因です。

CUPS(やプリンタ設定)からはネットワークプリンタの追加が出来てしまいます。印刷ジョブもキューイングできます。でも何時まで経っても印刷されません。仕組みを理解していないと分かりづらいので困っている人も多いかも知れません。

なぜmDNSが有効になっていないのか?

CUPSはネットワークプリンタを名前で見つけれてしまう事がトラブルシューティングを余計に困難にしています。CUPSはmDNS(ボンジュール)の生みの親と言えるAppleが作っていから(?)なのかも知れません。プリンタ追加の時や設定時には見えているのに印刷する時に使えないので最初は??となると思います。印刷用のコマンドが非Apple製だから(?)なのでしょう。

mdnsをデフォルトで有効にしない理由はセキュリティでしょう。今回の設定変更ではmdnsを名前解決の最後に参照するようにしましたが、

hosts:      mdns files dns myhostname

のような設定になっているホストも少なくないと思います。これだど自動設定のホスト名が最優先で使われます。

こんな設定だと重要なホスト名をローカルホスト上の悪意のあるデバイスによって乗っ取られて情報を盗むことが可能になります。

hosts:      files dns myhostname mdns

最後にmDNSを参照するようにすれば、少なくともhostsファイルやDNS名、ホスト名設定をオーバーライドされて攻撃されることはありません。

mDNS参照が最後だからといって攻撃されるリスクがゼロになる訳けではないです。 これが理由でデフォルトではmDNSの参照は無効化されているのだと思います。

新規インストールのFedoraが手元にないので断定できませんが、普通にインストールするとavahi-daemonもインストール/有効化されないのだと思います。(どうなのでしょう?)

このネットワークの場合、信頼できないデバイスは使いませんし、もし誰かが接続したとしても通知されるので分かります。なのでmDNS参照をnsswitch.confに追加しても問題ありません。信頼できないデバイスが簡単に接続できてしまう環境ではmDNSは利用しない方が安全なので注意してください。

投稿者: yohgaki