netatalk.io

Netatalk 4.1.2

AppleTalk

AppleTalk トランスポート層

AppleTalk は Apple が作成したネットワーク プロトコル ファミリで、TCP/IP より前のものである。これには、アドレス解決、アドレス/名前マッピング、サービスの場所、接続の確立など、さまざまな用途のさまざまなプロトコルが含まれている。

Netatalk は、AFP 経由でファイルを提供し、古い Mac および Apple II クライアントにその他のサービスを提供するために AppleTalk プロトコルを実装している。

完全な概要は、開発者向けドキュメント にある。

AppleTalk を使用するかどうか

TCP 経由で AFP を使用できない古い AFP クライアントにファイル サービスを提供するには、Netatalk に組み込まれた AppleTalk サポートが必要。また、papd による PAP 経由の印刷サービス、古い Mac クライアント用のタイムサーバー timelord、および Apple II クライアント用の NetBoot サーバー a2boot も有効になる。

さらに、Classic Mac OS クライアントにサービスを提供している場合は、ネットワーク クライアントの使いやすさを考慮して、サービスの伝播/場所の指定に AppleTalk を使用することを検討してください。 Apple のエンジニアは、AppleTalk 経由で AFP サーバーを簡単に見つける方法を実装しましたが、AFP 接続自体は AFP over TCP 経由で確立する (この優れた機能の詳細については、開発者向けドキュメントも参照してください)。

Netatalk でさまざまな基本 AppleTalk プロトコルを使用するには、atalkd を使用する必要がある。また、AppleTalk ルーターとして使用して、異なる独立したネットワーク セグメントを相互に接続することもできる。

AppleTalk/atalkd を使用するには、システムが AppleTalk のカーネル サポートを備えている必要がある。指定しない場合は、TCP 経由の AFP に制限され、この章で説明されている AppleTalk サービスのいずれも使用できなくなる。

appletalk = yes

Netatalk が AppleTalk サポート付きでビルドされている場合 (ビルド システムに -Dwith-appletalk=true を渡す)、AppleTalk 経由の AFP がアクティブになる。

AppleTalk ルーティングなし

これは最も単純な形式で、AppleTalk を netatalk で使用できる。 稼働中のネットワーク インターフェイスが 1 つだけの場合は、atalkd の設定をまったく処理する必要はない。atalkd は AppleTalk の自己設定機能を使用して AppleTalk アドレスを取得し、自動的にネットワークに登録する。

アクティブなネットワーク インターフェイスが複数ある場合は、次のどちらかを決定する必要がある。

1 つのインターフェイスのみを使用する

インターフェイス名 (en1、le0、eth2 など) を 1 行で atalkd.conf に追加するだけ。ここでは、1 つのインターフェースのみをリストしてください。

eth0

eth0 インターフェースでは AppleTalk ネットワーキングが有効になっている必要がある。必要なすべての構成はネットワークから取得される

起動時に、atalkd は実際の設定 (アドレスとネットワーク、最終的にはゾーン) を atalkd.conf に自動的に追加する

eth0 -phase 2 -net 0-65534 -addr 65280.166

atalkd は、このネットワーク セグメントに適用される AppleTalk 設定を入力しました。 netrange が 0 ~ 65534 の場合、AppleTalk ルーターが存在しないことを示す。そのため、atalkd は、次の条件に一致するアドレスを取得する。netrange は、いわゆる「スタートアップ範囲」65280 ~ 65533 内から、ノード アドレスは 142 ~ 255 である。

複数のインターフェイスの使用

複数のインターフェイスを使用する場合は、atalkd.conf-dontroute スイッチの後に、1行ずつ追加する必要がある。

eth0 -dontroute eth1 -dontroute eth2 -dontroute

AppleTalk ネットワークは、3 つのインターフェイスすべてで有効にする必要があるが、異なるセグメント間ではルーティングは実行しないでください。再度、必要なすべての設定は接続されたネットワークから取得される。

