22. 設定のサンプル

以下は設定でよくあるパターンのサンプルです。これは単にガイドです。設定 すべきネットワークの数と同じくらい設定方法もまた存在するものです。しか し出発点を与えることにはなるでしょう。

22.1. Linux を無線 LAN へのルーターとする小規模イーサネット LAN

家庭内で小規模なローカルエリアネットワークを構築していて、そのネットワー ク上のマシンをローカルな無線LANに接続したいと考えている人は多いでしょ う。 私もこういう形態の環境を家で使っています。 経路情報が一つで済むように適当なアドレスのブロックを割当てて、それをイー サネット LAN で使っています。 あなたも同じようにしたければ、あなたの地域の IP 割当て担当者が考慮して くれることでしょう。 イーサネット LAN のアドレスは無線 LAN のアドレスのサブセットになります。 以下のネットワーク環境は実際に私が家庭内ネットワークで Linux ルーター に行なっている設定と同じです。

Note: (訳注) 以下の設定はやや特殊な例だと思います。無線 LAN とイーサネッ ト LAN のネットワークアドレスを分けて、Linux ルーター上で NAT 設定を行なう 構成がより一般的だと思います。

                                         . . . . . .
  ___               _________         .
   | Network       /         \     .    Network
   | 44.136.8.96/29|         |    .     44.136.8.0/24      \ | /
   |               | Linux   |   .                          \|/
   |               |         |  .   _____      __________    |
   |          eth0 | Router  |  .  /     \    /          \   |
   |_______________|         |_____| TNC |____|  Radio   |__/
   |   44.136.8.97 |  and    |  .  \_____/    \__________/
   |               |         | ax0
   |               | Server  | 44.136.8.5
   |               |         |   .
   |               |         |     .
   |               \_________/        .
  _|_                                    . . . . . .

#!/bin/sh
# /etc/rc.net
# ここでは KISS の AX.25 ポートを一つとイーサネットデバイス
# 一つの設定を行なう。

echo "/etc/rc.net"
echo "  Configuring:"

echo -n "    loopback:"
/sbin/ifconfig lo 127.0.0.1
/sbin/route add 127.0.0.1
echo " done."

echo -n "    ethernet:"
/sbin/ifconfig eth0 44.136.8.97 netmask 255.255.255.248 \
		broadcast 44.136.8.103 up
/sbin/route add 44.136.8.97 eth0
/sbin/route add -net 44.136.8.96 netmask 255.255.255.248 eth0
echo " done."

echo -n "    AX.25: "
kissattach -m 512 /dev/ttyS1 4800
ifconfig ax0 44.136.8.5 netmask 255.255.255.0 broadcast 44.136.8.255 up
route add -host 44.136.8.5 ax0
route add -net 44.136.8.0 window 1024 ax0

echo -n "    NET/ROM: "
nrattach -i 44.136.8.5 netrom

echo "  Routing:"
/sbin/route add default gw 44.136.8.68 window 1024 ax0
echo "    default route."
echo done.

# end

/etc/ax25/axports
# ポート名  コールサイン  ボーレート  パケット長  ウィンドウ  説明
4800        VK2KTJ-0      4800        256         2           144.800 MHz

/etc/ax25/nrports
# ポート名  コールサイン エイリアス パケット長  説明
netrom      VK2KTJ-9        LINUX   235         Linux Switch Port

/etc/ax25/nrbroadcast
# AX.25のポート名  min_obs def_qual        worst_qual      verbose
4800               1       120             10              1

22.2. IPIP カプセル化ゲートウェイの設定

Warning

この章のトンネルについての記述はいくらか賞味期限切れです。 2.0.x カーネル以降で設定方法は変わりました。 現在では Advanced Routing HOWTO で説明されている通り、iproute2 パッケー ジの「ip」コマンドを使います。

