IPSMを使うためにFreeBSDなどをインストールするために作ったマニュアルですが、一般的なネットワークの設定なども入っているので公開します。(ただし修正の途中です)
作成:1998年10月20日 JK1MLY・稲葉
新たな高速パケット通信として期待されるPRUG96プロジェクトにて、試作されたハードウェアとソフトウェアを使うためのドキュメントの1つです。
非ノートタイプのAT互換機にFreeBSD 2.2.7Rをインストールし、IPSMとPFWLとRNAVIを動かすまでの方法をまとめてあります。PCカードのLANカードなどを使用しても動かすことは可能ですが、幾つかの設定が異なるため本ドキュメントではサポートしません。
無線など複数の中継経路から適した経路を探索するシステムをAPFSと呼び、これを実現するためのソフトウェアとしてRNAVIが動きます。また無線機とのデータの受け渡しをするのがPFWLになります。システムの動作に関しては別にドキュメントがあるので、そちらを参照して下さい。
下記に示したような一般的なAT互換機に、FreeBSD 2.2.7RをCD-ROMからインストールすることを前提に、本ドキュメントは書いています。他の環境でも動作可能ですのが、設定の一部などが異なる可能性があります。またLinuxに関してはPFWLとRNAVIを動かすことを別のドキュメントとして用意しています。
PC仕様
CPU:K6-2-300M
RAM:128M
HDD:2G
CD-ROM:ATAPI
Ether:NE2000互換(ed1として検出)
略語
IPSM:IP Shield Machineの略(ハードウェア)
PFWL:Packet Forward for WireLess linkの略(ソフトウェア)
RNAVI:Route NAVIgatorの略(ソフトウェア)
APFS:Asymmetric Path Finding Systemの略(システム)
記述
赤い文字・・・各自の設定で異なる入力
イタリック・・コマンドラインからの入力
--
このシステムはネットワークを構成する時に使うことになりますが、この時にIPアドレスと呼ばれるものが必要になります。このIPアドレスというのはネットワーク内で、論理的にパソコンなどを識別するのに使う4バイト」の番号で、各バイトをピリオドで区切って10進数で示します。
このIPアドレスはIPアドレスを管理してる団体から正式に取得するか、下記に示すプライベートアドレスと呼ばれる中から使用することになります。後者の場合にはインターネットに対して直接に接続せず、また実験を行う組織のネットワーク内で問題が無ければ自由に使用できます。
プライベートアドレス
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
現在PRUGで使用しているプライベートアドレスは下記URLを参考にして下さい。
http://www.jouban.prug.or.jp/exp/%7Ekazu/Amprnet/private.html
本ドキュメントでは制御するIPSMが1台の場合の例として、以下のようなIPアドレスを割り振っています。
接続するネットワーク
172.16.114.0
設定するマシン
172.16.114.101
接続するIPSM
172.16.114.102
APFSルータ
192.168.41.100
設定するマシンのトンネル
192.168.41.101
--
以下の例は他のOSとの共存などは行わない設定ですので、必要なデータが入ったPCなどは使用しないで下さい。
インストールの概略は以下の通りですが、FreeBSDをインストールことの無い方は、入門書などを見ながら作業する方が良いでしょう。
・CD-ROMに含まれるファイルからブート用のフロッピーを作成します。
・フロッピーからブートします。
・Kernel Configuration Menuはskipを選択します。
(IRQの設定などが必要な場合を除く)
・インストール方法はNoviceを選択します。
・FDISKの設定はAを入力して全てをFreeBSD(165)に割り振ります。
・BootMgrを選択します。
・Disklabel Editorの設定はAを入力して自動的に割り振ります。
・Choose Distributionsでkern-Developerを選択します。
・Do wish to install DES..はNOで次に進みます。
・ports collectionはNOで次に進みます。
・Choose Distributionsでcustomを選択し内容を確認します。
(CD-ROMからインストール)
・イーサネットの設定を行います。
・時計の設定を行います。
・IP gatewayは行うを選択します。
・groupおよびuserを作ります。
・rootのパスワードを設定します。
・全部の設定が終了したらフロッピーを抜いてリブートします。
・/stand/sysinstallを起動します。
・4枚目のCD-ROMを入れて下記のpackageのインストールします。
netの下にあるisc-dhcp2.1.1.tgz
--
pfwldはトンネルデバイスを使用して通信を行うため、トンネルデバイスがカーネルに組み込まれている必要があります。このため場合によってはカーネルを再構築する必要があります。概略は以下の通りですが、カーネルを作り直したことの無い方は、入門書などを見ながら作業する方が良いでしょう。
トンネルデバイスは、キャラクタデバイスへの入出力をネットワークデバイスの出入力と見なし、 あたかもネットワークインターフェイスカードのように処理します。
トンネルデバイスが使えるようにするため、カーネルの設定ファイルがあるディレクトリ/usr/src/sys/i386/confに移動します。ここにある現在の設定ファイルをコピーして、新しい設定ファイル(以下<NEW_KERNEL>、以下の例ではPRUG96)を作ります。
cd /usr/src/sys/i386/conf cp GENERIC PRUG96 vi PRUG96
ファイルをviなどのエディタで開きますと、終わりの方にあるpseudo-deviceの設定があります。この中に下記のデバイスが含まれるか確認して下さい。
pseudo-device tun 4
上記の例では4つのトンネルデバイスが使用可能ですが、IPSMを使って通信するのみなら1でも大丈夫ですが、IIJ-PPPなどを使用しますと足りなくなります。また以後の設定でtun1を使用していますので、本マニュアルと同一の設定にするためには4として下さい。
pfwldの使用には関係ありませんが、通信しているパケットをモニタするためと、dhcpを使用するため、下記のデバイスが含まれるかも確認して下さい。
pseudo-device bpfilter 4
dhcpd が 1個、tcpdump で1個なので2以上であれば大丈夫です。以上で設定ファイルPRUG96の設定は終了です。
ついでに不要なドライバなどを削除しておくと、カーネルのサイズを小さくできます。またイーサネットカードのIRQなども必要に応じて変更しておくと良いでしょう。
設定ファイルの一部(例)
pseudo-device loop pseudo-device ether pseudo-device log pseudo-device sl 1 pseudo-device bpfilter 4 #pseudo-device ppp 1 pseudo-device tun 4 pseudo-device pty 16 pseudo-device gzip pseudo-device vn
次にカーネルをコンパイルしますが、作成の手順は次のようになります。
config PRUG96
(PRUG96に新しい設定ファイルを指定して下さい)
cd ../../compile/PRUG96
(ディレクトリPRUG96はconfigを実行した時に作られます)
make depend make
(使用するPCの性能により時間が必要な場合があります)
make install
(もし正常に動きませんと困るので、古いカーネルは消さないで下さい)
以上で新しいカーネルが作られたので、リブートして新しいカーネルが動くことを確認して下さい。途中でエラーなどが発生した場合には、入門書やhttp://www.jp.freebsd.org/などを参考にして下さい。もし再起動ができなかったらboot:と出たところで、kernel.oldと入力して古いカーネルで立ち上げて下さい。
新たに作ったデバイスが使えるよう、下記のようにディレクトリ/devに移動し、MAKEDEVを実行して下さい。
cd /dev sh MAKEDEV tun1 sh MAKEDEV tun2 sh MAKEDEV tun3 sh MAKEDEV bpf1 sh MAKEDEV bpf2 sh MAKEDEV bpf3
たぶん作成済みですが、もし必要なら下記も実行して下さい。
sh MAKEDEV tun0 sh MAKEDEV bpf0
正しく作成されていれば、lsコマンドで見ることができます。
ls -l /dev/tun* ls -l /dev/bpf*
イーサネットカードのIRQなどがコンパイルした値と異なる時には、boot:と出たところで-cと入力しますと設定用のユーティリティが動きます。表示される指示に従ってパラメータを変更して下さい。
--
pfwldを動かすマシンのホスト名やIPアドレスを、下記を参考に/etc/rc.confに設定します。赤い文字の部分は各々で合わせて下さい。
/etc/rc.confの一部
### Basic network options: ### hostname="ina.jk1mly.prug.net"
・・・ホスト名をinaに設定
ドメイン名をjk1mly.prug.netに設定
nisdomainname="NO" firewall="NO" tcp_extensions="YES" network_interfaces="lo0 ed1"
・・・ループバックとイーサネットカードを使用
ifconfig_lo0="inet 127.0.0.1" ifconfig_ed1="inet 172.16.114.101 netmask 255.255.255.0"
・・・172.16.114.101にIPアドレスを設定
ネットマスクを255.255.255.0に設定
### Network routing options: ### defaultrouter="NO"
・・・デフォルトルータは特に指定し無し
static_routes="ed1"
・・・ed1を使った固定ルーティング
route_ed1="-net 224.0.0.0 -iface ed1"
・・・マルチキャストをed1に出力
一般的なマルチキャスト(1対多の送信)用の IP アドレス 224.0.0.1 サブネット上の全てのホスト 224.0.0.2 サブネット上の全てのルータ 224.0.0.4 すべての DVMRP ルータ 224.0.0.5 すべての OSPF ルータ 224.0.0.9 すべての RIP2 ルータ 224.0.0.13 すべての PIM ルータ 224.0.0.14 すべての CBT ルータ 224.0.1.1 Network Time Protocol (NTP) gateway_enable="YES"
・・・IPでのゲートウェイを可能
--
通信を行うホストやネットワークのIPアドレスは、/etc/hostsおよび/etc/networksに記述しますが、今回はDNSを使用するので、ファイルhostsには設定中の1台を加えるのみとします。赤い文字の部分は各々で合わせて下さい。
もしDNSを使用しない時には、/etc/host.confに含まれるbindの行を#でコメントアウトしておく必要があります。この場合には本マニュアルの設定方法と異なることになります。
/etc/hostsの例
127.0.0.1 localhost.prug.tama.or.jp localhost 172.16.114.101 ina.jk1mly.prug.net ina
・・・IPアドレス,ホスト名,別名の順で記述
--
pfwldはRIPV2に対応しており、無線回線の状態に合わせたルーティングを、実現することが可能です。これはroutedあるいはgatedのようなプログラムにより、ルーティングテーブルと呼ばれる経路情報を更新することで、自動的に利用可能な経路から選択します。
RIPは動的にルーティング情報を伝達する技術で、RIPV2ではサブネットマスクも同時に送ります。
このシステムを使った区間だけに限った経路の制御であれば、rnavidにより自動的に通信可能な経路が選択され、AX25などを用いた別の経路が存在しない場合には動かさなくても良いですが、今後を考えてroutedを動かすものとします。
FreeBSDの場合には既にroutedが入っており、/etc/rc.confにてrouter_enable="YES"にしますと、起動時にroutedが自動的に動きます。また幾つかのオプションを指定することも可能です。
/etc/rc.confの一部
### Network routing options: ### router_enable="YES"
・・・自動的に経路制御を実施
router="routed"
・・・routedをルータに使用
router_flags="-s"
・・・強制的にルーティング情報を教える
またripv2だけを使用したいので、/etc/gatewaysにて指定を行います。
/etc/gatewaysの例
if=tun1 ripv2 if=ed1 ripv2
もし全てをダイナミックなルーティングにしたくない場合もあるかと思いますが、その時には/etc/gatewaysに経路情報を書くことで起動時に読み込ませることができます。詳しくはman routedとしてマニュアルを見て下さい。
--
IPSMに対するIPアドレスの自動割り当てや、IPSMのファームウェアを転送するために、DHCPと呼ばれる機能を利用します。ここで設定する内容によりWindows95やMacintoshなどのパソコンを接続する場合、ネットワークの設定を自動化させることなどが可能になります。赤い文字の部分は各々で合わせて下さい。
既にFreeBSDのインストール時に、pkg_addによりisc-dhcpが組み込まれてますので、下記のような設定ファイルを作成するのみとなります。この設定はisc版のdhcpを利用した場合でありwide版では異なるので注意して下さい。
FreeBSD2.2.7Rでは4枚目のCD-ROMを入れて、/packages/net/isc-dhcp2.b1.1.tgzをインストールして下さい。
/etc/dhcpd.confの例
subnet 172.16.114.0 netmask 255.255.255.0 {
・・・規定するアドレスの範囲を指定
range 172.16.114.230 172.16.114.239;
・・・自動的に割り振るアドレスの範囲を指定
(他のパソコンなどに割り当てるアドレス)
default-lease-time 43200;
・・・使用可能な時間を秒で指定
max-lease-time 86400;
・・・使用可能な最大時間を秒で指定
option subnet-mask 255.255.255.0;
・・・サブネットマスク
option broadcast-address 172.16.114.255;
・・・ブロードキャストアドレス
option routers 172.16.114.101;
・・・デフォルトルート
option domain-name-servers 172.16.114.101;
・・・DNSのIPアドレス
option domain-name "jk1mly.prug.net";
・・・ドメイン名
}
・・・ここまではアドレスを自動的に割り振らない場合には不要です
host ipsm1 {
・・・固定的な設定
hardware ethernet 00:60:52:05:c8:d7;
・・・IPSMのMACアドレス
fixed-address 172.16.114.102;
・・・決まったIPアドレスを割り振る
filename "/tftpboot/ssipsm.v1.36.bin";
・・・起動時に送るファイルの指定
(実際のファイル名に合わせる)
option subnet-mask 255.255.255.0;
・・・サブネットマスク
option broadcast-address 172.16.114.255;
・・・ブロードキャストアドレス
option routers 172.16.114.101;
・・・デフォルトルート
}
dhcpが使用しているIPアドレスなどの情報を格納するため、下記のコマンドでディレクトリ/var/dbに、ファイルdhcpd.leasesを作ります。
touch /var/db/dhcpd.leases
--
ファイルの転送方法としてtftpが使用できるようにする必要があります。/etc/inetd.confファイルを開き、下記のようなtftpdに関する記述があるか確認し、無い場合には設定を追加します。 設定の詳細はman inetd.confやman tftpdなどを見て下さい。実際にはコメントアウトされているだけなので、#を取るだけになると思います。
<inetd.confの一部>
tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /tftpboot
次にディレクトリ/tftpbootを作り、起動時に転送するIPSMのプログラムssipsm.v1.36.binをコピーします。ssipsm.v1.36.binは、船田さんのページから入手できます。
mkdir /tftpboot cp ssipsm.v1.36.bin /tftpboot
--
DNSを使用するには幾つかの設定が必要ですが、このうち今回の実験で必要な部分のみを以下に示します。ここに示す以外のなどはman namedにて確認して下さい。
ホスト名からIPアドレスを解決する時の手段として、dnsの答え->hostsファイルの順になるよう、/etc/host.confを設定します。
/etc/host.conf
# Default is to use the nameserver first bind # If that doesn't work, then try the /etc/hosts file hosts # If you have YP/NIS configured, uncomment the next line # nis
FreeBSDの場合には既にnamedが入っており、/etc/rc.confにてnamed_enable="YES"にしますと、起動時にnamedが自動的に動きます。
/etc/rc.confの一部
### Network daemon (miscellaneous) & NFS options: ### named_enable="YES" # Run named, the DNS server (or NO). named_program="/usr/sbin/named" # named program, in case we want bind8 instead. named_flags="-b /etc/namedb/named.boot" # Flags to named (if enabled).
DNSの機能を使うための設定として、ネームサーバのアドレスなどを、/etc/resolv.confに書きます。赤い文字の部分は各々で合わせて下さい。
/etc/resolv.confの例
domain jk1mly.prug.net
・・・ドメイン名を指定
nameserver 127.0.0.1 ・・・ネームサーバのアドレスを指定
(後ろに続けて書くとセカンダリが指定できる)
起動するネームサーバの動作を/etc/namedb/named.bootに書きます。
/etc/namedb/named.bootの例 directory /etc/namedb
・・・データを記述したファイルを置くディレクトリ
cache . named.root
・・・キャッシュ
primary localhost localhost.zone
・・・ループバックの正引き
primary 0.0.127.IN-ADDR.ARPA localhost.rev
・・・ループバックの逆引き
primary jk1mly.prug.net jk1mly.zone
・・・自ドメイン内の正引き
primary 114.16.172.IN-ADDR.ARPA jk1mly.rev ・・・自ドメイン内の逆引き
ルートネームサーバの指定を/etc/namdb/named.rootに書きます。
/etc/namdb/named.rootの例
. 3600000 IN NS localhost. localhost. 3600000 A 127.0.0.1 インターネットに接続しているなら、もともと下記のような設定が書かれているので、そのままにして下さい。 ; formerly NS.INTERNIC.NET ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 (以下略)
正・逆引きに使う情報の記述をします。
/etc/namdb/jk1mly.zoneの例
@ IN SOA dns.jk1mly.prug.net. admin.jk1mly.tama.prug.or.jp. (
・・・primaryであることと連絡先を示す
1998052900 ;Serial
・・・変更したら必ず大きな値に直す
3600 ;Refresh 900 ;Retry 3600000 ;Expire 3600 ) ;Minimum jk1mly.prug.net. IN NS dns.jk1mly.prug.net.
・・・jk1mly.prug.netのネームサーバ
jk1mly.prug.net. IN MX 10 po.jk1mly.prug.net.
・・・メールを送るホスト
mly-net.prug.net. IN A 172.16.114.0 ina.jk1mly.prug.net. IN A 172.16.114.101 ipsm1.jk1mly.prug.net. IN A 172.16.114.102
・・・正引きの指定
po.jk1mly.prug.net. IN CNAME ina.jk1mly.prug.net. dns.jk1mly.prug.net. IN CNAME ina.jk1mly.prug.net. ・・・別名の指定
/etc/namdb/jq1vie.revの例
@ IN SOA dns.jk1mly.prug.net. admin.jk1mly.prug.net. (
・・・primaryであることと連絡先を示す
1998052500 ;Serial
・・・変更したら必ず大きな値に直す
10800 ;Refresh 1800 ;Retry 3600000 ;Expire 259200 ) ;Minimum 114.16.172.in-addr.arpa. IN NS dns.jk1mly.prug.net.
・・・172.16.114.xxのネームサーバ
0.114.16.172.in-addr.arpa. IN PTR mly-net.jk1mly.prug.net. 101.114.16.172.in-addr.arpa. IN PTR ina.jk1mly.prug.net. 102.114.16.172.in-addr.arpa. IN PTR ipsm1.jk1mly.prug.net.
・・・172.16.114.xxの逆引き
/etc/namdb/localhost.zoneの例
@ IN SOA dns.jk1mly.prug.net. admin.jk1mly.prug.net. ( 1998091500 ;Serial 10800 ;Refresh 1800 ;Retry 3600000 ;Expire 259200 ) ;Minimum localhost. IN NS localhost. localhost. IN A 127.0.0.1
/etc/namdb/localhost.revの例
@ IN SOA dns.jk1mly.prug.net. admin.jk1mly.prug.net. ( 1998091500 ;Serial 10800 ;Refresh 1800 ;Retry 3600000 ;Expire 259200 ) ;Minimum 0.0.127.in-addr.arpa. IN NS localhost. 1.0.0.127.in-addr.arpa. IN PTR localhost.
--
IPSMに使用するNE2000互換イーサネットカードのMACアドレスを知る必要があります。このため下記の方法により情報を得て下さい。
MACアドレスを含めてイーサネットをモニタするため、tcpdumpコマンドに-eオプションを使用します。
tcpdump -i ed1 -e
上の例にあるed1 はデバイス名の一例なので、IPSMを接続するportに使用するデバイスを指定して下さい。
次にIPSMの電源を入れますとbootpのためのpacketが流れ、これが下記の例のようにtraceされます。
22:35:37.525446 0:60:52:5:c8:d7 Broadcast ip 370: 0.0.0.0.bootpc > 255.255.255.255.bootps: [|bootp]
この中にある0:60:52:5:c8:d7の部分が、IPSMのMACアドレスになるのでメモしておきます。あとでdhcpの設定を行う際に使用します。
IPSMの動作が確実でない場合には、一時的にPCに実装して調べる方が良いかもしれません。IPSMが動いていれば、電源を入れた時にイーサネットカードのLEDが点滅し、通信するのが分かるかと思います。イーサネットカードに送信/受信LEDがないものもありますが、その時にはHUBのLEDなどを代わりに見て下さい。
--
pfwld-1.40.tar.gzとrnavid-1.40.tar.gz入手し、これらをtarコマンドによって展開し、コンパイルして作ったpfwldとrnavidを使用します。
pfwld-1.40.tar.gzとrnavid-1.40.tar.gzを、PRUGのftpサーバなどから入手します。PRUGのサーバの場合には/pub/hamradio/PRUG96/APFS/にあります。
入手したファイルを下記のコマンドにより展開します。
tar xvfz pfwld-1.40.tar.gz tar xvfz rnavid-1.40.tar.gz
これによりPFWLDとRNAVIDという2つのディレクトリができます。
次にpfwldとrnavidをコンパイルします。コンパイルは各々のディレクトリでmakeするのみです。
cd PFWLD make cd ../RNAVID make cd ..
でき上がったバイナリpfwldとrnavidは、ディレクトリ/usr/local/sbinにコピーしておきます。
cp PFWLD/pfwld /usr/local/sbin cp RNAVID/rnavid /usr/local/sbin
--
pfwld-1.40.tar.gzおよびrnavid-1.40.tar.gzを展開して得られたファイルに、設定例としてファイルpfwld.conf-sampleとrnavid.conf-sampleが含まれてます。これをディレクトリ/etcの下にコピーし、書き込みが可能なようにした後に、viなどのエディタで設定ファイルpfwld.confとrnavid.confを編集して、使用する環境に合わせて下さい。
cp PFWLD/pfwld.conf-sample /etc/pfwld.conf cp RNAVID/rnavid.conf-sample /etc/rnavid.conf cd /etc chmod 644 pfwld.connf chmod 644 rnavid.conf
各項目の設定内容は下記のようになります。
/etc/pfwld.confの例
# sample server configuration for FreeBSD pfwl:sa=192.168.41.200:da=192.168.41.201:dev=tun1: ipsm:un=0:ha=172.16.114.102:sid=PRUG96-0:bw=808000:
sa=192.168.41.200・・・トンネルの入口側アドレスまたはホスト名
da=192.168.41.201・・・トンネルの相手先アドレスまたはホスト名
ha=172.16.114.102・・・IPSMのIPアドレスまたはホスト名
dev=tun1・・・トンネルデバイスのデバイス名
sid=PRUG96-0・・・無線で使用するコールサイン
bw=808000・・・使用する無線回線の伝送速度
複数のIPSMを接続する場合には、pfwl行にその数を追加すると共に、ipsm行を追加して下さい。下記は2台の例です。
pfwl:sa=192.168.41.200:da=192.168.41.201:dev=tun1:cl=2: ipsm:un=0:ha=172.16.114.102:sid=PRUG96-0:bw=808000: ipsm:un=1:ha=172.16.114.103:sid=PRUG96-1:bw=808000:
/etc/rnavid.conf
rip:mi=4:mo=4: local:da=192.168.41.200:nm=255.255.255.254:
da=192.168.41.200・・・経路情報として流すネットワークアドレスの指定
nm=255.255.255.254・・・IPSMとの通信に使用するネットワークのネットマスク
mi=4・・・metricが4以上の経路情報は無視
mo=4・・・metricを4として経路情報を出力
local 行は複数設定できますので、routed 等を動かさない場合は自分がアナウンスすべきネットワークを登録する事により、他のネットワークへの gateway が可能となります。例えば上記に加えて下記のlocal行を書くと、172.16.114.0/24のネットワークに対する、固定的なルーティングとなります。
local:da=172.16.114.0:nm=255.255.255.0:
--
起動時にディレクトリ/usr/local/etc/rc.dにあるコマンドは自動的に動作するので、dhcpd,pfwld,rnavidが立ち上げ時に自動的に動き始めるよう、下記のようなファイルを作ります。
dhcpd.shの例
#!/bin/sh /usr/local/sbin/dhcpd
pfwld.shの例
#!/bin/sh /usr/local/sbin/pfwld
rnavid.shの例
#!/bin/sh /usr/local/sbin/rnavid
これらのファイルが実行できるよう、chmodコマンドで属性を変更しておきます。
chmod 755 dhcpd.sh chmod 755 pfwld.sh chmod 755 rnavid.sh
--
netstatコマンドで相手局へのルーティングが正しいか確認できます。
<実行例>
% netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 127.0.0.1 UH 3 401 lo0 172.16.113/24 192.168.41.201 UGc 0 183 tun1 172.16.114/24 link#1 UC 0 0 172.16.114.101 0:90:cc:a0:1d:e3 UHLW 0 4 lo0 172.16.114.102 0:60:52:5:c8:d7 UHLW 0 200 ed1 1081 192.168.41.100/31 192.168.41.201 UGc 0 0 tun1 192.168.41.200 127.0.0.1 UH 0 0 lo0 192.168.41.201 192.168.41.200 UH 3 0 tun1 203.139.10.176/29 192.168.41.201 UGc 0 0 tun1 224/8 link#1 UCS 0 0 224.0.0.1 1:0:5e:0:0:1 UHLW 1 4 ed1 224.0.0.2 1:0:5e:0:0:2 UHLW 0 2 ed1 224.0.0.9 1:0:5e:0:0:9 UHLW 2 27 ed1
pingコマンドで相手局と通信できることが確認できます。
<実行例>
% ping -c 3 172.16.113.101
・・・172.16.113.101(相手)に対して3回チェック
PING 172.16.113.101 (172.16.113.101): 56 data bytes 64 bytes from 172.16.113.101: icmp_seq=0 ttl=253 time=102.661 ms
・・・172.16.113.101(相手)から約100msで返事がきた
3 packets transmitted, 3 packets received, 0% packet loss
・・・パケットの送信を3回して全てに返事がきた
--
通信できないときには順にトレースしてみましょう。tcpdump -i ed1 -eとしておき、IPSMの電源を入れると、下記のようにbootpが動いてIPSMにデータを送り始めます。現れる数値やホスト名は違うでしょうが、同じような通信がモニタできればIPSMの立ち上げは正常と考えて良いでしょう。
<tcpdumpによるモニタ例>
22:35:37.525446 0:60:52:5:c8:d7 Broadcast ip 370: 0.0.0.0.bootpc > 255.255.255.255.bootps: [|bootp] 22:35:37.526692 0:90:cc:a0:1d:e3 0:60:52:5:c8:d7 ip 342: ina.jk1mly.prug.net.bootps > 255.255.255.255.bootpc: Y:ipsm1.jk1mly.prug.net S:ina.jk1mly.prug.net [|bootp] [tos 0x10] 22:35:39.709587 0:60:52:5:c8:d7 Broadcast arp 64: arp who-has ina.jk1mly.prug.net tell ipsm1.jk1mly.prug.net 22:35:39.709629 0:90:cc:a0:1d:e3 0:60:52:5:c8:d7 arp 64: arp reply ina.jk1mly.prug.net is-at 0:90:cc:a0:1d:e3 22:35:40.031442 0:60:52:5:c8:d7 0:90:cc:a0:1d:e3 ip 77: ipsm1.jk1mly.prug.net.tftp > ina.jk1mly.prug.net.tftp: 35 RRQ "/tftpboot/ssipsm.v1.36.b" [|tftp] 22:35:40.087267 0:90:cc:a0:1d:e3 0:60:52:5:c8:d7 ip 558: ina.jk1mly.prug.net.nim > ipsm1.jk1mly.prug.net.tftp: 516 DATA block 1 22:35:40.387359 0:60:52:5:c8:d7 0:90:cc:a0:1d:e3 ip 64: ipsm1.jk1mly.prug.net.tftp > ina.jk1mly.prug.net.nim: 4 ACK block 1
次に相手局に対して送信するため、ping -i 10 192.168.14.1として10秒おきに送信しておきます。これがトンネルデバイスを通って送信されるかを、tcpdump -i tun1としてモニタして下記のようなら、正しく送っています。
22:36:32.996019 192.168.41.200 > 172.16.113.101: icmp: echo request 22:36:33.143623 172.16.113.101 > 192.168.41.200: icmp: echo reply 22:36:34.013630 192.168.41.200 > 172.16.113.101: icmp: echo request 22:36:34.106877 172.16.113.101 > 192.168.41.200: icmp: echo reply
これがイーサネット側に出ているかは、tcpdump -i ed1としてモニタして下記のようなら、正しく送っています。
22:36:33.014560 0:90:cc:a0:1d:e3 0:60:52:5:c8:d7 ip 1450: ina.jk1mly.prug.net.8649 > ipsm1.jk1mly.prug.net.8649: udp 1408 22:36:33.121651 0:60:52:5:c8:d7 0:90:cc:a0:1d:e3 ip 1450: ipsm1.jk1mly.prug.net.8649 > ina.jk1mly.prug.net.8649: udp 1408 22:36:33.128952 0:60:52:5:c8:d7 0:90:cc:a0:1d:e3 ip 1450: ipsm1.jk1mly.prug.net.8649 > ina.jk1mly.prug.net.8649: udp 1408 22:36:34.014607 0:90:cc:a0:1d:e3 0:60:52:5:c8:d7 ip 1450: ina.jk1mly.prug.net.8649 > ipsm1.jk1mly.prug.net.8649: udp 1408 22:36:34.106044 0:60:52:5:c8:d7 0:90:cc:a0:1d:e3 ip 1450: ipsm1.jk1mly.prug.net.8649 > ina.jk1mly.prug.net.8649: udp 1408 22:36:35.024614 0:90:cc:a0:1d:e3 0:60:52:5:c8:d7 ip 1450: ina.jk1mly.prug.net.8649 > ipsm1.jk1mly.prug.net.8649: udp 1408
自動的に必要なプログラムが動いているか、ps -axとしてプロセスを確認します。
下記は一例なのでPIDなどは異なっていても問題ありませんし、実際には下記以外のプロセスも表示されます。
<psコマンドの実行例>
PID TT STAT TIME COMMAND 87 ?? Is 0:00.06 named -b /etc/namedb/named.boot 113 ?? Is 0:00.11 inetd 189 ?? Ss 0:00.18 /usr/local/sbin/pfwld 191 ?? Ss 0:00.09 /usr/local/sbin/rnavid 193 ?? Is 0:00.07 /usr/local/sbin/dhcpd 202 ?? Ss 0:00.05 /sbin/routed
--
pfwld-1.40.tar.gz drwxr-xr-x shin/users 0 Oct 13 00:21 1998 PFWLD/ -r--r--r-- shin/users 57019 Oct 5 23:00 1998 PFWLD/ipsmio.c -r--r--r-- shin/users 6839 Oct 7 00:41 1998 PFWLD/sockio.c -r--r--r-- shin/users 16155 Oct 7 00:41 1998 PFWLD/rlp.c -r--r--r-- shin/users 11401 Oct 2 18:20 1998 PFWLD/ipv4.c -r--r--r-- shin/users 13064 Oct 7 00:41 1998 PFWLD/main.c -r--r--r-- shin/users 5187 Oct 7 00:41 1998 PFWLD/rnio.c -r--r--r-- shin/users 11434 Oct 7 09:09 1998 PFWLD/pktfilter.c -r--r--r-- shin/users 5124 Sep 30 01:36 1998 PFWLD/tunio.c -r--r--r-- shin/users 4257 Sep 30 01:47 1998 PFWLD/slio.c -r--r--r-- shin/users 5903 Oct 3 20:23 1998 PFWLD/icmp.c -r--r--r-- shin/users 2719 May 19 09:23 1998 PFWLD/ipsmio.h -r--r--r-- shin/users 1905 May 19 09:23 1998 PFWLD/sockio.h -r--r--r-- shin/users 3672 Oct 7 00:41 1998 PFWLD/rlp.h -r--r--r-- shin/users 2331 Oct 7 00:41 1998 PFWLD/ipv4.h -r--r--r-- shin/users 3331 Oct 13 00:20 1998 PFWLD/config.h -r--r--r-- shin/users 2118 May 19 09:23 1998 PFWLD/rnio.h -r--r--r-- shin/users 3312 Sep 30 01:36 1998 PFWLD/pktfilter.h -r--r--r-- shin/users 2008 May 19 09:23 1998 PFWLD/tunio.h -r--r--r-- shin/users 1963 May 19 09:23 1998 PFWLD/slio.h -r--r--r-- shin/users 2123 Oct 2 18:19 1998 PFWLD/icmp.h -r--r--r-- shin/users 5154 Oct 13 00:20 1998 PFWLD/README.pfwld -r--r--r-- shin/users 2359 Oct 13 00:20 1998 PFWLD/CHANGES.pfwld -r--r--r-- shin/users 313 Oct 3 14:26 1998 PFWLD/pfwld.conf-sample -rwxr-xr-x shin/users 94 May 17 11:46 1998 PFWLD/pfwld.reload -rw-r--r-- shin/users 1658 May 19 09:57 1998 PFWLD/LICENSE -r--r--r-- shin/users 2454 Oct 3 15:16 1998 PFWLD/Makefile -r--r--r-- shin/users 2699 Oct 5 23:43 1998 PFWLD/pfwld.conf-templete-JP rnavid-1.40.tar.gz drwxr-xr-x shin/users 0 Oct 13 00:25 1998 RNAVID/ -r--r--r-- shin/users 6035 May 19 09:33 1998 RNAVID/sockio.c -r--r--r-- shin/users 9692 Oct 13 00:24 1998 RNAVID/main.c -r--r--r-- shin/users 17508 Oct 6 02:11 1998 RNAVID/table.c -r--r--r-- shin/users 14455 Oct 6 02:11 1998 RNAVID/ipv4.c -r--r--r-- shin/users 3110 May 19 09:33 1998 RNAVID/monitor.c -r--r--r-- shin/users 1859 May 19 09:33 1998 RNAVID/sockio.h -r--r--r-- shin/users 2751 Oct 13 00:24 1998 RNAVID/config.h -r--r--r-- shin/users 2907 May 19 09:33 1998 RNAVID/rlp.h -r--r--r-- shin/users 2421 May 19 09:33 1998 RNAVID/table.h -r--r--r-- shin/users 3175 May 19 09:50 1998 RNAVID/ipv4.h -r--r--r-- shin/users 1918 May 19 09:33 1998 RNAVID/monitor.h -r--r--r-- shin/users 3527 Oct 13 00:25 1998 RNAVID/README.rnavid -r--r--r-- shin/users 1281 Oct 13 00:23 1998 RNAVID/CHANGES.rnavid -r--r--r-- shin/users 120 Mar 31 02:02 1998 RNAVID/rnavid.conf-sample -r-xr-xr-x shin/users 629 May 15 01:06 1998 RNAVID/rnavid.cgi -rwxr-xr-x shin/users 95 May 17 11:51 1998 RNAVID/rnavid.reload -rw-r--r-- shin/users 1658 May 19 09:57 1998 RNAVID/LICENSE -r--r--r-- shin/users 1109 Oct 3 15:14 1998 RNAVID/rnavid.conf-templete-JP -r--r--r-- shin/users 2934 Oct 3 15:14 1998 RNAVID/Makefile
--
rnavidやpfwldは実行時に-vオプションを指定すると、動作状況を起動したコンソールに出力します。このうちrnavidのレポートには伝送状況がありますが、その概略は下記のようになります。
<pfwldのレポート例>
Send a packet, size:201/936
・・・自局が送信したパケットに含まれるデータとパケットのサイズ
Packet received from JK1MLY -10 7 / 9, errors 10 ・・・JK1MLY-10から受信した9つ目の受信パケットで、その中で廃棄しなかった7つ目のパケットを示す。 この局との通信で今までに含まれているエラーは10個である。(前パケットの積算) Readability Report: Receiver JK1MLY -10 , BW 808000, entry 2 ・・・相手局は帯域が808000bpsで2局分の情報を持っている。 JK1MLY -10, heard -1 , sent 0, errors 0 ・・・1局目はJK1MLY-10で、自局なのでheard, sent, errorsは情報が無い。 JK1MLY -0, heard 18 , sent 21, errors 14 ・・・2局目はJK1MLY-0で、今までにパケットを受信したのは18回、送信したのは21回である。受信したパケットに含まれたエラーの積算は14である。
<rnavidのレポート例>
ARP table Sun Oct 18 22:37:59 1998 0: -0 c0a829c8 fffffffe, ttl -1, entered 22:27:27, permanent 1: -0 ac107200 ffffff00, ttl -3, entered 22:37:47, expiration 22:40:47 2: JK1MLY -10 c0a82964 fffffffe, ttl 15, entered 22:39:11, expiration 22:47:51 3: JK1MLY -10 ac107100 ffffff00, ttl 15, entered 22:39:11, expiration 22:47:51 4: JK1MLY -10 cb8b0ab0 fffffff8, ttl 15, entered 22:39:11, expiration 22:47:51
・・・自分のIPアドレスほか
コールサインが入って無い、ttlが-1なのは自局であり、 JK1MLY -10が無線経由で受信した局の情報です。Hexの数値はネットワークアドレスとサブネットマスクを示します。
Name table Sun Oct 18 22:37:59 1998 0: PRUG96 -0 local, expiration 22:39:36, ttl 16 1: JK1MLY -10 radio, expiration 22:41:51, ttl 15
・・・自分のコールサインほか
この例ではJK1MLY-10が無線経由で届いてます
Line Quality table Sun Oct 18 22:37:59 1998 R 0 R 1 S 0: +1.0000/16 1.0000/15 S 1: 1.0000/16 +1.0000/15 ・・・通ったパケットの状態
通信可能な全ての局との状態を表(マトリクス)で示します
数値はrate(1-エラーレート)とTTL(16−中継局数)
値の前に*がある場合は十分なデータが無い状態を示します
--
このシステムではトンネルデバイスを使い、実体の無いルータが動いており、設定したUNIXマシンとAPFSルータ,IPSMが下記のようなイメージで論理的に接続されています。
Ethernet 172.16.114.0 | | | 172.16.114.101 192.168.41.100 172.16.114.102 | +--------+ tunnel +-----------+ +--------+ +------| UNIX |----------|APFS router|------->| IPSM | | +--------+ +-----------+ +--------+ | 192.168.41.101 (192.168.41.100)
--
pfwld,rnavidなどのソフトウェア、IPSMのファームウェア、各種のドキュメントなどは下記のURLから辿ることで、最新版の入手が可能になっています。
http://www.drug.prug.or.jp/docs.html
--
1998年10月20日:旧版から変更