eth0 -dontroute -phase 2 -net 0-65534 -addr 65280.152
eth1 -dontroute -phase 2 -net 0-65534 -addr 65280.208
eth2 -dontroute -phase 2 -net 1-1000 -addr 10.142 -zone "Printers"

eth0 と eth1 には他のルーターが存在しないため、atalkd は起動範囲内からアドレスを選択する。しかし、eth2 にはすでに接続済みの AppleTalk ルーターが存在し、「プリンター」と呼ばれる 1 つのゾーンを公開し、クライアントに 1 から 1000 までのネット範囲のアドレスを自身に割り当てるように強制している。

この場合、atalkd は各インターフェースを唯一のアクティブなインターフェースとして処理する。 AFP クライアントが AppleTalk から TCP への魔法の切り替えを実行しようとする時点では、これにはいくつかの副作用があるため、注意して使用してください。

複数のアクティブなネットワーク インターフェイスがあり、上記の特別な予防措置を講じていない場合、ネットワーク インターフェイスの 1 つが、他のアクティブな AppleTalk ルーターが存在せず、適切なルーティング設定を提供するネットワークに接続されている状況で、インターフェイスの自動構成が失敗する可能性がある。

詳細については、atalkd.conf および開発者向けドキュメントを参照してください。

AppleTalk ルーターとして機能する atalkd

AppleTalk ルータには、シード ルータ、非シード ルータ、いわゆるソフト シード ルータなど、いくつかの種類がある。

Netatalk の atalkd は、シード ルータとソフトシード ルータの両方として動作できる。混合モードでは、1 つのインターフェイスではこのように動作し、もう 1 つのインターフェイスでは別の方法で動作する。

atalkd.conf を完全に空のままにするか、シード設定を使用せずにすべてのアクティブなインターフェイスを 1 行ずつ追加するだけの場合 (atalkd はどちらの場合も同じように動作する)、atalkd は各インターフェイスでソフトシード ルータとして動作するように強制されるため、シード ルータにアクセスできない最初のインターフェイスでは失敗する。ルーティング情報を取得する。

この場合、atalkd に依存する他のサービスも失敗する可能性がある。

したがって、atalkd を 1 つまたはすべてのアクティブなインターフェースでシード ルーターとして動作させる必要がある。シード ルータは、次の情報を提供する必要がある:

警告

自分自身がネットワーク管理者でない限り、AppleTalk ルーティングに関連する変更を行う前に管理者に問い合わせることを検討してください。これらの設定を変更すると、すべての AppleTalk ネットワーク クライアントに副作用が生じる可能性がある。

AppleTalk ネットワークでは、ネット範囲は一意である必要があり、互いに重複してはならない。幸い、netatalk の atalkd は、設定がネット上の既存の設定と競合していないかどうかをチェックするほど丁寧。そのような場合、設定は破棄され、ネット上の既存の設定が適応される (疑わしい場合は、常に syslog で詳細を確認してください)。

使用できるネット範囲には、42-42 などの非常に小さいものから、1-65279 などの非常に大きいものまである。後者は最大値を表する。 ルーティングされた環境では、接続されている他のサブネットの設定と重複しない限り、1 から 65279 の範囲の任意の数値を使用できる。

独自の AppleTalk アドレスは、ネット部分とノード部分 (前者は 16 ビット、後者は 8 ビット、たとえば 12057.143) で構成される。 Apple は、サーバーに 128 以上のノード アドレスを使用することを推奨している。これにより、クライアント Mac はより速くアドレスを割り当てることができる (クライアントは、指定されたネット範囲で主に 1 ~ 127 のノード アドレスを検索するため)。Apple サーバーと競合したくないため、142 以上のノード アドレスを使用することをお勧めする。

AppleTalk ゾーンは、物理ネットワークとは まったく 関係ない。クライアントの利便性のためのヒントにすぎず、ネットワーク リソースをより快適かつ迅速に見つけられるようにする。複数の物理セグメントにわたって 1 つのゾーン名を使用することも、1 つのセグメントに複数のゾーン名を使用することもできる (また、これらのさまざまな組み合わせも使用できる)。