今日では Linux は TCP/IP カプセル化ゲートウェイとして世界中で非常によ く使われています。 新しいトンネルドライバーは多重カプセル化ルーティングをサポートしていま す。 これにより以前の ipip デーモンは使われることがな くなりました。

よくあるネットワーク環境としては、こんな感じになるでしょう。

                                         . . . . . .
  ___               _________        .
   | Network       /         \     .    Network
   | 154.27.3.0/24 |         |    .     44.136.16.0/24     \ | /
   |               | Linux   |   .                          \|/
   |               |         |  .   _____      __________    |
   |          eth0 | IPIP    |  .  /     \    /          \   |
___|_______________|         |_____| TNC |____|  Radio   |___/
   |   154.27.3.20 | Gateway |  .  \_____/    \__________/
   |               |         | ax0
   |               |         | 44.136.16.1
   |               |         |    .
   |               |         |     .
   |               \_________/       .
  _|_                                    . . . . . .

さて、問題の設定ファイルは以下の通りです。

# /etc/rc.net
# ここでは KISS の AX.25 無線ポートを一つとイーサーネットデバイスを一つ、
# それと IPIP カプセルの埋込み/取出しを行なうトンネルドライバーの設定
# を行なう。
#
echo "/etc/rc.net"
echo "  Configuring:"
#
echo -n "    loopback:"
/sbin/ifconfig lo 127.0.0.1
/sbin/route add 127.0.0.1
echo " done."
#
echo -n "    ethernet:"
/sbin/ifconfig eth0 154.27.3.20 netmask 255.255.255.0 \
		broadcast 154.27.3.255 up
/sbin/route add 154.27.3.20 eth0
/sbin/route add -net 154.27.3.0 netmask 255.255.255.0 eth0
echo " done."
#
echo -n "    AX.25: "
kissattach -m 512 /dev/ttyS1 4800
/sbin/ifconfig ax0 44.136.16.1 netmask 255.255.255.0 broadcast 44.136.16.255 up
/sbin/route add -host 44.136.16.1 ax0
/sbin/route add -net 44.136.16.0 netmask 255.255.255.0 window 1024 ax0
#
echo -n "    tunnel:"
/sbin/ifconfig tunl0 44.136.16.1 mtu 512 up
#
echo done.
#
echo -n "Routing ... "
source /etc/ipip.routes
echo done.
#
# end.

それから、これも。

# /etc/ipip.routes
# このファイルは munge スクリプトが作成します。
#
/sbin/route add -net 44.134.8.0 netmask 255.255.255.0 tunl0 gw 134.43.26.1
/sbin/route add -net 44.34.9.0 netmask 255.255.255.0 tunl0 gw 174.84.6.17
/sbin/route add -net 44.13.28.0 netmask 255.255.255.0 tunl0 gw 212.37.126.3
   ...
   ...
   ...

/etc/ax25/axports
# ポート名  コールサイン  ボーレート  パケット長  ウィンドウ  説明
4800        VK2KTJ-0      4800        256         2           144.800 MHz

ここで注意すべき点は以下の通り。

新しい tunnel-munge スクリプト

#!/bin/sh
#
# From: Ron Atkinson <n8fow@hamgate.cc.wayne.edu>
#
#  このスクリプトは Bdale N3EUA が IPIP デーモン用に書いた munge スク
#  リプトを元に、Ron Atkinson N8FOW が改良を加えました。このスクリプト
#  は KA9Q NOS 形式のゲートウェイ経路ファイル (通常「encap.txt」という
#  名前) を IP トンネルドライバー用に Linux のルーティングテーブル形式
#  に変換するものです。
#
#        使い方:標準入力からゲートウェイのファイルを入力すると、Linux
#                のルーティング形式のファイルが標準出力から出力される。
#               例、 tunnel-munge < encap.txt > ampr-routes
#
# 注意: このスクリプトを使う前に以下の点に注意してください。
#
#     1) 「Local routes」と「Misc user routes」の箇所はあなた自身の設
#        定に変更してください(私の設定のまま使わないで)。
#     2) fgrep の行はあなたのインターネットへのゲートウェイの IP アド
#        レスに必ず変更するようにしてください。さもなければ重大なルー
#        ティングのループが発生することがあります。
#     3) デフォルトのインターフェイス名は「tunl0」です。あなたのシステ
#        ムに合わせて変更してください。

