# AppleTalk

トランスポート層

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

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

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

### AppleTalk を使用するかどうか

TCP 経由で AFP を使用できない古い AFP クライアントにファイル サービスを提供するには、Netatalk に組み込まれた AppleTalk サポートが必要です。また、

papd

8 による PAP 経由の印刷サービス、古い Mac クライアント用のタイムサーバー

timelord

8 、および Apple II クライアント用の NetBoot サーバー

a2boot

8 も有効になります。

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

Netatalk でさまざまな基本 AppleTalk プロトコルを使用するには、

atalkd

8 を使用する必要があります。また、AppleTalk ルーターとして使用して、異なる独立したネットワーク セグメントを相互に接続することもできます。

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

#### afp.conf で 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 つのインターフェースのみをリストしてください。

##### atalkd.conf には 1 つのエントリが含まれています

    eth0

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

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

##### atalkd の起動後に atalkd.conf に 1 つのエントリが含まれています

    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 行ずつ追加する必要があります。

##### -dontroute オプションを含む複数のエントリを含む atalkd.conf

    eth0 -dontroute eth1 -dontroute eth2 -dontroute

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

##### atalkd の起動後に -dontroute オプションを含むいくつかのエントリを含む atalkd.conf

    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

5 および開発者向けドキュメントを参照してください。

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

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

- シード ルータには独自の構成があり、その構成を、そのルータが構成されているネットワーク セグメントに公開します。

- 非シード ルータは、ネットワーク構成を学習するために、接続先のインターフェイスにシード ルータが必要です。したがって、このタイプの AppleTalk ルータは、手動設定なしで完全に動作します。

- いわゆるソフトシード ルータは、シード ルータの設定を記憶し、実際のシード ルータがネットから消えた場合に代わりとして動作できることを除けば、非シード ルータとまったく同じです。

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

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

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

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

- このセグメントの特定のネット範囲

- 独自の AppleTalk アドレス

- このセグメントで使用可能なゾーン (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 で次のオプションを設定する必要があります:

- -net (各インターフェースに 1 ～ 65279 の適切な値を使用します)

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

- -addr (net 部分は -net 設定 (存在する場合) と一致する必要があります。ノード アドレスは 142 ～ 255 の範囲である必要があります)

- -zone (1 行に複数回使用できます。最初のエントリはデフォルトのゾーンです)

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

#### atalkd.conf で netatalk を 2 つのインターフェイスのシード ルータにする

    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

5 の設定を調整するだけで、ゾーン「Spoolers」に登録できます。eth1 では、異なる重複しないネット範囲 1001-2000 を使用し、デフォルト ゾーンを「Macs」に設定して、4 番目のゾーン名「Servers」を発行します。

#### atalkd.conf は「ゾーン マッピング」用に構成されています

    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) に透過的に接続します。

#### atalkd.conf (ソフトシード ルーター構成用)

    eth0 eth1 eth2

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

#### atalkd 起動後のソフトシード ルータ構成の atalkd.conf

    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 がその後再起動された場合のみ、ルーティング情報は失われます (シード ルータとして動作していないため)。

#### atalkd.conf は混合シード/ソフトシード モードに対応しています

    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`

1 ユーティリティを使用し、後者は

`papd`

8 サービスを起動することで行います。

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

5 マニュアル ページにあります。

#### `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 キューは、このグローバル共有に割り当てられたパラメータを使用して自動的に処理されます。ただし、後続のプリンタ定義を使用して、個々のスプーラのこれらのグローバル設定を上書きできます。

##### 構文例、root をオペレータとして割り当てる:

    cupsautoadd:op=root:

### AppleTalk プリンタの使用

Netatalk の

`papstatus`

8 は AppleTalk プリンタのクエリに使用でき、

`pap`

1 はプリンタに印刷するのに使用できます。

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

#### `pap` PostScript LaserWriter に印刷

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

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

#### `pap` 非 PostScript プリンタに印刷

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

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

## タイム サービス

### Timelord

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

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

詳細については、

timelord

8 マニュアル ページをご覧ください。

## NetBoot サービス

### Apple 2 NetBooting

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

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

詳細については、

a2boot

8 マニュアル ページを参照してください。