したがって、必要なのは、物理セグメント、各セグメントに割り当てるネット範囲、どのセグメントに公開するゾーン名、およびセグメントごとのデフォルト ゾーン (これは常に最初のゾーン名であり、atalkd.conf の -zone スイッチで指定する) を含む ネットワーク チャートを描く ことだけ。

上記の手順を完了したら、必要に応じて atalkd.conf を編集してください。

atalkd.conf で次のオプションを設定する必要がある:

この値が抑制されていても -addr が存在する場合は、この特定のアドレスの netrange が使用される

「ゾーン マッピング」を設定できることに注意してください。これは、すべての AppleTalk セグメントにまったく同じゾーン名を公開するだけでなく、インターフェイスごとに複数のゾーン名を提供することを意味する。 LaserWriter のような低機能の AppleTalk デバイスは、常にデフォルトのゾーン (インターフェイスごとに atalkd.conf で使用する最初のゾーン エントリ) に登録されるが、よりインテリジェントなデバイスでは、ユーザー インターフェイスを介して 1 つの特定のゾーンを選択できる。

eth0 -seed -phase 2 -net 1-1000 -addr 1000.142 -zone "Printers" -zone "Spoolers"
eth1 -seed -phase 2 -net 1001-2000 -addr 2000.142 -zone "Macs" -zone "Servers"

eth0 の設定により、接続されたネットワーク内の AppleTalk デバイスは、ネットワーク範囲 1 ~ 1000 のアドレスを自身に割り当てるようになる。このセグメントには 2 つのゾーン名が発行される。「Printers」はいわゆる「標準ゾーン」で、レーザー プリンタなどの低機能の AppleTalk デバイスがこのゾーンに自動的に表示されるように強制する。netatalk の papd によって提供される AppleTalk プリンタ キューは、papd.conf の設定を調整するだけで、ゾーン「Spoolers」に登録できる。eth1 では、異なる重複しないネット範囲 1001-2000 を使用し、デフォルト ゾーンを「Macs」に設定して、4 番目のゾーン名「Servers」を発行する。

eth0 -seed -phase 2 -net 1-1000 -addr 1000.142 -zone "foo"
lo0 -phase 1 -net 1 -addr 1.142 -zone "foo"

上記の例と同じネットワーク設定を使用するが、atalkd が両方のセグメントで同じゾーン名を公開するようにする。AppleTalk ネットワークのすべてのセグメントで同じゾーン名が使用されるため、ゾーン名はまったく表示されないが、AppleTalk ルーティングは引き続きアクティブになる。この場合、いわゆる「非拡張」LocalTalk ネットワーク (フェーズ 1) を EtherTalk「拡張」ネットワーク (フェーズ 2) に透過的に接続する。

eth0 eth1 eth2

複数のインターフェイスがあるため、atalkd は両方のセグメント間で AppleTalk ルーターとして動作しようとする。独自にネットワーク構成を提供しないため、接続されたすべてのセグメントでシード ルーターが使用可能であることに依存する。 1 つのセグメントにのみ利用可能なシード ルータがない場合、全体が失敗する。

eth0 -phase 2 -net 10-10 -addr 10.166 -zone "Parking"
eth1 -phase 2 -net 10000-11000 -addr 10324.151 -zone "No Parking" -zone "Parking"
eth2 -phase 2 -net 65279-65279 -addr 65279.142 -zone "Parking" -zone "No Parking"

この場合、アクティブなシード ルータは接続された 3 つのネットワークすべてに存在するため、atalkd はそこからネットワーク構成を取得でき、設定が競合しないため、今後はセグメント間でソフトシード ルータが機能しなくなる。そのため、3 つのシード ルータがすべてネットから消えた場合でも、atalkd は接続されたネットワークに、それらから学習したネットワーク構成を提供する。atalkd がその後再起動された場合のみ、ルーティング情報は失われる (シード ルータとして動作していないため)。