echo "#"
echo "# IP tunnel route table built by $LOGNAME on `date`"
echo "# by tunnel-munge script v960307."
echo "#"
echo "# Local routes"
echo "route add -net 44.xxx.xxx.xxx netmask 255.mmm.mmm.mmm dev sl0"
echo "#"
echo "# Misc user routes"
echo "#"
echo "# remote routes"

fgrep encap | grep "^route" | grep -v " XXX.XXX.XXX.XXX" | \
awk '{
	split($3, s, "/")
	split(s[1], n,".")
	if	(n[1] == "")	n[1]="0"
	if	(n[2] == "")	n[2]="0"
	if	(n[3] == "")	n[3]="0"
	if	(n[4] == "")	n[4]="0"
	if	(s[2] == "1")	mask="128.0.0.0"
	else if	(s[2] == "2")	mask="192.0.0.0"
	else if	(s[2] == "3")	mask="224.0.0.0"
	else if	(s[2] == "4")	mask="240.0.0.0"
	else if	(s[2] == "5")	mask="248.0.0.0"
	else if	(s[2] == "6")	mask="252.0.0.0"
	else if	(s[2] == "7")	mask="254.0.0.0"
	else if	(s[2] == "8")	mask="255.0.0.0"
	else if	(s[2] == "9")	mask="255.128.0.0"
	else if	(s[2] == "10")	mask="255.192.0.0"
	else if	(s[2] == "11")	mask="255.224.0.0"
	else if	(s[2] == "12")	mask="255.240.0.0"
	else if	(s[2] == "13")	mask="255.248.0.0"
	else if	(s[2] == "14")	mask="255.252.0.0"
	else if	(s[2] == "15")	mask="255.254.0.0"
	else if	(s[2] == "16")	mask="255.255.0.0"
	else if	(s[2] == "17")	mask="255.255.128.0"
	else if	(s[2] == "18")	mask="255.255.192.0"
	else if	(s[2] == "19")	mask="255.255.224.0"
	else if	(s[2] == "20")	mask="255.255.240.0"
	else if	(s[2] == "21")	mask="255.255.248.0"
	else if	(s[2] == "22")	mask="255.255.252.0"
	else if	(s[2] == "23")	mask="255.255.254.0"
	else if	(s[2] == "24")	mask="255.255.255.0"
	else if	(s[2] == "25")	mask="255.255.255.128"
	else if	(s[2] == "26")	mask="255.255.255.192"
	else if	(s[2] == "27")	mask="255.255.255.224"
	else if	(s[2] == "28")	mask="255.255.255.240"
	else if	(s[2] == "29")	mask="255.255.255.248"
	else if	(s[2] == "30")	mask="255.255.255.252"
	else if	(s[2] == "31")	mask="255.255.255.254"
	else 			mask="255.255.255.255"

if (mask == "255.255.255.255")	
	printf "route add -host %s.%s.%s.%s gw %s dev tunl0\n"\
		,n[1],n[2],n[3],n[4],$5
else				
	printf "route add -net %s.%s.%s.%s gw %s netmask %s dev tunl0\n"\
		,n[1],n[2],n[3],n[4],$5,mask
 }'

echo "#"
echo "# default the rest of amprnet via mirrorshades.ucsd.edu"
echo "route add -net 44.0.0.0 gw 128.54.16.18 netmask 255.0.0.0 dev tunl0"
echo "#"
echo "# the end"

22.3. AXIP カプセル化ゲートウェイの設定

