「Avahi」の版間の差分
| (6人の利用者による、間の22版が非表示) | |||
| 1行目: | 1行目: | ||
| − | [[Category: |
+ | [[Category:マルチキャスト DNS]] |
[[en:Avahi]] |
[[en:Avahi]] |
||
[[fr:Avahi]] |
[[fr:Avahi]] |
||
| + | [[ru:Avahi]] |
||
[[Wikipedia:ja:Avahi]] より: |
[[Wikipedia:ja:Avahi]] より: |
||
:''"[http://avahi.org/ Avahi] は、[[Wikipedia:ja:Zeroconf|Zeroconf]] (ゼロ・コンフィギュレーション・ネットワーキング) のフリーソフトウェア実装であり、マルチキャスト DNS/DNS-SD サービスディレクトリのためのシステムを含む。Avahi は、特定の構成情報のないローカルネットワーク上のサービスホストの発行と発見を可能とする。例えば、ネットワークに接続したとき、即座にプリンタを検出し、ファイルを探し出し、他者と会話できるようにする。GNU Lesser General Public License (LGPL) の条件でライセンス提供される。"'' |
:''"[http://avahi.org/ Avahi] は、[[Wikipedia:ja:Zeroconf|Zeroconf]] (ゼロ・コンフィギュレーション・ネットワーキング) のフリーソフトウェア実装であり、マルチキャスト DNS/DNS-SD サービスディレクトリのためのシステムを含む。Avahi は、特定の構成情報のないローカルネットワーク上のサービスホストの発行と発見を可能とする。例えば、ネットワークに接続したとき、即座にプリンタを検出し、ファイルを探し出し、他者と会話できるようにする。GNU Lesser General Public License (LGPL) の条件でライセンス提供される。"'' |
||
== インストール == |
== インストール == |
||
| − | [[公式リポジトリ]]にある {{Pkg|avahi}} を[[pacman|インストール]]してください。 |
||
| − | + | {{pkg|avahi}} パッケージを [[インストール]] し、{{ic|avahi-daemon.service}} を [[有効化]] するか、[[ソケットアクティベーション]] を使用してください。 |
|
| + | {{Note|[[systemd-resolved]] には内蔵の mDNS サービスがあります。Avahi を使う前に、systemd-resolved のマルチキャスト DNS リゾルバ/レスポンダ ({{man|5|resolved.conf}} を参照) を無効化するか、あるいは {{ic|systemd-resolved.service}} を完全に [[Systemd#ユニットを使う|無効化]] してください。}} |
||
| − | === IPv6 を有効にする === |
||
| − | いくつかの理由で、Avahi はデフォルトで IPv6 が無効になっています。有効にするには、{{ic|/etc/avahi/avahi-daemon.conf}} の {{ic|use-ipv6}} を {{ic|yes}} に設定してください。 |
||
== Avahi を使う == |
== Avahi を使う == |
||
| + | |||
| + | === ホスト名の解決 === |
||
| + | |||
| + | Avahi には {{ic|''hostname''.local}} という名前を使ってローカルでホスト名を解決する機能があります。有効にするには {{Pkg|nss-mdns}} パッケージをインストールして {{ic|avahi-daemon.service}} を[[起動]]してください。 |
||
| + | |||
| + | その後、{{ic|/etc/nsswitch.conf}} ファイルを編集して、{{ic|resolve}} と {{ic|dns}} の前に {{ic|1=mdns_minimal [NOTFOUND=return]}} が含まれるように {{ic|hosts}} 行を変更してください: |
||
| + | |||
| + | hosts: mymachines '''mdns_minimal [NOTFOUND=return]''' resolve [!UNAVAIL=return] files myhostname dns |
||
| + | |||
| + | {{Note| |
||
| + | * {{ic|.local}} ホストの解決に時間がかかる場合、{{ic|mdns_minimal}} の代わりに {{ic|mdns4_minimal}} を使ってみてください。 |
||
| + | * ユニキャスト DNS サーバがトップレベルの {{ic|local}} 名に対する {{ic|SOA}} クエリに応答しない限り、またはリクエストが2つ以上のラベルを持つ場合、上記の行は{{ic|nss-mdns}} を {{ic|.local}} ドメインに対して権威付けるようにします。{{ic|nss-mdns}} [https://github.com/lathiat/nss-mdns/blob/master/README.md#activation activation notes] を参照してください。 |
||
| + | ** [[systemd-resolved]] は、mDNS サポートが無効になっている場合でも、これらのクエリに応答します。[[Avahi#systemd-resolved のせいで nss-mdns が機能しない|systemd-resolved は、nss-mdns が機能しないようにします]] |
||
| + | ** NSS 設定の詳細については、{{man|8|nss-mymachines}} と [https://github.com/lathiat/nss-mdns/blob/master/readme.md#active avahi docs] を参照して下さい。 |
||
| + | }} |
||
| + | |||
| + | ==== カスタム TLD を使用する場合の mDNS の設定 ==== |
||
| + | |||
| + | {{ic|mdns_minimal}} モジュールが {{ic|.local}} TLD の取り合わせを処理します。{{ic|<nowiki>[NOTFOUND=return]</nowiki>}} と設定しているのは、{{ic|mdns_minimal}} が {{ic|*.local}} を見つけられなかったときに、{{ic|dns}} や {{ic|myhostname}} などで検索しないようにするためです。 |
||
| + | |||
| + | Avahi で他の TLD もサポートしたい場合、以下の設定を行ってください: |
||
| + | |||
| + | * {{ic|1=mdns_minimal [NOTFOUND=return]}} を {{ic|mdns}} に置き換えてください。IPv4 や IPv6 しか使わないモジュール {{ic|mdns[46](_minimal)}} も存在します。 |
||
| + | * {{ic|/etc/avahi/avahi-daemon.conf}} の {{ic|domain-name}} をカスタマイズしてください。 |
||
| + | * {{ic|/etc/mdns.allow}} で Avahi のカスタム TLD をホワイトリストに入れてください。 |
||
| + | |||
| + | ==== ツール ==== |
||
| + | |||
| + | Avahi にはネットワーク上で動作しているサービスを探知するのに役立つユーティリティが複数含まれています。例えば、以下のコマンドを実行するとネットワーク上のサービスが表示されます: |
||
| + | |||
| + | $ avahi-browse --all --ignore-local --resolve --terminate |
||
| + | |||
| + | このコマンドが何も出力しない場合、原因は [[ファイアウォール]] によって mDNS トラフィックがブロックされている可能性があります。 |
||
| + | |||
| + | .local ホスト名を IP アドレスに解決するために単に mDNS クエリを実行したい場合(dig や nslookup に似た方法)、次のコマンドを使用してください: |
||
| + | |||
| + | $ avahi-resolve-host-name ''some-host-name''.local |
||
| + | |||
| + | {{ic|getent hosts}} コマンドは、DNS と MDNS ルックアップの両方を実行できることに注意してください。 |
||
| + | |||
| + | Avahi Zeroconf Browser ({{ic|avahi-discover}}) はネットワーク上の様々なサービスを表示します。使用するには Avahi の任意依存パッケージである {{Pkg|gtk3}}, {{Pkg|python-dbus}}, {{Pkg|python-gobject}} のインストールが必要です。また、{{ic|bssh}} と {{ic|bvnc}} を使うことで SSH サーバーや VNC サーバーを閲覧することもできます。 |
||
| + | |||
| + | === ファイアウォール === |
||
| + | |||
| + | [[ファイアウォール]]を使っている場合は UDP ポート {{ic|5353}} を開いてください。 |
||
| + | |||
| + | ===リンクローカル (Bonjour/Zeroconf) チャット=== |
||
| + | |||
| + | Avahi を使って Linux で Bonjour プロトコルを使用することもできます。[[Wikipedia:Comparison of instant messaging clients]] や[[アプリケーション一覧/インターネット#インスタントメッセージ]]に Bonjour プロトコルをサポートしているクライアントが載っています。 |
||
| + | |||
=== IPv4LL IP アドレスの取得 === |
=== IPv4LL IP アドレスの取得 === |
||
デフォルトでは、DHCP を使って IP を取得するとき、{{Pkg|dhcpcd}} パッケージを使用します。DHCP で IP アドレスが取得できなかったときに IPv4LL アドレスを取得するようにすることができます。デフォルトではこのオプションは無効になっています。有効にするには noipv4ll をコメントアウトしてください: |
デフォルトでは、DHCP を使って IP を取得するとき、{{Pkg|dhcpcd}} パッケージを使用します。DHCP で IP アドレスが取得できなかったときに IPv4LL アドレスを取得するようにすることができます。デフォルトではこのオプションは無効になっています。有効にするには noipv4ll をコメントアウトしてください: |
||
| 25行目: | 74行目: | ||
# avahi-autoipd -D |
# avahi-autoipd -D |
||
| − | + | == サービスの追加 == |
|
| − | Avahi によってホスト名を使ってコンピューターにアクセスすることが可能です。 |
||
| − | {{Note|これを使うには {{Pkg|nss-mdns}} をインストールして、{{ic|avahi-daemon.service}} を有効にし動作させる必要があります。}} |
||
| + | Avahi は {{ic|/etc/avahi/services}} に {{ic|*.service}} ファイルが存在するサービスを喧伝します。ファイルは {{ic|avahi}} ユーザー・グループから読み込めるようにする必要があります。 |
||
| − | Avahi を動作させている ''maple'', ''fig'', ''oak'' という名前のマシンがあると考えます。Avahi を設定することでそれぞれのコンピュータの {{ic|/etc/hosts}} ファイルを管理する必要がなくなります。代わりに {{ic|maple.local}} を使うことで ''maple'' が持っている全てのサービスにアクセスすることが可能です。ただし、デフォルトでは {{ic|.local}} の問い合わせは Arch Linux では無効になっています。有効にするにはファイル {{ic|/etc/nsswitch.conf}} を編集して次の行を: |
||
| − | hosts: files dns myhostname |
||
| − | 以下のように変更してください: |
||
| − | hosts: files mdns_minimal [NOTFOUND=return] dns myhostname |
||
| + | {{ic|*.service}} ファイルが存在しないサービスを使いたい場合、簡単にサービスを作成することができます。 |
||
| − | {{ic|mdns_minimal}} モジュールは {{ic|.local}} TLD のクエリーだけを処理します。他の TLD を使うように Avahi を設定している場合は、最後に完全な {{ic|mdns}} モジュールも追加してください。IPv4 だけや IPv6 だけのモジュール {{ic|mdns[46](_minimal)}} も存在します。 |
||
| + | 例として、RFC 865 に基づく今日の格言 (QOTD) を表示するサービスを TCP の17番ポートで稼働させるとしましょう。 |
||
| − | Avahi にはネットワーク上で動作しているサービスを見つけるのに役立つユーティリティが複数含まれています。例えば、ネットワーク中のサービスを探すには、次を実行してください: |
||
| − | avahi-browse -alr |
||
| + | まず最初に {{ic|<type>}} を決定する必要があります。{{man|5|avahi.service}} によればタイプは DNS-SD サービスタイプのどれかにする必要があります (例: {{ic|_http._tcp}})。[http://www.dns-sd.org/ServiceTypes.html DNS-SD のレジスタは2010年に IANA レジスタに統合] されたため、サービス名は [http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml IANA レジスタ] や {{ic|/etc/services}} ファイルで確認することができます。サービス名は {{ic|qotd}} となっています。QOTD は tcp で動作するため、サービスは {{ic|_qotd._tcp}} でありポート番号は 17 となります (IANA と RFC865 に準拠)。 |
||
| − | Avahi Zeroconf ブラウザ ({{ic|avahi-discover}}) はあなたのネットワーク上の様々なサービスを表示します。また、{{ic|bssh}} や {{ic|bvnc}} を使うことで SSH や VNC サーバーをそれぞれ閲覧することが可能です。 |
||
| + | したがってサービスファイルは以下のようになります: |
||
| − | Avahi のウェブサイトには Avahi がサポートしているソフトウェアの一覧があります: http://avahi.org/wiki/Avah4users |
||
| + | |||
| − | {{Note|{{ic|avahi-discover}} を使うには {{Pkg|pygtk}} と {{Pkg|python2-dbus}} をインストールする必要があります。}} |
||
| + | {{hc|qotd.service|<nowiki> |
||
| + | <?xml version="1.0" standalone='no'?><!--*-nxml-*--> |
||
| + | <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> |
||
| + | |||
| + | <service-group> |
||
| + | |||
| + | <name replace-wildcards="yes">%h</name> |
||
| + | |||
| + | <service> |
||
| + | <type>_qotd._tcp</type> |
||
| + | <port>17</port> |
||
| + | </service> |
||
| + | |||
| + | </service-group> |
||
| + | </nowiki>}} |
||
| + | |||
| + | 別のサーバーでサービスを動作させる場合や、DNS のサブタイプが異なる場合など、複雑なサービスについては {{man|5|avahi.service}} を読んでください。 |
||
| + | |||
| + | === SSH === |
||
| + | |||
| + | Avahi には SSH サーバーを喧伝するサンプルサービスファイルが付属しています。有効化するには: |
||
| + | # cp /usr/share/doc/avahi/ssh.service /etc/avahi/services/ |
||
===ファイル共有=== |
===ファイル共有=== |
||
====NFS==== |
====NFS==== |
||
| − | [[ |
+ | [[NFS]] 共有を設定している場合は、Avahi を使って Zeroconf が有効になっているブラウザ (KDE の Konqueror や macOS の Finder など) で共有を自動マウントすることができます。{{ic|/etc/avahi/services}} に以下の内容で {{ic|.service}} ファイルを作成してください: |
{{hc|/etc/avahi/services/nfs_Zephyrus_Music.service|<nowiki> |
{{hc|/etc/avahi/services/nfs_Zephyrus_Music.service|<nowiki> |
||
<?xml version="1.0" standalone='no'?> |
<?xml version="1.0" standalone='no'?> |
||
| 60行目: | 125行目: | ||
</service-group></nowiki>}} |
</service-group></nowiki>}} |
||
| − | {{ic|/etc/exports}} にオプションとして ''insecure'' を使っている場合ポートはこのままでいいですが、そうでない場合は変更する必要があります ( |
+ | {{ic|/etc/exports}} にオプションとして ''insecure'' を使っている場合ポートはこのままでいいですが、そうでない場合は変更する必要があります (macOS クライアントには ''insecure'' が必要です)。パスは export しているパスか、そのサブディレクトリになります。なんらかの理由で Leopard から自動マウント機能は削除されていますが、[http://www.macosxhints.com/article.php?story=20071116042238744 スクリプトを使うことができます]。このスクリプトは[https://ubuntuforums.org/showthread.php?p=4387032#post4387032 この投稿] に基づいています。 |
====Samba==== |
====Samba==== |
||
| + | サーバーとクライアントの両方で Avahi デーモンを動作させることで、クライアント側のファイルマネージャで自動的にサーバーが認識されます。 |
||
| − | 何も設定しなくても動くはずです。 |
||
| − | |||
| − | ====GShare==== |
||
| − | [[Arch User Repository|Arch User Repository]] から {{AUR|gshare}} をインストールして LAN 間でファイルを共有できます。設定は必要ありません、ちゃんと動くはずです。 |
||
====Vsftpd==== |
====Vsftpd==== |
||
| − | + | [[vsftpd]] などの通常の FTP サーバーを自動探知することもできます。{{Pkg|vsftpd}} パッケージをインストールして vsftpd の設定を自由に変更してください ([https://ubuntuforums.org/showthread.php?t=218630 ubuntuforums.org のスレッド] や {{man|5|vsftpd.conf}} を参照)。 |
|
| − | 標準の ftp サービスを使いたい場合は、vsftpd と avahi をインストールしてください。vsftpd の設定を ubuntuforums ページに従うか、個人設定によって変更してください ({{ic|man vsftpd.conf}} を参照)。 |
||
| − | {{ic|/etc/avahi/services}} に {{ic| |
+ | そして以下の内容で {{ic|/etc/avahi/services}} に {{ic|.service}} ファイルを作成: |
| + | {{hc|/etc/avahi/services/ftp.service|<nowiki> |
||
| − | <?xml version="1.0" standalone='no'?> |
||
| + | <?xml version="1.0" standalone='no'?> |
||
| − | <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> |
||
| − | + | <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> |
|
| + | <service-group> |
||
| − | <name>FTP file sharing</name> |
||
| + | <name>FTP file sharing</name> |
||
| − | <service> |
||
| + | <service> |
||
<type>_ftp._tcp</type> |
<type>_ftp._tcp</type> |
||
<port>21</port> |
<port>21</port> |
||
| − | + | </service> |
|
| − | + | </service-group> |
|
| + | </nowiki>}} |
||
| − | 設定が完了したら、{{ic|avahi-daemon.service}} と {{ic|vsftpd.service}} のサービスを[[systemd#ユニットを使う|再起動]]してください。 |
||
| − | これでネットワークの他のコンピュータから |
+ | これで FTP サーバーが Avahi によって喧伝されるようになります。ネットワーク上の他のコンピュータからファイルマネージャを使って FTP サーバーに接続できるはずです。クライアント側で[[#ホスト名の解決|ホスト名の解決]]を有効にする必要があるかもしれません。 |
| + | ===携帯デバイスからの AirPrint=== |
||
| − | GNOME や KDE を使っていない場合、ファイルマネージャを使って直接 ftp サーバーにログインすることができないかもしれません。そのときは ftp クライアントを使ってマシンのサーバーの IP アドレスか ([[#ホスト名の解決|このセクション]]で説明しているように) ホスト名を指定してください。 |
||
| + | Avahi と [[CUPS]] を組み合わせることで airprint に対応している携帯デバイスからプリンターに印刷をすることができます。印刷機能を有効にするには、{{ic|/etc/avahi/services/}} にプリンターの Avahi サービスファイルを作成してください。HP-Laserjet プリンターの場合、サービスファイルは以下のようになります。{{ic|name}}, {{ic|rp}}, {{ic|ty}}, {{ic|adminurl}}, {{ic|note}} フィールドは適切な値に置き換えてください。 |
||
| + | {{hc|/etc/avahi/services/airprint.service|<nowiki> |
||
| − | ====Giver==== |
||
| + | <?xml version="1.0" standalone='no'?><!--*-nxml-*--> |
||
| − | [http://code.google.com/p/giver/ Giver] は Giver を動作させている2つのデスクトップ間で簡単にファイルを共有できる mono のプログラムです。必要な操作はファイルをクリックしてファイルを送信したい相手の名前か写真にドラッグするだけです。 |
||
| + | <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> |
||
| + | <service-group> |
||
| + | <name>yourPrnterName</name> |
||
| + | <service> |
||
| + | <type>_ipp._tcp</type> |
||
| + | <subtype>_universal._sub._ipp._tcp</subtype> |
||
| + | <port>631</port> |
||
| + | <txt-record>txtver=1</txt-record> |
||
| + | <txt-record>qtotal=1</txt-record> |
||
| + | <txt-record>rp=printers/yourPrnterName</txt-record> |
||
| + | <txt-record>ty=yourPrnterName</txt-record> |
||
| + | <txt-record>adminurl=http://198.168.7.15:631/printers/yourPrnterName</txt-record> |
||
| + | <txt-record>note=Office Laserjet 4100n</txt-record> |
||
| + | <txt-record>priority=0</txt-record> |
||
| + | <txt-record>product=(GPL Ghostscript)</txt-record> |
||
| + | <txt-record>printer-state=3</txt-record> |
||
| + | <txt-record>printer-type=0x801046</txt-record> |
||
| + | <txt-record>Transparent=T</txt-record> |
||
| + | <txt-record>Binary=T</txt-record> |
||
| + | <txt-record>Fax=F</txt-record> |
||
| + | <txt-record>Color=T</txt-record> |
||
| + | <txt-record>Duplex=T</txt-record> |
||
| + | <txt-record>Staple=F</txt-record> |
||
| + | <txt-record>Copies=T</txt-record> |
||
| + | <txt-record>Collate=F</txt-record> |
||
| + | <txt-record>Punch=F</txt-record> |
||
| + | <txt-record>Bind=F</txt-record> |
||
| + | <txt-record>Sort=F</txt-record> |
||
| + | <txt-record>Scan=F</txt-record> |
||
| + | <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record> |
||
| + | <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record> |
||
| + | </service> |
||
| + | </service-group> |
||
| + | </nowiki>}} |
||
| + | もしくは https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py を使って Avahi サービスファイルを生成することもできます。スクリプトは {{Pkg|python2}} と {{AUR|python2-pycups}} に依存しており、以下のコマンドで使用することができます: |
||
| − | パッケージは {{AUR|giver}} です。 |
||
| + | # python2 airprint-generate.py -d /etc/avahi/services |
||
| − | Giver は gnome-sharp に依存しており、gnome-sharp は GNOME のパッケージに依存しているので注意してください。 |
||
| + | {{Note|http://localhost:631/printers でプリンターが "Not Shared" になっている場合、上記の python スクリプトは {{ic|/etc/avahi/services}} に何もファイルを出力しません。その場合、CUPS のドロップダウンメニューから "Modify Printer" を選択して共有を有効にしてください。共有ができない場合、[[CUPS/プリンター共有]]を参照してください。}} |
||
| − | ===リンクローカル (Bonjour/Zeroconf) 通信=== |
||
| + | == トラブルシューティング == |
||
| − | Avahi を linux の bonjour プロトコルのサポートのために使うことができます。[[Wikipedia:Comparison of instant messaging clients]] や [[List of Applications#インスタントメッセージ]] で bonjour プロトコルをサポートしているクライアントのリストを確認してください。 |
||
| + | === 増分番号を追加するとホスト名が変わります === |
||
| − | ===携帯デバイスからの Airprint=== |
||
| − | Avahi は CUPS と協同して airprint 対応の携帯デバイスからほとんど全てのプリンターに印刷する機能も提供します。デバイスからの印刷機能を有効にするには、プリンターの avahi サービスファイルを /etc/avahi/services に作成して avahi を再起動してください。HP-Laserjet プリンターの一般的なサービスファイルは以下の例のようになります。name, rp, ty, adminurl, note は変えて下さい。ファイルは /etc/avahi/services/youFileName.service として保存します: |
||
| − | <?xml version="1.0" standalone='no'?><!--*-nxml-*--> |
||
| − | <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> |
||
| − | <service-group> |
||
| − | <name>yourPrnterName</name> |
||
| − | <service> |
||
| − | <type>_ipp._tcp</type> |
||
| − | <subtype>_universal._sub._ipp._tcp</subtype> |
||
| − | <port>631</port> |
||
| − | <txt-record>txtver=1</txt-record> |
||
| − | <txt-record>qtotal=1</txt-record> |
||
| − | <txt-record>rp=printers/yourPrnterName</txt-record> |
||
| − | <txt-record>ty=yourPrnterName</txt-record> |
||
| − | <txt-record>adminurl=http://198.168.7.15:631/printers/yourPrnterName</txt-record> |
||
| − | <txt-record>note=Office Laserjet 4100n</txt-record> |
||
| − | <txt-record>priority=0</txt-record> |
||
| − | <txt-record>product=virtual Printer</txt-record> |
||
| − | <txt-record>printer-state=3</txt-record> |
||
| − | <txt-record>printer-type=0x801046</txt-record> |
||
| − | <txt-record>Transparent=T</txt-record> |
||
| − | <txt-record>Binary=T</txt-record> |
||
| − | <txt-record>Fax=F</txt-record> |
||
| − | <txt-record>Color=T</txt-record> |
||
| − | <txt-record>Duplex=T</txt-record> |
||
| − | <txt-record>Staple=F</txt-record> |
||
| − | <txt-record>Copies=T</txt-record> |
||
| − | <txt-record>Collate=F</txt-record> |
||
| − | <txt-record>Punch=F</txt-record> |
||
| − | <txt-record>Bind=F</txt-record> |
||
| − | <txt-record>Sort=F</txt-record> |
||
| − | <txt-record>Scan=F</txt-record> |
||
| − | <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record> |
||
| − | <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record> |
||
| − | </service> |
||
| − | </service-group> |
||
| + | これは、ホスト名の競合状態が原因で発生する [https://github.com/lathiat/avahi/issues/117 既知のバグ] です。考えられる回避策の1つは、競合状態を防ぐために [https://github.com/lathiat/avahi/issues/117#issuecomment-302849130 IPv6 を無効にする] ことです。複数のインターフェースが存在する場合 [https://github.com/lathiat/avahi/issues/117#issuecomment-401225716useallow-interfaces] を使用して、Avahi を単一のインターフェースに制限します。もう1つの考えられる回避策は、[https://github.com/lathiat/avahi/issues/117#issuecomment-442201162 キャッシュを無効にする] ことで、Avahi がホスト名の競合を完全にチェックしないようにしますが、これにより Avahi はルックアップを実行できなくなります。 |
||
| − | もしくは、https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py を使って Avahi のサービスファイルを生成することができます。このスクリプトは python2 と pycups に依存しています。スクリプトを実行するには: {{bc|# python2 airprint-generate.py -d /etc/avahi/services}} |
||
| + | === systemd-resolved のせいで nss-mdns が機能しない === |
||
| − | === ファイアウォール === |
||
| + | nss-mdns は、{{ic|/etc/resolv.conf}} に記載された DNS サーバーが "local" ドメインに対する SOA クエリに {{ic|NXDOMAIN}} を返す場合にのみ動作します。[https://github.com/lathiat/nss-mdns/blob/master/README.md#activation] |
||
| − | iptables を使っている場合 UDP ポート 5353 を開いて下さい: |
||
| − | # iptables -A INPUT -p udp -m udp --dport 5353 -j ACCEPT |
||
| + | まず、設定された DNS サーバーが "local" ドメインに対する SOA クエリに {{ic|NXDOMAIN}} を返すか確認してください。例えば、次のコマンドを実行します: |
||
| − | ファイアウォールとして [[Simple stateful firewall]] フォーマットを使っている場合は: |
||
| + | |||
| − | # iptables -A UDP -p udp -m udp --dport 5353 -j ACCEPT |
||
| + | $ host -t SOA local |
||
| + | |||
| + | DNS サーバーが {{ic|NXDOMAIN}} を返す場合、以下の手順を実施する必要はありません。Avahi は、[[systemd-resolved]] を使用していても、通常通りネットワーク内のリソースを見つけられるはずです。 |
||
| + | |||
| + | 古いバージョンの [[systemd-resolved]] では、{{man|5|resolved.conf}} におけるグローバル設定 {{ic|1=MulticastDNS=no}} が "local" ドメインに対して Avahi と互換性のないレスポンスコードを返していました。その結果、Avahi がリソース(プリンターなど)を正しく検出できない問題が発生しました。この問題に関しては [https://github.com/systemd/systemd/issues/21659 systemd issue 21659] を参照してください。 |
||
| + | |||
| + | 解決策は、{{ic|mdns_minimal}} の代わりに完全な {{ic|mdns}} NSS モジュールを使用し、{{ic |/etc/mdns.allow}} を作成して ''ローカル'' ドメインのみを許可することです。例えば: |
||
| + | |||
| + | {{hc|/etc/nsswitch.conf|2= |
||
| + | hosts: mymachines '''mdns [NOTFOUND=return]''' resolve [!UNAVAIL=return] files myhostname dns |
||
| + | }} |
||
| + | |||
| + | {{hc|/etc/mdns.allow| |
||
| + | .local. |
||
| + | .local |
||
| + | }} |
||
| + | |||
| + | {{Note|1=上記のソリューションは、{{Pkg|mtr}} や {{Pkg|traceroute}} などのネットワークユーティリティでの逆引き参照を中断します。これらのアプリケーションは、他のDNSサービスにフォールバックする代わりに、Avahi を介して逆引き参照を実行し、タイムアウトを試みます。これは[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=433943Debianissue 433943] に似ているようですが、残念ながら、{{ic|mdns}} の代わりに {{ic|mdns_minimal}} を使うことが推奨されています。}} |
||
| + | |||
| + | === Avahi ソケットでの ECONNREFUSED(接続拒否) === |
||
| + | |||
| + | Avahi が正常に起動・動作しているにもかかわらず、nss が mdns にリクエストを転送しない場合、原因は {{ic|/run/avahi-daemon/socket}} ソケットが詰まっている可能性があります。この問題は strace などで確認できます。この場合、{{ic|avahi-daemon.service}} および {{ic|avahi-daemon.socket}} の両方を [[再起動]] することで問題を解決できる場合があります。 |
||
| + | |||
| + | === KDE Connect の内蔵 mDNS との競合 === |
||
| + | |||
| + | kdeconnect を使用している場合、{{Pkg|kdeconnect}} が独自の mDNS サーバーを実行するため、avahi と mDNS の競合が発生します。この競合により、ネットワーク再起動後にホスト名が {{ic|myhostname-2}} にリネームされるなどの問題が発生することがあります。 |
||
| + | |||
| + | これを修正するには、{{pkg|kdeconnect}} を削除するか、{{aur|kdeconnect-no-mdns}} のように、mdns サポート無しのバージョンをビルドしてください。 |
||
| + | |||
| + | こちらも参照 [https://bugs.kde.org/show_bug.cgi?id=487719 kde bug 487719] |
||
==参照== |
==参照== |
||
| + | |||
| − | * [http://avahi.org/ Avahi] - 公式プロジェクトウェブサイト |
||
| + | * [http://avahi.org/ Avahi] - プロジェクトの公式ウェブサイト |
||
| − | * [http://www.apple.com/support/downloads/bonjourforwindows.html Bonjour for Windows] - Windows で Zeroconf を有効にする |
||
| + | * [[wikipedia:ja:Avahi]] |
||
| + | * [https://www.apple.com/itunes/download/ iTunes (includes Bonjour)] - Windows で Zeroconf を有効化 |
||
* http://www.zeroconf.org/ |
* http://www.zeroconf.org/ |
||
2025年2月5日 (水) 05:58時点における最新版
- "Avahi は、Zeroconf (ゼロ・コンフィギュレーション・ネットワーキング) のフリーソフトウェア実装であり、マルチキャスト DNS/DNS-SD サービスディレクトリのためのシステムを含む。Avahi は、特定の構成情報のないローカルネットワーク上のサービスホストの発行と発見を可能とする。例えば、ネットワークに接続したとき、即座にプリンタを検出し、ファイルを探し出し、他者と会話できるようにする。GNU Lesser General Public License (LGPL) の条件でライセンス提供される。"
インストール
avahi パッケージを インストール し、avahi-daemon.service を 有効化 するか、ソケットアクティベーション を使用してください。
Avahi を使う
ホスト名の解決
Avahi には hostname.local という名前を使ってローカルでホスト名を解決する機能があります。有効にするには nss-mdns パッケージをインストールして avahi-daemon.service を起動してください。
その後、/etc/nsswitch.conf ファイルを編集して、resolve と dns の前に mdns_minimal [NOTFOUND=return] が含まれるように hosts 行を変更してください:
hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns
カスタム TLD を使用する場合の mDNS の設定
mdns_minimal モジュールが .local TLD の取り合わせを処理します。[NOTFOUND=return] と設定しているのは、mdns_minimal が *.local を見つけられなかったときに、dns や myhostname などで検索しないようにするためです。
Avahi で他の TLD もサポートしたい場合、以下の設定を行ってください:
mdns_minimal [NOTFOUND=return]をmdnsに置き換えてください。IPv4 や IPv6 しか使わないモジュールmdns[46](_minimal)も存在します。/etc/avahi/avahi-daemon.confのdomain-nameをカスタマイズしてください。/etc/mdns.allowで Avahi のカスタム TLD をホワイトリストに入れてください。
ツール
Avahi にはネットワーク上で動作しているサービスを探知するのに役立つユーティリティが複数含まれています。例えば、以下のコマンドを実行するとネットワーク上のサービスが表示されます:
$ avahi-browse --all --ignore-local --resolve --terminate
このコマンドが何も出力しない場合、原因は ファイアウォール によって mDNS トラフィックがブロックされている可能性があります。
.local ホスト名を IP アドレスに解決するために単に mDNS クエリを実行したい場合(dig や nslookup に似た方法)、次のコマンドを使用してください:
$ avahi-resolve-host-name some-host-name.local
getent hosts コマンドは、DNS と MDNS ルックアップの両方を実行できることに注意してください。
Avahi Zeroconf Browser (avahi-discover) はネットワーク上の様々なサービスを表示します。使用するには Avahi の任意依存パッケージである gtk3, python-dbus, python-gobject のインストールが必要です。また、bssh と bvnc を使うことで SSH サーバーや VNC サーバーを閲覧することもできます。
ファイアウォール
ファイアウォールを使っている場合は UDP ポート 5353 を開いてください。
リンクローカル (Bonjour/Zeroconf) チャット
Avahi を使って Linux で Bonjour プロトコルを使用することもできます。Wikipedia:Comparison of instant messaging clients やアプリケーション一覧/インターネット#インスタントメッセージに Bonjour プロトコルをサポートしているクライアントが載っています。
IPv4LL IP アドレスの取得
デフォルトでは、DHCP を使って IP を取得するとき、dhcpcd パッケージを使用します。DHCP で IP アドレスが取得できなかったときに IPv4LL アドレスを取得するようにすることができます。デフォルトではこのオプションは無効になっています。有効にするには noipv4ll をコメントアウトしてください:
/etc/dhcpcd.conf
... #noipv4ll ...
もしくは avahi-autoipd を実行してください:
# avahi-autoipd -D
サービスの追加
Avahi は /etc/avahi/services に *.service ファイルが存在するサービスを喧伝します。ファイルは avahi ユーザー・グループから読み込めるようにする必要があります。
*.service ファイルが存在しないサービスを使いたい場合、簡単にサービスを作成することができます。
例として、RFC 865 に基づく今日の格言 (QOTD) を表示するサービスを TCP の17番ポートで稼働させるとしましょう。
まず最初に <type> を決定する必要があります。avahi.service(5) によればタイプは DNS-SD サービスタイプのどれかにする必要があります (例: _http._tcp)。DNS-SD のレジスタは2010年に IANA レジスタに統合 されたため、サービス名は IANA レジスタ や /etc/services ファイルで確認することができます。サービス名は qotd となっています。QOTD は tcp で動作するため、サービスは _qotd._tcp でありポート番号は 17 となります (IANA と RFC865 に準拠)。
したがってサービスファイルは以下のようになります:
qotd.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_qotd._tcp</type>
<port>17</port>
</service>
</service-group>
別のサーバーでサービスを動作させる場合や、DNS のサブタイプが異なる場合など、複雑なサービスについては avahi.service(5) を読んでください。
SSH
Avahi には SSH サーバーを喧伝するサンプルサービスファイルが付属しています。有効化するには:
# cp /usr/share/doc/avahi/ssh.service /etc/avahi/services/
ファイル共有
NFS
NFS 共有を設定している場合は、Avahi を使って Zeroconf が有効になっているブラウザ (KDE の Konqueror や macOS の Finder など) で共有を自動マウントすることができます。/etc/avahi/services に以下の内容で .service ファイルを作成してください:
/etc/avahi/services/nfs_Zephyrus_Music.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">NFS Music Share on %h</name>
<service>
<type>_nfs._tcp</type>
<port>2049</port>
<txt-record>path=/data/shared/Music</txt-record>
</service>
</service-group>
/etc/exports にオプションとして insecure を使っている場合ポートはこのままでいいですが、そうでない場合は変更する必要があります (macOS クライアントには insecure が必要です)。パスは export しているパスか、そのサブディレクトリになります。なんらかの理由で Leopard から自動マウント機能は削除されていますが、スクリプトを使うことができます。このスクリプトはこの投稿 に基づいています。
Samba
サーバーとクライアントの両方で Avahi デーモンを動作させることで、クライアント側のファイルマネージャで自動的にサーバーが認識されます。
Vsftpd
vsftpd などの通常の FTP サーバーを自動探知することもできます。vsftpd パッケージをインストールして vsftpd の設定を自由に変更してください (ubuntuforums.org のスレッド や vsftpd.conf(5) を参照)。
そして以下の内容で /etc/avahi/services に .service ファイルを作成:
/etc/avahi/services/ftp.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>FTP file sharing</name>
<service>
<type>_ftp._tcp</type>
<port>21</port>
</service>
</service-group>
これで FTP サーバーが Avahi によって喧伝されるようになります。ネットワーク上の他のコンピュータからファイルマネージャを使って FTP サーバーに接続できるはずです。クライアント側でホスト名の解決を有効にする必要があるかもしれません。
携帯デバイスからの AirPrint
Avahi と CUPS を組み合わせることで airprint に対応している携帯デバイスからプリンターに印刷をすることができます。印刷機能を有効にするには、/etc/avahi/services/ にプリンターの Avahi サービスファイルを作成してください。HP-Laserjet プリンターの場合、サービスファイルは以下のようになります。name, rp, ty, adminurl, note フィールドは適切な値に置き換えてください。
/etc/avahi/services/airprint.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>yourPrnterName</name>
<service>
<type>_ipp._tcp</type>
<subtype>_universal._sub._ipp._tcp</subtype>
<port>631</port>
<txt-record>txtver=1</txt-record>
<txt-record>qtotal=1</txt-record>
<txt-record>rp=printers/yourPrnterName</txt-record>
<txt-record>ty=yourPrnterName</txt-record>
<txt-record>adminurl=http://198.168.7.15:631/printers/yourPrnterName</txt-record>
<txt-record>note=Office Laserjet 4100n</txt-record>
<txt-record>priority=0</txt-record>
<txt-record>product=(GPL Ghostscript)</txt-record>
<txt-record>printer-state=3</txt-record>
<txt-record>printer-type=0x801046</txt-record>
<txt-record>Transparent=T</txt-record>
<txt-record>Binary=T</txt-record>
<txt-record>Fax=F</txt-record>
<txt-record>Color=T</txt-record>
<txt-record>Duplex=T</txt-record>
<txt-record>Staple=F</txt-record>
<txt-record>Copies=T</txt-record>
<txt-record>Collate=F</txt-record>
<txt-record>Punch=F</txt-record>
<txt-record>Bind=F</txt-record>
<txt-record>Sort=F</txt-record>
<txt-record>Scan=F</txt-record>
<txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record>
<txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
</service>
</service-group>
もしくは https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py を使って Avahi サービスファイルを生成することもできます。スクリプトは python2 と python2-pycupsAUR に依存しており、以下のコマンドで使用することができます:
# python2 airprint-generate.py -d /etc/avahi/services
トラブルシューティング
増分番号を追加するとホスト名が変わります
これは、ホスト名の競合状態が原因で発生する 既知のバグ です。考えられる回避策の1つは、競合状態を防ぐために IPv6 を無効にする ことです。複数のインターフェースが存在する場合 [1] を使用して、Avahi を単一のインターフェースに制限します。もう1つの考えられる回避策は、キャッシュを無効にする ことで、Avahi がホスト名の競合を完全にチェックしないようにしますが、これにより Avahi はルックアップを実行できなくなります。
systemd-resolved のせいで nss-mdns が機能しない
nss-mdns は、/etc/resolv.conf に記載された DNS サーバーが "local" ドメインに対する SOA クエリに NXDOMAIN を返す場合にのみ動作します。[2]
まず、設定された DNS サーバーが "local" ドメインに対する SOA クエリに NXDOMAIN を返すか確認してください。例えば、次のコマンドを実行します:
$ host -t SOA local
DNS サーバーが NXDOMAIN を返す場合、以下の手順を実施する必要はありません。Avahi は、systemd-resolved を使用していても、通常通りネットワーク内のリソースを見つけられるはずです。
古いバージョンの systemd-resolved では、resolved.conf(5) におけるグローバル設定 MulticastDNS=no が "local" ドメインに対して Avahi と互換性のないレスポンスコードを返していました。その結果、Avahi がリソース(プリンターなど)を正しく検出できない問題が発生しました。この問題に関しては systemd issue 21659 を参照してください。
解決策は、mdns_minimal の代わりに完全な mdns NSS モジュールを使用し、/etc/mdns.allow を作成して ローカル ドメインのみを許可することです。例えば:
/etc/nsswitch.conf
hosts: mymachines mdns [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns
/etc/mdns.allow
.local. .local
Avahi ソケットでの ECONNREFUSED(接続拒否)
Avahi が正常に起動・動作しているにもかかわらず、nss が mdns にリクエストを転送しない場合、原因は /run/avahi-daemon/socket ソケットが詰まっている可能性があります。この問題は strace などで確認できます。この場合、avahi-daemon.service および avahi-daemon.socket の両方を 再起動 することで問題を解決できる場合があります。
KDE Connect の内蔵 mDNS との競合
kdeconnect を使用している場合、kdeconnect が独自の mDNS サーバーを実行するため、avahi と mDNS の競合が発生します。この競合により、ネットワーク再起動後にホスト名が myhostname-2 にリネームされるなどの問題が発生することがあります。
これを修正するには、kdeconnect を削除するか、kdeconnect-no-mdnsAUR のように、mdns サポート無しのバージョンをビルドしてください。
こちらも参照 kde bug 487719
参照
- Avahi - プロジェクトの公式ウェブサイト
- wikipedia:ja:Avahi
- iTunes (includes Bonjour) - Windows で Zeroconf を有効化
- http://www.zeroconf.org/