eth0
eth1 -seed -phase 2 -net 99-100 -addr 99.200 -zone "Testing"

eth0 に接続されたネットワークにアクティブなシード ルータが存在しない場合、または構成が一致しないシード ルータが存在する場合 (たとえば、1 ~ 200 の重複したネット範囲)、atalkd は失敗する。それ以外の場合は、このマシンから構成を取得し、eth0 と eth1 の間でルーティングする。eth1 はシード ルーターとして機能する。

ちなみに、1 つのネットワーク セグメントに複数のシード ルーターを接続することはまったく問題ない。ただし、この場合、接続されたすべてのルーターの構成が、ネット範囲、公開されたゾーン名、およびセグメントごとの「標準ゾーン」に関してまったく同じになるように注意する必要がある。

印刷

Netatalk は、AppleTalk 対応プリンタにアクセスするための PAP クライアントとしても、PAP サーバとしても機能する。前者は pap ユーティリティを使用し、後者は papd サービスを起動することで行う。

AppleTalk プロトコル スイートの一部である「プリンタ アクセス プロトコル」は、1985 年に Apple によって開発された、完全に 8 ビット対応の双方向印刷プロトコルである。8 ビット対応 とは、バイト セット全体を印刷に使用できることを意味する(バイナリ エンコーディング)。これは、他のプロトコル、たとえば、シリアルおよびパラレル PostScript プリンタを駆動するための Adob​​e の標準プロトコル (Adobe TechNote 5009 を参照) や、8 番目のビットが制御コード用に予約されているため、印刷には下位 128 バイトのみを使用する LPR などと比べて大きな利点である。

双方向 とは、印刷元 (通常は Macintosh コンピュータ) と印刷先 (プリンタまたはスプーラ実装) が、機能クエリを介して両方の印刷先の機能について通信し、 (Adobe TechNote 5133 を参照) そしてデバイス ステータスを同期する。これにより、Macintosh 上の LaserWriter ドライバーは、一方では適切なデバイス固有の PostScript コード (カラーまたは白黒、必要なフォントのみの埋め込みなど) を生成し、他方では印刷プロセスまたは問題 (たとえば紙詰まり) に関する通知を生成することができる。

PAP 印刷サーバーの設定

Netatalk の papd は、Macintosh、またはより正確には一般的な PAP クライアントに AppleTalk 印刷サービスを提供できる。 Netatalk 自体には本格的なスプーラ実装は含まれておらず、papd は双方向通信と PAP クライアントからの印刷ジョブの送信のみを処理する。そのため、通常は、papd を Unix 印刷システム (例:クラシック SysV lpd、BSD lpr、LPRng、CUPS など。

クライアントの機能クエリに正しく応答することが非常に重要なので、papd はこれをどのように実現するのでしょうか。割り当てられた PPD ファイルの関連キーワードを解析する。CUPS を使用する場合、papd は IPP 経由でプリンタを照会して、オンザフライで PPD ファイルを生成しようとする。他のスプーラでは、正しい PPD を選択することが印刷を可能にするために重要。

Netatalk には以前、System V lpd 印刷のサポートが組み込まれていました。papd は印刷ジョブを spooldir に直接保存し、その後 lpd を呼び出してファイルを取得し、残りの処理を実行していました。多くの lpd 実装との非互換性のため、通常の動作では、プリンタを名前で指定して lpd とのやり取りを使用するのではなく、パイプに直接印刷していました。Netatalk 2.0 では、別の代替手段が実装された。CUPS との直接のやり取り (注: CUPS サポートがコンパイルされている場合、SysV lpd サポートはまったく機能しない)。詳細な例は、papd.conf マニュアル ページにある。

papd と SysV lpd の統合

CUPS サポートがコンパイルされていない場合 (Netatalk 2.0 以降ではデフォルト)、pr パラメータをキュー名に設定することで、問題の lpd キューを定義するだけです。 pr パラメータが設定されていない場合は、デフォルトのプリンタが使用される。

papd でパイプを使用する

上記で概説した手法の代わりとして、papd の出力をパイプ経由で別のプログラムに送る方法がある。このメカニズムを使用すると、ほぼすべての印刷システムを操作できる。

直接 CUPS サポートを使用する

Netatalk 2.0 以降では、直接 CUPS 統合が使用可能。この場合、キュー名のみを pr パラメータとして定義すると、SysV lpd デーモンは呼び出されず、代わりに CUPS が使用される。 pd スイッチを使用して特定の PPD が割り当てられていない限り、CUPS で構成された PPD は papd でも使用される。

cupsautoadd という特別な共有が 1 つ存在する。これが papd.conf に存在する場合、使用可能なすべての CUPSキューは、このグローバル共有に割り当てられたパラメータを使用して自動的に処理される。ただし、後続のプリンタ定義を使用して、個々のスプーラのこれらのグローバル設定を上書きできる。

cupsautoadd:op=root:

AppleTalk プリンタの使用

Netatalk の papstatus は AppleTalk プリンタのクエリに使用でき、 pap はプリンタに印刷するのに使用できる。

pap はスタンドアロンで使用することも、出力フィルタまたは CUPS バックエンドの一部として使用することもできる (すべてのプリンタを処理する必要がないため、この方法の方が推奨される)オプション)。