多くのアマチュア無線インターネットゲートウェイ局では TCP/IP 以外にも AX.25, NET/ROM, ROSE のカプセル化を行なっています。 IP データグラム内に AX.25 フレームをカプセル化する方法については Brian Kantor が RFC-1226 で説明しています。 Mike Westerhof は 1991 年に UNIX 用の AX.25 カプセル化デーモンの実装を 行ないました。 ax25-utils パッケージには、それを Linux 用に少し拡張したバージョンが収 録されています。 (訳注:ax25ipd は ax25-apps パッケージに含まれています)

AXIP カプセル化デーモンは一方の側で AX.25 フレームを受付けて、送り先の AX.25 アドレスからどの IP アドレスに送るべきかを判断し、そのフレームを TCP/IP のデータグラムにカプセル化し、適切なリモートホスト向け送出をし ます。 もう一方の側では AX.25 フレームを内包した TCP/IP データグラムを受付け て、そのフレームを取出し、それをまるで AX.25 ポートから直接受け取った かのように処理します。 AX.25 フレームを内包する IP データグラムを見分けるために、AXIP データ グラムはプロトコル ID として 4 を採用しています (または 94 も使われる こともありますが、これは現在では使用しないよう言われています)。 この処理の過程は RFC-1226 で説明されています。

ax25-utils パッケージに含まれるプログラム ax25ipd は AX.25 フレームをやりとりする側に対しては KISS インターフェイスを提 供します。 また TCP/IP プロトコル群に対するインターフェイスも提供します。 設定は /etc/ax25/ax25ipd.conf という名前の設定ファ イル一つだけで行ないます。

22.3.1. AXIP 設定のオプション

ax25ipd には大きく分けて二つの動作モードがありま す。 「デジピーターモード」と「TNCモード」です。 「TNCモード」ではデーモンは KISS TNC であるかのような動作をします。 つまり KISS フレームにカプセル化したパケットをデーモンに渡すと、デーモ ンはそれを送信します。 このモードが普通の設定になります。 「デジピーターモード」ではデーモンは AX.25 デジピーターであるかのよう な動作をします。 これらのモードには微妙に違う部分があります。

設定ファイルにおいては「経路」の設定、すなわち、どの宛先の AX.25 コー ルサインをどの IP アドレスのホストに送るかのマッピングを行ないます。 それぞれの経路には後で説明するオプションの項目があります。

それ以外に、ここで設定されるオプションは以下の通り:

  • ax25ipd デーモンがオープンする端末 (通常はパイプ の片方) とそのスピード。

  • 「デジピーターモード」でどのコールサインを使うか。

  • ビーコンの送出間隔とその内容。

  • AX.25 フレームを IP データグラムとしてカプセル化するか、または UDP/IP データグラムとしてカプセル化するか。 ほとんどの AXIP ゲートウェイでは IP によるカプセル化を採用していますが、 中には AXIP プロトコル ID を持つ IP パケットを認めないファイアーウォー ル内のゲートウェイなどで仕方なく UDP/IP を採用していることもあります。 どちらを選ぶ場合も接続を行なう相手方の TCP/IP ホストと一致している必要 があります。

22.3.2. /etc/ax25/ax25ipd.conf ファイルの例

