Linux はパワフルなオペレーティングシステムです。 そして同時に設定において多大な柔軟さを持合わせています。 この柔軟さのために、あなたがしたいと思っていることを Linux にさせるに は設定に骨を折ることでしょう。 Linux マシンが AX.25, NET/ROM, ROSE などの接続要求を受付けるように設定 するとしたら、まず考えなければならないことが山のようにあります。 とりわけ重要なことは「ユーザーが接続したら、ユーザーに何をさせたいの か?」でしょう。 接続した人にサービスを提供するようなちょっとしたアプリケーションは多くの人に よって開発されています。 シンプルなものの例を挙げれば、AX.25 ユーティリティ集に収録されている pms プログラムがあります。 ちょっと複雑なものの例を挙げれば node プログラム があります。 これも AX.25 ユーティリティ集に収録されています。 あるいはユーザーがシェルアカウントを使えるようにログインプロンプトを表 示させたいのかも知れません。 または特殊なデータベースやゲームのような、あなた自身の作ったプログラム を接続して来た人が使えるようにしたいのかも知れません。 それが何であれ、AX.25 ソフトウェアには接続要求を受付けたときに起動すべき ソフトウェアが何であるかを教えておかなければなりません。
ax25d プログラムは UNIX マシンへの TCP/IP 接続要 求を受付けるのによく使われている inetd プログラム に似ています。 このプログラムは起動されると待機しながら接続要求を待受けます。 接続要求があるとどのプログラムを起動すべきかを調べるために、設定ファイ ルを読みます。 そしてそのプログラムへと接続を渡します。 このプログラムが AX.25, NET/ROM, ROSE などの接続を受付ける標準のツール なので、これからその設定の仕方について説明しましょう。
このファイルは AX.25, NET/ROM, ROSE などの接続要求を受付ける AX.25 デー モン ax25d の設定ファイルです。
一見このファイルの中身は呪文のようですが、実際はとてもシンプルであるこ とに気付くでしょう。 ですが、気をつけるべきちょっとした落し穴もあります。
ax25d.conf ファイルの一般的な書式は以下の通りです。
# この行はコメント。ax25d プログラムは無視します。 [ポート名] || <ポート名> || {ポート名} <ピア1> window T1 T2 T3 idle N2 <モード><uid><コマンド> <コマンド名> <引数> <ピア2> window T1 T2 T3 idle N2 <モード> <uid><コマンド> <コマンド名> <引数> parameters window T1 T2 T3 idle N2 <モード> <ピア3> window T1 T2 T3 idle N2 <モード> <uid><コマンド> <コマンド名> <引数> ... default window T1 T2 T3 idle N2 <モード> <uid> <コマ ンド> <コマンド名> <引数> |
ここで
行の最初にある#はコメント。 ax25d プログラムは完全に無視する。
/etc/ax25/axports, /etc/ax25/nrports, /etc/ax25/rsports ファイルでそれぞれ指定された AX.25, NET/ROM, ROSE 各ポートの名称。 AX.25 ポートの場合、ポートの名前は [] で囲まれ、 NET/ROM ポートの場合、ポートの名前は <> で囲 まれ、ROSE ポートの場合、ポートの名前は {} で囲まれる。 この項目にはまた別の書き方が存在する。 それはポート名の頭に「SSID 付きコールサイン via」を つけるもので、これはこのインターフェイスから指定した SSID 付きコールサ インへの呼出を受付けることを明示するものである。 後の例を見ればより分かりやすいだろう。
この設定が適用される相手のコールサイン。 SSID を指定しなければ全ての SSID にマッチする。
この設定での AX.25 の window (K) パラメーター。 つまり MAXFRAME パラメーター。
フレームの再送信タイマー (T1)。単位は 0.5 秒。
AX.25 機能が返事を送信する前に、次のフレームの到着を待つための時間。 単位は秒。
ここで指定された時間、何も通信がなければ、AX.25 機能は接続を切る。 単位は秒。
アイドルタイマー。単位は秒。
一回の送信あたり連続して実行する再送信回数。 この値を越えた場合、接続を切る。
モードは大まかな接続許可の形態を判別する仕掛けを提供する。 それぞれが許可の形態を表す文字を組合わせることで接続の可否を表す。 この文字列は大文字または小文字のどちらかで、空白を含まない単一のブロッ クでなければならない。
UTMP。現在はサポートされない。
コールサインの正しさをチェック。現在はサポートされない。
接続をログに書込まない。quiet。
NET/ROM 隣接ノードを調べる。現在はサポートされない。
デジピーターを不許可。直接の接続のみ許可する。
接続を許可しない。lockout。
単なるマーカー。モードは設定されない。
接続を受けるために起動されるプログラムのユーザー ID。
起動されるコマンドのフルパス名。引数は指定しない。
ps コマンドなどで実行中のコマンドとして表示される 名前。 (通常は<コマンド>と同じはず。ただしパス情報は含まれていない。)
<コマンド>の起動時に渡されるコマンドライン引数。以下の変数を使え ば引数として便利な情報を渡すことができる。
接続要求を受信したポート名。
接続したユーザーの SSID を含まないコールサイン。大文字。
接続したユーザーの SSID を含まないコールサイン。小文字。
接続したユーザーの SSID を含むコールサイン。大文字。
接続したユーザーの SSID を含むコールサイン。小文字。
接続要求を送ってきたリモートノードの SSID を含まないコールサイン。大文字。
接続要求を送ってきたリモートノードの SSID を含まないコールサイン。小文字。
接続要求を送ってきたリモートノードの SSID を含むコールサイン。大文字。
接続要求を送ってきたリモートノードの SSID を含むコールサイン。小文字。
接続要求を受け付けたい AX.25, NET/ROM, ROSE それぞれのインターフェイス について上のような書式で書込む必要があります。
上の例には特別な行が二つあります。一つは 「parameters」で始まる行、もう一つは 「default」で始まる行です (え?違うのかって?違うん ですよ)。この二つの行には特別な意味があります。
「default」の行の意味は明らかでしょう。 この行は呼出のあったインターフェイスでの特別な条件にマッチしない全ての 接続要求を拾う役割をします。 「default」がなければ、特別な条件にマッチしない接続 要求は全て何の警告もなく即座に蹴られます。
「parameters」の行はやや分かりにくいです。 これこそが以前に私が落し穴と呼んだものです。 ピアを定義している箇所のどの項目でも「デフォルト値を使う」ことを宣言す るために「*」を使うことができます。 「parameters」行はそれらのデフォルト値を設定するも のです。 カーネル自身はあなたが「parameters」行を使って値を 指定しなかったときに使われるデフォルトの値を持っています。 ただし、そういったデフォルト値は「parameters」行よ り下にある条件にだけ適用され、 上にある条件には適用されないのです。 これぞ落し穴です。 各インターフェイスの定義毎に複数の「parameters」行 を書いても構いません。 こうすればデフォルト設定でグループ分けすることができます。 「parameters」行では「uid」や 「command」といった項目の設定はできないようになって いるので注意してください。
では、分かりやすい例を見てみましょう。
# ax25d.conf for VK2KTJ - 02/03/97 # この設定ファイルはあらかじめ定義された AX.25 ポートを使用する # <peer> Win T1 T2 T3 idl N2 <mode> <uid> <exec> <argv[0]>[<args....>] [VK2KTJ-0 via radio] parameters 1 10 * * * * * VK2XLZ * * * * * * * root /usr/sbin/axspawn axspawn %u + VK2DAY * * * * * * * root /usr/sbin/axspawn axspawn %u + NOCALL * * * * * * L default 1 10 5 100 180 5 * root /usr/sbin/pms pms -a -o vk2ktj [VK2KTJ-1 via radio] default * * * * * 0 root /usr/sbin/node node <netrom> parameters 1 10 * * * * * NOCALL * * * * * * L default * * * * * * 0 root /usr/sbin/node node {VK2KTJ-0 via rose} parameters 1 10 * * * * * VK2XLZ * * * * * * * root /usr/sbin/axspawn axspawn %u + VK2DAY * * * * * * * root /usr/sbin/axspawn axspawn %u + NOCALL * * * * * * L default 1 10 5 100 180 5 * root /usr/sbin/pms pms -a -o vk2ktj {VK2KTJ-1 via rose} default * * * * * 0 root /usr/sbin/node node radio |
「radio」という名前の AX.25 ポートでコールサイン 「VK2KTJ-0」に接続しようとするユーザーは、この例で は以下のような条件が適用される。
コールサインが「NOCALL」である者は接続を許可しない。 モード「L」が使われていることに注目。
parameters 行がカーネルのデフォルトから二つのパラメー ター (Window と T1) を変更しています。 そして接続してきたユーザーに対して /usr/sbin/axspawn プログラムを実行します。 こうして起動された /usr/sbin/axspawn のコピーは ps などで見ると分かりやすいように axspawn と表示されます。 その次の 2 行はこの実行許可を与える 2 局の定義です。
この段落の最後の行はそれ以外の者 (VK2XLZ も VK2DAY も SSID が -1 以外 であれば含まれる) を「拾う」ための定義です。 この行ではパラメーターを設定して、pms プログラム をコマンドライン引数つきで起動します。 引数の意味は、このプログラムが AX.25 の接続されている間実行され、その オーナーのコールサインは VK2KTJ である、というもの です。 (詳細は後述の「PMS の設定」という章を参照してください)
その次にある設定は「radio」ポート経由の VK2KTJ-1 への呼出を受付けるものです。 この行では接続したユーザー全員に対して node プロ グラムを実行するようになっています。
その次は NET/ROM の設定です。 角括弧ではなく不等号記号が使われていることに注目ください。 これが NET/ROM の設定であることを表します。 ここでの設定はかなりシンプルです。 「netrom」という名前の NET/ROM ポートに接続する者に はコールサインが「NOCALL」でない限り node プログラムを実行することになります。 コールサインが「NOCALL」であれば接続は拒否されます。
最後の二つの設定は ROSE の接続要求のための設定です。 最初の段落はこの ROSE ノードアドレスの「VK2KTJ-0」 に対する呼出のための設定で、二つ目の段落は同じく 「VK2KTJ-1」に対する呼出のための設定です。 この 2 行の動作はまったく同じものです。 ROSE ポートであることを表すために中括弧を使うことに注意してください。
この例は試行錯誤の結果たどり着いたものですが、設定ファイルの文法の重要 な点について分かりやすく示していると思います。 設定ファイルについては ax25d.conf の man ページに詳しく説明されています。 より詳細なサンプルが ax25-utils パッケージに含まれ ています。(訳注:ax25d および設定のサンプルは ax25-tools パッケージに 含まれています) これも参考になるでしょう。
設定ファイルの編集が終われば、ax25d を起動しましょう。
# /usr/sbin/ax25d |
このプログラムが起動していると、あなたの Linux マシンに AX.25 で接続で きるようになるはずです。 システムの再起動時に自動的に起動するよう rc に ax25d コマンドを追加しておきましょう。