pap を単独で使用する

下記事例では、ファイル /usr/share/doc/gs/examples/tiger.ps を標準ゾーン “*” にある “ColorLaserWriter 16/600” というプリンタに送信される。デバイス タイプは “LaserWriter” (デフォルトなので省略できる)。

pap -p"ColorLaserWriter 16/600@*" /usr/share/doc/gs/examples/tiger.ps

続いて、GhostScript は PostScriptジョブをColor DeskWriterに適したPCL3出力に変換するために使用される。コマンド ラインにファイルが指定されていないため、papはstdinからデータを読み取る。プリンタのアドレスは、同じディレクトリにある.paprcファイルから読み取られ、papが呼び出される(この例では、単に「Color DeskWriter:DeskWriter@Printers」が含まれている)。-Eスイッチにより、papはプリンタからのEOFを待たなくなる。

gs -q -dNOPAUSE -sDEVICE=cdjcolor -sOutputFile=test.ps | pap -E

pap を CUPS バックエンドとして使用する

Netatalk は CUPS バックエンドを提供し、AppleTalk プリンタに印刷するために使用できる。バックエンドは pap と呼ばれ、プラットフォームに応じて /usr/lib/cups/backend または /usr/pkg/libexec/cups/backend に配置される。

バックエンドは、プリンタ モデルといくつかの他のオプションでファイルを編集することで設定できる。

CUPS 1.x では、「Find New Printers」ウィザードを使用して AppleTalk プリンタを設定できる。ただし、CUPS 2.x では、バックエンドを手動で CUPS Web インターフェイスでプリンタ URL を追加することで設定する必要がある。URL は、直接 pap バックエンド スクリプトを引数無しで実行することで取得できます。さらに、CUPS 3.x では、カスタム バックエンド機能が完全に削除されているため、CUPS は pap バックエンドを使用できない。

タイム サービス

Timelord

timelord は AppleTalk ベースのタイム サーバーで、NTP をサポートしていない古い Macintosh または Apple II クライアントのシステム時間を自動的に同期するのに役立つ。

Netatalk の timelordメルボルン大学で開発された Macintosh 用の tardis クライアントと互換性がある。

詳細については、timelord マニュアル ページをご覧ください。

ネットブート サービス

Apple 2 ネットブート

a2boot は、 Apple //e または Apple IIGS を、Netatalk が提供する AFP ボリュームを介して ProDOS または GS/OS にブートする。

Apple が提供する適切なブート ブロックとシステム ファイルを自分で用意する必要がある。

詳細については、a2boot マニュアル ページを参照してください。