#
# floyd.vk5xxx.ampr.org 用の ax25ipd 設定ファイル
#
# axip 転送方法の選択。他のゲートウェイとの互換性が必要なら「ip」とす
# ること。
#
socket ip
#
# ax25ipd の動作モードの設定。digi あるいは tnc
#
mode tnc
#
# 上で digi を選んだならコールサインを指定すること。tnc を選んだのなら
# コールサインは今のところ必須ではない。ただし将来変更されることもある。
# (デュアルポートの KISS インターフェイスには二つコールサインを指定す
# ること)
#
#mycall vk5xxx-4
#mycall2 vk5xxx-5
#
# digi モードではエイリアスを使うことができる。(デュアルポートには二つ
# 指定)
#
#myalias svwdns
#myalias2 svwdn2
#
# ID を 540 秒毎に送信。
#
#beacon after 540
#btext ax25ip -- tncmode rob/vk5xxx -- Experimental AXIP gateway
#
# シリアルポート。私の場合は kissattach に接続したパイプ。
#
device /dev/ttyq0
#
# デバイスのスピードの設定。
#
speed 9600
#
# loglevel 0 - 出力なし
# loglevel 1 - 設定情報のみ
# loglevel 2 - 重要なイベントとエラー情報
# loglevel 3 - 重要なイベントとエラー情報、および AX.25 フレームのトレース
# loglevel 4 - 全てのイベント
# 当面は log 0、syslog 経由の出力はまだ動作しない。
#
loglevel 2
#
# digi モードのとき、実際の TNC のパラメーターは param を使って行なう。
#
#param 1 20
#
# ブロードキャストアドレスの指定。ここに挙げられたアドレスへのフレーム
# は、ブロードキャスト可能とされる全ての経路に転送される。
#
broadcast QST-0 NODES-0
#
# AX.25 経路の指定。必要なだけ指定できる。
# 書式は route (コールサイン[ワイルドカード指定可能]) (相手先IP)
# SSID 0 を指定すると全ての SSID の指定と同じ。
#
# route <destcall> <destaddr> [フラッグ]
#
# 指定可能なフラッグ:
#         b  - この経路でのブロードキャストの送信を許可する
#         d  - この経路がデフォルト
#
route vk2sut-0 44.136.8.68 b
route vk5xxx 44.136.188.221 b
route vk2abc 44.1.1.1
#
#

22.3.3. ax25ipd の起動

/etc/ax25/axports のエントリーを作成:

# /etc/ax25/axports
#
axip	VK2KTJ-13	9600	256	AXIP port
#

ポートを作るために kissattach コマンドを実 行:

/usr/sbin/kissattach /dev/ptyq0 axip 44.135.96.242

ax25ipd プログラムを起動:

/usr/sbin/ax25ipd &

AXIP リンクをテスト:

call axip vk5xxx

22.3.4. route コマンドとフラッグについて、もう少し補足

route」コマンドでは AX.25 パケットをカプセル化し て送りたい相手を指定します。 ax25ipd デーモンは、そのインターフェイスからパケッ トを受信すると、送り先コールサインをルーティングテーブルのコールサイン 一つ一つと比較します。 一致するものがあれば、AX.25 パケットは IP データグラムの中にカプセル化 され、指定された IP アドレスのホスト宛に送信されます。

ax25ipd.conf ファイルの route コマンドにはそれぞれ 2 種類のフラッグを指定することができます。 それらの意味は以下の通りです。

b

キーワード「broadcast」で指定された送り先アドレスに一致す るトラフィックはこの経路を通じて送信される。

d

いずれの経路にも一致しないパケットはこの経路を通じて送信される。

ブロードキャストフラッグを使えば複数の AXIP 接続先すべてに送るようなイ ンフォメーションの送信が実現できるので、とても便利です。 普通、AXIPの経路はポイント・トゥ・ポイントであり、「ブロードキャスト」 のようなパケットは扱えないものなのです。

22.4. NOS と Linux のパイプデバイスによる接続

NOS の類を使っていたような人の多くは、以前に使っていた機能がまるごと使 えると言う理由で Linux の上でも NOS を動かしたいと思っています。 またその内の大半の人は NOS を経由して Linux の機能を無線ユーザーに解放 するために、NOS が Linux カーネルと通信できるようにしたいと考えています。

Brandon S. Allbery KF8NH は Linux マシン上で稼働している NOS がパイプ デバイスによりどうやってカーネルと双方向接続するかについての情報を寄せ てくれました。

