従来は利用したい/接続したいと考えても限られた人/機関しか
利用できませんでした。しかし、今日ではIIJ等に代表されるインター
ネットプロパダイバが登場し、個人でも接続できるようになりました。
これはこれで喜ばしい事ではあるのですが、接続するための敷居と言う物は
NIFTYなどに代表されるパソコン通信と違ってなかなか高いようです。しかし、
それは
「接続するためのノウハウが入手しづらい」
「近くに接続経験を持った人がいない」
と言う事が原因のようなきがします。たしかにパソコン通信に比べると、 多少多くの知識を要求されるかも知れません。しかし、一つ一つの事は決して 難しい事ではありません。一つ一つこなしてゆけばいいのです。その先には きっと明るいインターネットへの道が開けているでしょう!
で、FreeBSD 2.0以降でPPPを使用する場合、
pseudo-device ppp 2
これで、準備はできました。後は実際に接続するだけです。
どうです?揃っていますか?揃っていない場合、 前の章に戻って揃えて下さい。 つぎに、電話をかけるため/接続先にログインするためのスクリプト を用意します。仮に、このファイルを/etc/ppp/DialUpとします。 内容は以下のようになるでしょう。
#!/bin/sh TELNUMBER=接続先の番号 LOGINNAME=ログインアカウント PASSWD=パスワード chat\ ""\ "AT" "OK"\ "ATZ" "OK"\ "ATD$TELNUMBER" "CONNECT"\ ""\ "ogin:" "$LOGINNAME"\ "asswd:" "$PASSWD"
スクリプトの「"ogin:"」「"asswd:"」の部分は接続先のシステムによって 違いがあるかも知れませんので、自分で書き換えて下さい。 また、/etc/ppp/optionsに以下のように設定すると接続が楽になります。
/dev/cua01 57600 netmask 255.255.255.0 crtscts connect /etc/ppp/DialUp用意できたら、 コマンドラインから以下のように入れます。
% /usr/libexec/pppd
入力すると、すぐにコマンドラインへ帰って来ると思います。それが 正常な動作です。モデムが電話をかけて相手のホストへ接続できると
pppd 2.0.4 started Connect: ppp0 <--> /dev/cua01 local IP address XX.XX.XX.XX remote IP address YY.YY.YY.YYと出力されるかも知れません。これが正常な動作です。 実行するユーザによっては出力されないかも知れません。 接続されているかどうか、確認するにはnetstatコマンドを 使用してみるのも良いです。ルーティング情報を確認して、 外への経路が存在する事を確認して下さい。
% ping YY.YY.YY.YY
これは、接続先のホストにICMP ECHOを送ってみて、相手のホストから
応答があるかどうかで接続が確立されているか確認する方法です。
正常に、接続できていますか?出来たらルーティングの設定を行います。
ルーティングの設定を行うに当たって2つの方針/3つの方法が存在します。
route add default <IP ADDRESS>
と言うコマンドを発行します。
いずれの方法を採用するにしても1つだけ注意しなければならない
問題があります。それは、「ルーティング情報をアナウンスするか否か」
です。もし、内部のセグメントのアドレスにプライベートアドレスを設定
していた場合、外部にルーティング情報を出してはなりません。
個人がIPで接続する場合、正式なアドレスを獲得している事はまず無い
のでroutedを-qをつけて起動しておけば間違いは無いで
しょう。となると、選択肢は2しか在り得ないので、デフォルトルートを
設定する事になります。では、どの方法で設定すれば良いのでしょうか?
私のお勧めは、2.1)の方法です。この方法なら接続が切れれば経路情報も
遮断されていますので、袋小路にはまりにくくなります。
それでは、設定しましょう。まず、/etc/resolv.confという
ファイルが存在しているかチェックして下さい。ありましたか?
あった場合、貴方のマシンは既にresolverを使用している
可能性があります。nslookupと言うコマンドを起動してみて
下さい。プロンプトが帰って来ましたか?帰って来なかった
場合は設定ファイルを破棄して構わないでしょう。無かった
場合と同様の事を行って下さい。
無かった場合、resolv.confを作成します。内容は以下の
ようになります。
domain some.domain.name nameserver XX.XX.XX.XX内容は貴方の接続先似合わせて書き換えて下さい。私の場合、 以下のようなものを使用しています。
domain greg.rim.or.jp nameserver 171.32.1.1ここまでで来たら、nslookupコマンドで動作を確認して 下さい。とりあえず、以下のようにすれば良いでしょう。
% nslookup Default Server: foo.bar.some.domain Address: XX.XX.XX.XX > ftp.iij.ad.jpどうです。IPアドレスが表示されましたか?表示された場合、 DNSを使って外部のホストのIPアドレスを引く事が出来るよう になりました。
directory /usr/Server/named cache . root.cache ; Zone secondary . 192.244.176.54 backup/root secondary jp 192.244.176.54 backup/jp secondary ad.jp 192.244.176.54 backup/ad.jp secondary ac.jp 192.244.176.54 backup/ac.jp secondary co.jp 192.244.176.54 backup/co.jp secondary go.jp 192.244.176.54 backup/go.jp secondary or.jp 192.244.176.54 backup/or.jp secondary rim.or.jp 202.255.181.2 backup/rim.or.jp primary greg.rim.or.jp greg.rim.or.jp.zone ; Reverse secondary ARPA 192.244.176.54 backup/ARPA secondary 181.255.202.IN-ADDR.ARPA 202.255.181.2 backup/181.255.202.IN-ADDR.ARPA primary 172.IN-ADDR.ARPA 172.IN-ADDR.ARPA.rev primary 31.172.IN-ADDR.ARPA 31.172.IN-ADDR.ARPA.rev primary 1.31.172.IN-ADDR.ARPA 1.31.172.IN-ADDR.ARPA.rev primary 0.0.127.IN-ADDR.ARPA localhost.rev本来、無闇やたらとセカンダリーサーバになるべき物 ではないのですが、ダイアルアップPPPで間欠的に接続 している関係上、無闇やたらとUnauthrized secondary にならなければなりません。理由はnslookupをデバッグ モードで立ち上げて、ローカルホストのIPアドレスを獲得 しようとしてみれば分かります。
まず、fooというホスト名をネームサーバを用いて検索 して見ましょう。
> foobar ;; res_mkquery(0, foo.bar.or.jp, 1, 1) ------------ Got answer: HEADER: opcode = QUERY, id = 14, rcode = NOERROR header flags: response, auth. answer, want recursion, recursion avail. questions = 1, answers = 1, authority records = 0, additional = 0 QUESTIONS: foo.bar.or.jp, type = A, class = IN ANSWERS: -> foo.bar.or.jp internet address = 172.31.1.1 ttl = 3600 (1 hour) ------------となります。これはこれで正しい動作です。しかし、 本来あるべき名前は
foo.bar.or.jp
なので、この名前で問い合わせて見るとホスト名は
foo.bar.or.jp.bar.or.jp
になります。このようなホスト名は存在しないので
# 問い合わせ文字列 問い合わせ先サーバ foo.bar.or.jp.rim.or.jp -> rim.or.jp foo.bar.or.jp.or.jp -> or.jp foo.bar.or.jp.jp -> jp foo.bar.or.jp -> bar.or.jpのように、より上位のネームサーバに問い合わせを 行おうとします。この状態になった場合、タイムアウト を待たされます。また場合によっては挙げ句の果てに
host lookup fail
になります。
次に、PPPでリンクが確立されている事を確認した後、BINDを 立ち上げます。この時、起動に時間がかかるかも知れません が、気にしないで下さい。なお、私の設定の場合、BINDの プロセスサイズは13MB程度になりました。BINDが応答できる ようになったらnslookupコマンドできちんと動作しているか 確認して下さい。確認できたら
kill -HUP PID
を行って、現在のBINDの状態をファイルにダンプします。
この時、比較的良く利用しそうなホストのIPアドレスを
検索した後に行った方が効果的でしょう。ダンプされた
ファイルは/var/tmp/named_dump.dbというファイルになって
いると思います。このファイルをroot.cacheに指定した
ファイルへコピーします。
これで、BINDの立ち上げは終了です。
telnet remote.host.some.domain
と言うように使用します。第二引数は指定しなくても
構いません。
ftp remote.host.some.domain
と言うように使用します。
本来、ftpはリモートサイト上にアカウントがある事が前提 となるのですが、アカウントを必要としないで利用できる ケースも存在します。これを「匿名ftp(anonmouse-ftp)」 と言います。これはユーザ名に「ftp」パスワードに貴方の メールアカウント指定した物です。
#!/bin/sh # This script is login script for PPP # Check busy if [ -f /var/spool/lock/LCK..cua01 ]; then exit 1 fi # Make UUCP-LOCK ppppid=`ps ax | grep pppd | grep -v grep | awk '{printf("%010d", $1)}'` echo -n $ppppid > "/var/spool/lock/LCK..cua01" # start PPP chat "" "ATZ" "OK"\ "ATZ" "OK"\ "ATZ" "OK"\ "AT" "OK"\ "AT\\Q2" "OK"\ "ATD接続先の電話番号" "CONNECT"\ ""\ ogin:--ogin: ログインID\ assword: パスワード\ || (rm "/var/spool/lock/LCK..cua01" && false)
#!/bin/sh if [ -f "/var/spool/lock/LCK..cua01" ]; then echo "######### Telephone line is busy #########" exit 1 fi /usr/libexec/pppd
#!/bin/sh ppppid=`cat /var/spool/lock/LCK..cua01` kill $ppppid rm -f /var/spool/lock/LCK..cua01