Linux と NOS は共に slip プロトコルをサポートしていますので、slip のリ ンクを作ることによりこれらを接続することができます。 これは二つのシリアルポートをループバックケーブルにより接続することで実 現できますが、通信速度は遅いですしケーブルを購入するお金もかかります。 Linux には他の Unix-like オペレーティングシステム同様「パイプ」と呼ば れる機能があります。 これはソフトウェア側からみると通常の TTY デバイスのようで、実はもう一 方の端が別のパイプデバイスのループバックとなっている特別な仮想デバイス なのです。 このパイプを使うには、まず一つ目のプログラムがパイプのマスター 側をオープンしなければなりません。 続いて二つ目のプログラムがパイプのスレーブ側をオー プンします。 パイプの両端がオープンされると後は各プログラムは普段ターミナルデバイス に書込むのと同様に文字列をパイプに書込むことでお互いに通信することがで きます。

Linux カーネルと NOS あるいは別のプログラムを接続する上でこの機能を使 うには、まず使用するパイプを決めなければなりません。 /dev ディレクトリーを見ればパイプが見つかるでしょう。 パイプのマスター側は ptyq[1-f] という名前で、スレー ブ側は ttyq[1-f] という名前です。 これらはペアーになっていて、マスター側として /dev/ptyqf を選べばスレーブ側では /dev/ttyqf を使用することになります。

使用するパイプデバイスのペアーを選んだら、そのマスター側を Linux カー ネルに、スレーブ側を NOS プログラムに割当てます。 というのも、Linux カーネルの方が先に動いていて、パイプのマスター側は先 にオープンされなければならないからです。 また Linux カーネル側は NOS とは異なる IP アドレスを持っていなければな らないということも憶えておいてください。 もし IP アドレスをまだ割当てていなければ、重複しないアドレスを割当てる 必要があります。

ちょうどシリアルデバイスのようにパイプは扱うことができます。 つまり Linux カーネルから slip でリンクを張るには以下のようなコマンド を使います。

# /sbin/slattach -s 38400 -p slip /dev/ptyqf &
# /sbin/ifconfig sl0 broadcast 44.255.255.255 pointopoint 44.70.248.67 /
	mtu 1536 44.70.4.88
# /sbin/route add 44.70.248.67 sl0
# /sbin/route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.70.248.67

この例では Linux カーネルは IP アドレスが 44.70.4.88 であり、一方で NOS プログラムは IP アド レス 44.70.248.67 を使っています。最後の行の route コマンドは Linux カーネルに対して amprnet 宛の全てのデータグラムについて slattach コマンド で作成した slip のリンクを経由するよう指示しています。 通常、再起動時に自動的に slip リンクが作成されるよう、 /etc/rc.d/rc.inet2 の他の全てのネットワーク設定が済 んだ後にこのコマンドを付足しておきます。 注意:slip の代わりに cslip を使うことはパフォーマンスを低下させるだけで意味がありません。 リンクは仮想的なもので十分速いです。 cslip ではヘッダの圧縮を行なわなければなりませんが、 これは圧縮していないデータグラムを送信するより時間のかかることです。

リンクの NOS 側の設定を行なうには、以下のようにします。

# インターフェイスの名前は何でも構いません。
# 私は便宜上「linux」ということにしています。
attach asy ttyqf - slip linux 1024 1024 38400
route addprivate 44.70.4.88 linux

このコマンドで Linux カーネルと対になるパイプデバイスのスレーブ側に 「linux」という名前の slip ポートが作成されます。 そしてそれに対する経路を設定することで動作するようになります。 NOS を起動したら Linux マシンから NOS 宛に ping したり telnet したり、 またその逆方向もできるようになるでしょう。 もしうまくいかなかったら、設定に間違いがないかもう一度見直してください。 特に正しいアドレスを設定したかどうかや、またパイプデバイスを正しい順番 に設定したかどうか確認してください。