Chapter 10. ネットワーク設定

目次
10.1. 実践
10.2. 進んだ話題

10.1. 実践

10.1.1. カーネル設定の下読み

この節 (カーネル設定の下読み) は Hubert Feyrer による寄稿です。

ネットワーク設定をさまざまな状況にあわせて設定する前に、 カーネル内に何が必要か、あるいはなにを入れることができるのか、 をざっと見ておきたいと思います。カーネルのコンパイルについての詳細は Chapter 7 をご覧ください。ここでは カーネル設定の事に専念します。 ここでは、例として i386/GENERIC コンフィグ ファイルを用います。 他のプラットホームの Config ファイルにも似た情報が含まれているはずで, コンフィグファイル中のコメントはより多くのヒントとなります。 ここに書かれた情報に加えて、各カーネルオプションについてのドキュメントは options(4) マニュアルページ中にあり、 また、各ドライバー、 例えば tlp(4) についても、大抵マニュアルページがあります。

      #       $NetBSD: GENERIC,v 1.354.2.15 2001/05/06 15:18:54 he Exp $      

各 config ファイルの最初の行はバージョンが書かれていて、 これは 1.354.2.15 です。これは CVS 経由でほかのバージョンと比較したり、 バグが伝えられたときに使えます。

options         NTP             # NTP phase/frequency locked loop      

もし Network Time Protocol (NTP) を使いたいなら、 精度を高めるためにこのオプションを使うことができます。 このオプションが無くても、 NTP は動きます。 更なる情報は ntpd(8) をご覧ください。

file-system     NFS             # Network File System client      

ほかの機械のハードディスクを ネットワークファイルシステム (NFS)経由で使いたいなら、 このオプションが必要です。 Section 10.2.2 に NFS についてのより詳しい情報があります。

options         NFSSERVER       # Network File System server      

このオプションは NFS リモートファイル共有プロトコル のサーバー側を含ませるものです。この機械のハードディスクを ほかの機械から使うことを許したいなら有効にしてください。 Section 10.2.2 に NFS の更なる 情報があります。

#options        GATEWAY         # packet forwarding      

ネットワークやネットワークインターフェース間でパケットのフォワードをする ルーターにしたければ、このオプションを設定することが必要です。 パケットフォワーディングのスイッチだけでなく、バッファーの増加もします。 詳しくは options(4) をご覧ください。

options         INET            # IP + ICMP + TCP + UDP      

これでカーネル中の TCP/IP コードが有効になります。 ネットワークを使わない/使いたくない場合でさえ、 X Window System のようなサブシステムのマシン内部の通信のために やっぱり必要でしょう。 より詳しいことは inet(4) をご覧ください。

options         INET6           # IPV6      

IPv6 を利用したければ必要です。 IPv6 がいらなければ、このオプションは NetBSD 1.5 release 以降は標準で含まれているので、消す/コメントアウトすることができます。 次世代インターネットプロトコルの更なる情報は inet6(4) マニュアルページと Section 9.1.7 を ご覧ください。

#options        IPSEC           # IP security      

鍵とポリシー管理、認証、圧縮が含まれている IPsec プロトコルのサポートをいれます。 IPv4 で IPsec を使いたいだけなら、 このオプションは上のオプション、 INET6 なしに使うことができます。 より詳しいことは ipsec(4) をご覧ください。

#options        IPSEC_ESP       # IP security (encryption part; define w/IPSEC)      

IPsec で暗号化が必要なら IPSEC に加えてこのオプションが必要です。

#options        MROUTING        # IP multicast routing      

もし MBone サービスのようなマルチキャストサービスをルーティングするなら、 このオプションを入れることが必要です。註として、ルーティングそれ自体は mrouted(8) デーモンによって制御されます。

options         NS              # XNS
#options        NSIP            # XNS tunneling over IP      

このオプションは Xerox Network Systems(tm) プロトコル family のためのものです。 これは TCP/IP プロトコルスタックの関連ではなく、今日では使われることはまれです。 ns(4) マニュアルページにいくらか詳しいことが書いてあります。

options         ISO,TPIP        # OSI
#options        EON             # OSI tunneling over IP      

このオプションは OSI プロトコルスタックを入れるもので、 長いことネットワークの前途だと言われていました。 今日ではほとんど歴史です :-) 更なる情報は iso(4) マニュアルページを ご覧ください。

options         CCITT,LLC,HDLC  # X.25      

これらのオプションでシリアルライン上のデータ転送で X.25 プロトコルを 使えるようになります。これは OSI プロトコルや WAN ネットワークに関連して 最もよく使われ ます/ました。

options         NETATALK        # AppleTalk networking protocols      

AppleTalk プロトコルスタックのサポートをします。 利用するにはユーザーランドのサーバープログラムが必要です。 pkgsrc/net/netatalk や pkgsrc/net/netatalk-asun といったパッケージをご覧ください。 AppleTalk プロトコルとプロトコルスタックについての更なる情報は atalk(4) マニュアルページにあります。

options         PPP_BSDCOMP     # BSD-Compress compression support for PPP
options         PPP_DEFLATE     # Deflate compression support for PPP
options         PPP_FILTER      # Active filter support for PPP (requires bpf)      

これらのオプションは Point-to-Point プロトコルのさまざまな を調節するためのものです。最初の2つは 利用する圧縮プロトコルを決めるもので、 3つめのは パケットのフィルタリングを有効にするものです。

options         PFIL_HOOKS      # pfil(9) packet filter hooks
options         IPFILTER_LOG    # ipmon(8) log support      

NetBSD で IPfilter を使ったファイヤーウォールをします。 IPfilter の operation についてのより詳しいことは ipf(4) と ipf(8) のマニュアルページをご覧ください。 設定例は Section 10.2.1.1 です。

# Compatibility with 4.2BSD implementation of TCP/IP.  Not recommended.
#options        TCP_COMPAT_42      

このオプションは、ネットワーク上に 4.2BSD か、 そのネットワークスタックが使われている機械がある場合に必要です。 ネットワーク上に1台以上 4.2BSD-systems があると、 正しいブロードキャストアドレスの設定に注意する必要があります。 4.2BSD はネットワークのコードのブロードキャストアドレス関係にバグがあり、 このバグは、ブロードキャストアドレス中の すべてのホストビットを "0" にすることを強要します。 この TCP_COMPAT_42 オプションで、これが確実にできます。

options         NFS_BOOT_DHCP,NFS_BOOT_BOOTPARAM      

これらのオプションは、カーネルが NFS ルートファイルシステムを使うと言った時に、 DHCP あるいは BOOTPARAM プロトコル経由のデータを見るようにします。 更なる情報は diskless(8) マニュアルページをご覧ください。

# Kernel root file system and dump configuration.
config          netbsd  root on ? type ?
#config         netbsd  root on sd0a type ffs
#config         netbsd  root on ? type nfs      

これらの行に、カーネルがおかれているルートファイルシステムの 場所とファイルシステムの種類を記述します。 もし、カーネルを tlp0 インターフェース経由の NFS ルートファイルシステムに置きたいならば、 "root on tlp0 type nfs" とします。デバイスやタイプの代わりに ? を使うと、 カーネルは自分のある場所だと 判断しようとします。

# ISA serial interfaces
com0    at isa? port 0x3f8 irq 4        # Standard PC serial ports
com1    at isa? port 0x2f8 irq 3
com2    at isa? port 0x3e8 irq 5      

PPP や SLIP が使いたければ シリアルインターフェース (com) がいくつか必要です。 他に、 USB や PCMCIA 、 PUC で接続する方法もあります。

# Network Interfaces      

この幾分長いリストにはすべてのネットワークドライバーが書かれています。 コメントに従って、ついているハードウェアーに適合するものを 選んでください。 大抵のデバイスに関しては、 マニュアルページがあります。たとえば tlp(4), ne(4), 等。

# MII/PHY support      

このセクションはネットワークカードの media independent interfaces 一覧です。 ハートウェアにあわせたものを選んで書いてください。 わからない場合は、すべて有効にしておき、カーネルがどれを使うか見ます。 更なる情報は mii(4) マニュアルページをご覧ください。

# USB Ethernet adapters
aue*    at uhub? port ?         # ADMtek AN986 Pegasus based adapters
cue*    at uhub? port ?         # CATC USB-EL1201A based adapters
kue*    at uhub? port ?         # Kawasaki LSI KL5KUSB101B based adapters      

USB-ethernet アダプターは帯域幅は約 2MBit/s しかありませんが、 とても便利なものです。もちろん、ここでは扱っていない ハードウェアー関連のほかの USB 関連のオプションも必要です。 更なる情報は 該当するマニュアルページをご覧ください。

# network pseudo-devices
pseudo-device   bpfilter        8       # Berkeley packet filter      

この擬似デバイスは全種類のパケットを嗅ぎまわることを許すものです。 tcpdump や、また、 rarpd や、ネットワークトラフィックを把握するための いくつかの他のアプリケーションにも必要になります。 更なることは bpf(4) をご覧ください。

pseudo-device   ipfilter                # IP filter (firewall) and NAT      

これは、ファイヤーウォール・ NAT (IP Masquerading) 等に使われる IPfilter の パケットフィルター・カーネルインターフェースを有効にします。 更なる情報は ipf(4) と Section 10.2.1.1 をご覧ください。

pseudo-device   loop                    # network loopback      

これは、ルーティング同様、今日、多くのプログラムが使っている "lo0" ソフトウェアループバックネットワークデバイスで、 削るべきではありません。 より詳しくは lo(4) をご覧ください。

pseudo-device   ppp             2       # Point-to-Point Protocol      

PPP をシリアルインターフェース上、あるいはイーサネットで(PPPoE) 使いたければ、このオプションが必要です。 このインターフェースの より詳しいことは ppp(4) をご覧ください。

pseudo-device   sl              2       # Serial Line IP      

シリアル回線 IP はシンプルな IP over (well :) serial lines カプセル化です。 これには IP アドレスネゴシエーション等は含まれていないので、 今日では、そんなに広く使われているわけではありません。 sl(4) をご覧ください。

pseudo-device   strip           2       # Starmode Radio IP (Metricom)      

もし、古い Metricon Ricochet パケット無線ワイヤレスネットワークデバイスを手 にすることになったら、それを使うには、この pseudo-device を使います。 詳しい情報は strip(4) マニュアルページをご覧ください。

pseudo-device   tun             2       # network tunneling over tty      

このネットワークデバイスは ネットワークパケットを デバイスファイル /dev/tun* にトンネルするのに使われます。 tun0 インターフェースにルーティングされたパケットは /dev/tun0 から読むことができ、 tun0 ネットワークインターフェースに送るには /dev/tun0 に書き込むことでできます。 これは、たとえばユーザーランドでの QoS ルーティングの実装に 使うことができます。 詳しくは tun(4) をご覧ください。

pseudo-device   gre             2       # generic L3 over IP tunnel      

GRE カプセル化は IP 上の任意のレイヤー 3 パケットトンネルに使います。 例えば VPNの実装に。 更なることは gre(4) をご覧ください。

pseudo-device   ipip            2       # IP Encapsulation within IP (RFC 2003)      

異なるカプセル化フォールマットを用いる、ほかの IP-in-IP カプセル化デバイス。 詳しくは ipip(4) マニュアルページをご覧ください。

pseudo-device   gif             4       # IPv[46] over IPv[46] tunnel (RFC 1933)      

GIF インターフェースを使うことでトンネルができ、 たとえば IPv6-capable uplink (ISP) が無いとき 接続性を得るのに使われる IPv6 over IPv4 などができます。 ほかの操作を混ぜることもできます。 いくつかの例を gif(4) マニュアルページでご覧ください。

#pseudo-device  faith           1       # IPv[46] tcp relay translation i/f      

faith インターフェースはユーザーランドでの IPv6-to-IPv4 TCP 中継、 たとえば プロトコル変換、の実装のために IPv6 TCP トラフィックをキャプチャーします。 このデバイスについてのより詳しいことは faith(4) マニュアルページをご覧ください。

#pseudo-device  stf             1       # 6to4 IPv6 over IPv4 encapsulation      

このネットワークデバイスは あらかじめ設定する必要のない IPv6 over IPv4 トンネルに使います。 外部向けのバケットのソースアドレスに IPv4 アドレスを含むことで IPv4 による戻りのルーティングがされます。 より詳しくは stf(4) マニュアルページと Section 10.2.4 をご覧ください。

pseudo-device   vlan                    # IEEE 802.1q encapsulation      

このインターフェースは IEEE 802.1Q バーチャル LAN のサポートのためのもので、 Ethernet フレームに "vlan" ID タグを打つことを許します。 正しく設定されたスイッチ(もちろん VLAN のサポートも)を使うことで 1セットとなる機械以外の機械から見ることのできない(ブロードキャストや、その他について) バーチャル LANを構築することができます。 これに関する更なる事は、 vlan(4) マニュアルページにあります。

10.1.2. ネットワーク設定ファイルの全体像

ネットワーク設定に使われるファイルのリストは 次の通りです。 これらのファイルの利用法は、いくつかについては、 最初の章にすでに出ており、次の節に記述します。

/etc/hosts

ローカルホストデータベースのファイル。各行には わかっているホストの IP アドレス、そのホスト名とエイリアス名が 書かれています。 小規模ネットワークでは name server を使わずに hosts ファイルだけの設定で済ませられます。

/etc/resolv.conf

このファイルは the Internet Domain Name System に アクセスする方法を指定します。 一般的に、ネームサーバーのアドレスを入れます。

/etc/ifconfig.xxx

このファイルは起動時に ネットワークカードの自動設定をするのに使われます。

/etc/mygate

ゲートウェイの IP アドレスを書きます。

/etc/nsswitch.conf

Name service switch 設定ファイルです。これは ホスト名、ユーザー、グループ等についての情報を含む さまざまなデータベースの検索法を制御するものです。 特にこのファイルでは、 データベースの調べる順番を指定します。 たとえばこの行:

hosts:    files dns		
ホストのデータベースとして2つの情報源を指定していて、 files (ローカルの /etc/hosts ファイル) と DNS (インターネット・ドメインネーム・システム ) であり、 DNS 検索の前に ローカルのファイルを検索します。

通常、このファイルを書きかえる必要はありません。

10.1.3. インターネット接続

インターネット接続は多くの種類があり、: この節では 一般的な、電話線にモデムを使ってプロバイダーに PPP プロトコルでつなぐ方法について 書きます。 接続するには、 次のステップをする必要があり:

  1. プロバイダーから必要な情報を入手します。

  2. /etc/resolv.conf ファイルを編集し /etc/nsswitch.confを確認します。

  3. もし /etc/ppp ディレクトリー及び /etc/ppp/peers ファイルが、なければ作ります。

  4. 接続スクリプト、 chat ファイル、 pppd オプションファイルを作ります。

  5. ユーザー - パスワード認証ファイルを作ります。

上のリストを見ると、 面倒でとても多くの作業が必要に見えます。 実際は、各段階1つは非常に簡単で: いくつかの小さいテキストを作ったり 書き換えたり、簡単な確認をするだけです。 次の例では、モデムを 2番目のシリアルポート /dev/tty01 (DOS の COM2 )につないでいるものとします。

10.1.3.1. 接続情報を入手する

最初に、プロバイダーに接続に必要な情報を尋ねます これは:

  • 最寄りの POP の電話番号

  • 使われている認証法

  • 接続ユーザー名とパスワード

  • ネームサーバーの IP アドレス

10.1.3.2. resolv.conf と nsswitch.conf

/etc/resolv.conf ファイルには、プロバイダーから知らされた情報、 特に DNS アドレスサーバーのアドレスを指定することが必要です。. この例では 2つの DNS は "194.109.123.2" と "191.200.4.52" です。

Example 10-1. resolv.conf

nameserver 194.109.123.2
  nameserver 191.200.4.52
  #lookup file bind          

註: 最後の行 (lookup file bind) は/etc/hosts ファイルに無い名前だけに ネームサーバーを使うように 指示するものです。 この行はコメントアウトされていますが、それは NetBSD 1.4 からは 何も必要無いからで; この種の情報は現在では /etc/nsswitch.conf ファイルにて定義します。 new Name Service Switch で基本システム情報を調べるプログラムが使うデータベースの アクセスを変更します。

この /etc/nsswitch.conf ファイルの例です。

Example 10-2. nsswitch.conf

# /etc/nsswitch.conf
  group:         compat
  group_compat:  nis
  hosts:         files dns 
  netgroup:      files [notfound=return] nis
  networks:      files
  passwd:        compat
  passwd_compat: nis          

註: 1行、 "hosts:" で始まる行だけ変更していて; ホスト名の解決時に DNS を使った検索の前に、 ローカルの hosts ファイルを引くようにします。

10.1.3.3. pppd 用のディレクトリーを作る

/etc/ppp ディレクトリーと /etc/ppp/peers ディレクトリーに PPP 接続の設定ファイルを置きます。 新規インストールしたばっかりの NetBSD には存在しないので、 作らなければなりません (chmod 700 で)。

10.1.3.4. 接続スクリプトと chat ファイル

接続スクリプトには pppd コマンドラインのパラメーターが使え; スクリプトは /etc/ppp/peers に置き、 普通はファイル名にプロバイダー名をつけます。 たとえば、プロバイダー名が BigNet で、プロバイダーの 接続ユーザー名が alan なら 接続スクリプトの例は:

Example 10-3. 接続スクリプト

# /etc/ppp/peers/bignet
connect '/usr/sbin/chat -v -f /etc/ppp/peers/bignet.chat'
noauth
user alan
remotename bignet.it          

上の例では、接続に使うスクリプトを chat ファイル に書きます。スクリプト中のオプションの詳細は pppd(8) マニュアルページに 書かれています。

註: 接続に問題が起こっているなら、接続スクリプトに次の2行を 追加してみます。

debug
kdebug 4        
すると、 接続しようとしたときにシステムが実行した操作の 記録がとられます。 pppd(8) や syslog.conf(5) をご覧ください。

接続スクリプトは 物理接続 (モデムの初期化、ダイヤル発信、 ...)をするために chat アプリケーションを呼び出します。 chat のパラメーターは 接続スクリプト中にインラインで指定できますが、 別のファイルに分けるほうが良いでしょう もし、 たとえば POP の電話番号が 02 99999999 とすると chat スクリプトの例は:

Example 10-4. chat ファイル

# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
REPORT CONNECT
SAY "Calling BigNet"
'' ATDT0299999999
CONNECT ''	  

註: chat ファイルに 問題があるなら、 cu プログラムで手動で POP に接続してみて 受信した文字列を厳密に確かめてください。 cu(1) をご覧ください。

10.1.3.5. 認証

認証の間、2つのシステムは互いに相手の身元を確かめますが、 でも実際にはあなたがプロバイダーを 認証することはなくて、次に示す方法の1つを使って プロバイダーから確認されれば良いだけです。

  • login

  • PAP/CHAP

ほとんどのプロバイダーが PAP 認証か CHAP 認証を使います。

10.1.3.5.1. PAP/CHAP 認証

PAP の認証情報は /etc/ppp/pap-secrets に置かれ、 CHAP のは /etc/ppp/chap-secretsに置かれます。 これは次のフォーマットの行で:

user * password          

例えば:

alan * pZY9o          

註: セキュリティの為に pap-secrets ファイルと chap-secrets ファイルは root の所有にしてパーミッションを "600" にして置くべきっす。

10.1.3.5.2. Login 認証

この認証方式は今日ではあまり使われなくなりました; もしプロバイダーが login 認証を使うなら、 PAP/CHAP ファイルの代わりに chat ファイル中にユーザー名とパスワードを書きます。 それによって対話式のログインをシミュレートします。 この場合、 chat ファイルはふさわしいパーミッションを設定してください。

次の例は login 認証の chat ファイルです:

Example 10-5. login 認証の chat ファイル

# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
'' ATDT0299999999
CONNECT ''
TIMEOUT 50
ogin: alan
ssword: pZY9o            

10.1.3.6. pppd オプション

pppd オプションファイルの作成は /etc/ppp/options にします (chmod 644)。

Example 10-6. /etc/ppp/options

/dev/tty01
lock
crtscts
57600
modem
defaultroute
noipdefault          

オプションの意味は pppd(8) マニュアルページをご覧ください。

10.1.3.7. モデムの試験

接続する前に、モデムの簡単な試験すると言うことは 良い考えで、物理的な接続と、 コンピューターとモデムが通信できることを確認しましょう。テストには cu プログラムが使え、 次のようにします。

  1. 次の内容で /etc/uucp/port ファイルを作ります:

    type modem
    port modem
    device /dev/tty01
    speed 115200            
    (/dev/tty01 は接続されているデバイスの場所に合わせて 替えてください)

  2. モデムにコマンドの送信を始めるために cu -p modem と入力します。 例えば:

    # cu -p modem
    Connected.
    ATZ
    OK
    ~.
    
    Disconnected.
    #            
    上の例ではモデムにリセットコマンド (ATZ) を送り、 OK と応答がありました: 通信ができています。 cu を抜けるには、例の中にあるように ~ (チルダ) と引き続き . (ドット) を入力してください。

モデムが動作しなければ、正しいポートに接続されているか 確認してください (つまり、正しいポートに対して cu を使います。 ケーブルも、ちょくちょくトラブルの元となります。

註: cu の起動時に "Permission denied" と言うメッセージが出るなら、 /dev/tty## デバイスの所有者を確認してください、それは uucp であるべきです。 例えば:

$ ls -l /dev/tty00
crw-------  1 uucp  wheel  8, 0 Mar 22 20:39 /dev/tty00        

所有者が root だと、次のようなことが起こります:

$ ls -l /dev/tty00
crw-------  1 root  wheel  8, 0 Mar 22 20:39 /dev/tty00
$ cu -p modem
cu: open (/dev/tty00): Permission denied
cu: All matching ports in use        

10.1.3.8. Activating the link

準備が整ったので、 次のコマンドでプロバイダーに接続します:

# pppd call bignet        

ここで、 bignet は すでに書かれた 接続スクリプト名です。 pppd の接続メッセージを見るには、 次のコマンドで:

# tail -f /var/log/messages        

切断するには、 pppdkill -HUP して ください。

10.1.3.9. 接続と切断にスクリプトを用いる

接続動作がきちんと動くなら、 毎回コマンドを打たずに、それをスクリプトにしましょう。 このスクリプト2つを、例えば、 ppp-upppp-down と名付けます。

ppp-up をプロバイダーへ接続するのに使い:

Example 10-7. ppp-up

#!/bin/sh
MODEM=tty01
POP=bignet
if [ -f /var/spool/lock/LCK..$MODEM ]; then
  echo ppp is already running...
else
  pppd call $POP
  tail -f /var/log/messages
fi          

ppp-down を接続を切るときに使います:

Example 10-8. ppp-down

#!/bin/sh
MODEM=tty01
if [ -f /var/spool/lock/LCK..$MODEM ]; then
  echo -f killing pppd...
  kill -HUP `cat /var/spool/lock/LCK..$MODEM`
  echo done
else
  echo ppp is not active
fi          

この2つのスクリプトの利点は、 pppd がアクティブになると /var/spool/lock ディレクトリーに LCK..tty01 ファイルが作られることで、 このファイルには pppd プロセスの pid が記録されています。

この2つのスクリプトは実行可能にしておきます:

# chmod u+x ppp-up ppp-down        

10.1.4. Creating a small home network

ネットワーキングは文句なしに Unix と NetBSD の主な強みで: ネットワーク構築は、強力で、設定が簡単で、さらに、安価にできます。 なぜなら、通信なりサーバーを構築するのに、追加ソフトウェアを 購入する必要が無いからです。 Section 10.2.1 では、 NetBSD マシンをネットワークのゲートウェイとして 動かすための説明をします: IPNAT を使うと、 ゲートウェイマシンによる1本の接続で ネットワーク上の全ホストがインターネットに到達できます。 ネットワーク構築前にすることは、購入するネットワークカードが NetBSD でサポートされているか調査することだけです ( INSTALL ファイルにサポートされているデバイスの一覧があるので調べます)。

最初に、ネットワークカードがインストールされていて、 ケーブルでハブ、スイッチングハブあるいは直接に繋がれている必要があります (Figure 10-1 をご覧ください)。

次に、ネットワークカードが カーネルに検出されているか調べます。 dmesg コマンドの出力を調べてください。 次のはカーネルが NE2000 クローンとして正しく検出されている例で:

...
ne0 at isa0 port 0x280-0x29f irq 9
ne0: NE2000 Ethernet
ne0: Ethernet address 00:c2:dd:c1:d1:21
...      

カードがカーネルに検出されていなければ、 カーネルコンフィグレーションファイルで有効になっているのをチェックし、 カードとカーネルの IRQ 設定が揃っているのを確かめてください。 例えば、これはコンフィグレーションファイルの isa NE2000 の行で、 ; カーネルは、カードが IRQ 9 を使うことを期待しています。

...
ne0 at isa? port 0x280 irq 9 # NE[12]000 ethernet cards
...      

カードの設定が違うと、起動した時、発見されないでしょう。 この場合、カーネルコンフィグレーションファイルを書き換えて 新しいカーネルをコンパイルするか、カードの設定を変更します (たいてい、セットアップディスクを使うか、古いカードでは、 カード上のジャンパースイッチを変える必要があります)。

次のコマンドで、ネットワークカードの現在の設定が出てきます:

# ifconfig ne0
ne0: flags=8822<BROADCAST,NOTRAILERS,SIMPLEX,MULTICAST> mtu 1500 media: Ethernet 10base2      

ネットワークカードの設定のソフトウェア部分はとても簡単です。 IP アドレス "192.168.1.1" (これは内部ネットワーク用に 予約されています) がそのカードに割り当てられました。

# ifconfig ne0 inet 192.168.1.1 netmask 0xffffff00      

さきのコマンドをもう一度繰り返すと、今度は別の結果になります:

# ifconfig ne0
ne0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
          media: Ethernet 10base2
          inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255      

ifconfig の出力が変わりました: the IP アドレスが表示され、2つのフラグ "UP""RUNNING" が出ました。 インターフェースが "UP" でなければ、 システムはパケットを送信しません。

このホストには 192.168.1.1 という内部ネットワーク用の IP アドレスが与えられました。これは インターネットからは到達できません。 設定が終わったので、テストをします; ネットワーク上に、アクティブなホストが他にあれば ping でテストができます。 例えば、アクティブなホストが 192.168.1.2 とすると:

# ping 192.168.1.2
  PING ape (192.168.1.2): 56 data bytes
  64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=1.286 ms
  64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=0.649 ms
  64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=0.681 ms
  64 bytes from 192.168.1.2: icmp_seq=3 ttl=255 time=0.656 ms
  ^C
  ----ape PING Statistics----
  4 packets transmitted, 4 packets received, 0.0% packet loss
  round-trip min/avg/max/stddev = 0.649/0.818/1.286/0.312 ms      

この設定では、次に起動した時に ネットワークカードの設定を繰り返す必要があります。 起動毎に設定し直さなくて済むようにするには 2つのことをする必要があって: 最初に、 /etc/ifconfig.ne0 ファイルを作り、 次の行を書きます:

inet 192.168.1.1 netmask 0xffffff00      

次に、 /etc/rc.conf ファイルで 次のオプションを設定します。

auto_ifconfig=YES      

次に起動したときには、 設定は自動的に行われます。

/etc/hosts ファイルは IP アドレスと文字による別名のデータベースで: 内部ネットワークに属する全てのホストのアドレスを書いておきます。 例えば:

Example 10-9. /etc/hosts

#     $NetBSD: hosts,v 1.4 1997/01/09 05:33:14 mikel Exp $
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# It is used only for "ifconfig" and other operations
# before the nameserver is started.
#
#
127.0.0.1             localhost
#
# RFC 1918 specifies that these networks are "internal".
# 10.0.0.0    10.255.255.255
# 172.16.0.0  172.31.255.255
# 192.168.0.0 192.168.255.255

192.168.1.1   ape.insetti.net ape
192.168.1.2   vespa.insetti.net vespa
192.168.1.0   insetti.net        

/etc/nsswitch.confExample 10-2 に説明されているように 変更します。

註: この例では、ネットワークカードがカーネルによって ne0 と認識されているので、 /etc/ifconfig.ne0 と言うファイルを作りました。 他のカードを使う場合は、 ファイル名の ne0 と言う部分を カードに合わせて適切な名前にしてください。

要約すると、ネットワーク設定には次のことを行うことが必要です: ネットワークカードを装着し、物理的に接続します。 次にそれらを設定し (ifconfig で)、 最後に、 /etc/hosts ファイルと /etc/nsswitch.conf ファイルを変更します。 この種のネットワーク管理は非常に簡単で、 手の込んだ事を必要とせず、小規模ネットワークに適しています。

10.1.5. シリアルケーブルでの2台のコンピューター接続

ネットワークに繋いでいない2台のコンピューター間でファイル転送が 必要な時、特にフロッピーを使ってファイルをコピーするのが実用的では ない時には、2台のコンピューターを シリアルケーブル ( null modem ケーブル(訳註:クロスケーブル))でネットワークすることができます。 次の節に設定について記述します。

10.1.5.1. NetBSD と BSD や Linux の接続

両方の機械で NetBSD が走っている場合 が一番簡単で: SLIP プロトコルで接続するのが非常に簡単です。 1台目の機械に次のコマンドを入力し:

# slattach /dev/tty00
  # ifconfig sl0 inet 192.168.1.1 192.168.1.2
        

2台目の機械には、次のコマンドを入力し:

# slattach /dev/tty00
  # ifconfig sl0 inet 192.168.1.2 192.168.1.1
        

接続試験には ping が使え; 例えば、 2台目の機械でこうします:

# ping 192.168.1.1        

これが全部動いていれば、 2台間のネットワーク接続が動いていて、 ftptelnet や、他、 同様なコマンドを実行できます。 文字列によるホスト名は /etc/hosts ファイルに書いておくことができます。

  • 上の例では、両方のパソコンで最初のシリアルポート (/dev/tty0) を使いました。 他のポートを使う場合、 デバイス名を置き換えてください。

  • 192.168.x.x といったIP アドレスは "内部" ネットワークの為に予約されています。 1台目のパソコンを 192.168.1.1 、 2台目には 192.168.1.2にしました。

  • 接続を高速化するために slattach-s speed オプションを指定できます。

  • inetd が動いていて ftpd サーバーが有効になっているだけで ftpでファイルの転送ができます。

Linux: 2台のうち1台が Linux 機なら、 Linux 側のコマンドが若干違うだけです。 Linux 機にアドレス 192.168.1.2 をつけるなら、 次のコマンドで:

# slattach -p slip -s 115200 /dev/ttyS0 &
  # ifconfig sl0 192.168.1.2 pointopoint 192.168.1.1 up
  # route add 192.168.1.1 dev sl0
        
最初のコマンドで "&" を忘れないようにしてください。

10.1.5.2. NetBSD と Windows NT の接続

NetBSD と Windows NT は (大抵) シリアル クロス ケーブルでネットワークを組めます。 基本的には、 Windows NT 上で "Remote Access" 接続を行い、 NetBSD 上では pppd を起動します。

/root.ppprc ファイルを作ってから、 root で pppd を実行します。 次の例を元に 手を加えてください。

connect '/usr/sbin/chat -v CLIENT CLIENTSERVER'
  local
  tty00  
  115200
  crtscts
  lock   
  noauth
  nodefaultroute
  :192.168.1.2        

最初の行については、この節の後ろで説明します; 192.168.1.2 は Windows NT 機につなぐ NetBSD の IP アドレスで; tty00 は接続に使うシリアルポート (1番目のシリアルポート)です。

NT 側の null modem デバイスをコントロールパネル(モデムのアイコン) からインストールし、そのモデムを使って Remote Access 接続を作る必要があります。 null modem ドライバーは Windows NT 4 では標準ですが、ですが、それは 100% null modem ではなく: 接続がアクティブになってから、 NT は CLIENT と言う文字列を送信し、 CLIENTSERVER と言う応答が帰ってくるのを待ちます。 これは、 .ppprc ファイルの最初の行: chat が、接続が activated か、落ちるかの時に NT に応答する必要があるということです。

Remote Access 接続の設定の中でつぎの指定をする必要があり: null modem を使う、 電話番号を "1" (とにかく、使われていないもの)、 PPP サーバー、 TCP/IP プロトコルだけを有効に、 IP アドレスとネームサーバーはサーバー (この場合 NetBSD)からのものを使う。 ハードウェア転送制御を選び、ポートの設定は 115200 8N1 とします。

これで接続のための準備が整いました。

  • 2台のシリアルポートを クロスケーブルで繋ぎます。

  • NetBSD の pppd を起動します。 pppd のメッセージを見るには: tail -f /var/log/messages)。

  • Windows NT の Remote Access をアクティブにします。

10.1.5.3. NetBSD と Windows 95 の接続

Windows 95 の設定も Windows NT の場合と同様で: Windows 95 のリモートアクセスと NetBSD の PPP サーバーを使います。 ほとんどの (全部ではないかもしれませんが) Windows 95 リリースでは null modem ドライバーが入っていないので、 少し面倒なことになります。 一番簡単な解決法はインターネット上で null modem ドライバーを探して (それは小さな .INF ファイルです)、 Windows NT の場合と同様にすることです。 唯一違うのは .ppprc ファイルの最初の行 ( chat 呼び出し) が無くても良いことです。

Windows 95 で real null modem ドライバーが見つからなかった場合でも、 ちょっとしたトリックで可能です:

  • Section 10.1.5.2 に書かれているような Remote Access 接続を "Standard Modem" を使用して作ります。

  • .ppprc 中の chat の呼び出し行を次のように書き換えます。

    connect '/usr/sbin/chat -v ATH OK AT OK ATE0V1 OK AT OK ATDT CONNECT'        

  • Section 10.1.5.2 に書かれているようにして接続をします。

この方法では chat プログラムは接続されるときに呼ばれ Windows 95 に標準モデムと思わせるような エミュレートをし、 Windows 95 に対して 標準モデムがするだろう応答と同じ応答をします。 Windows 95 がモデムコマンド文字列を送出すれば chat は必ず OK を返します。

10.2. 進んだ話題

この章 (Introduction to TCP/IP Networking) は Hubert Feyrer による寄稿です

10.2.1. IPNAT

わかりにくい頭字語 IPNAT は Internet Protocol Network Address Translation のことで、 内部ネットワークをインターネットに繋ぐものです。 この意味は たった1つの "本物の" IP アドレス、 スタティック(静的) あるいは ダイナミック(動的) IP アドレスで、 IPNAT が走っているゲートウェーによって 内部ネットワークの全てのホストが同時にインターネットに接続できる にするものです。

IPNAT の利用法の例が /usr/share/examples/ipf ディレクトリーに幾つか有りますので: BASIC.NAT ファイル及び nat-setup を見てください。

この節で記述する設定例の詳細は Figure 10-1 の通りで: host 1 はモデムでプロバイダーに電話をかけ、 ダイナミック IP アドレスを貰ってインターネットに接続します。 host 2 及び host 3 は 通常設定ではインターネットに接続できませんが: IPNAT がそれを 可能にし: host 1 が hosts 2 及び 3 のゲートウェーとして働きます。

Figure 10-1. ゲートウェーのあるネットワーク

10.2.1.1. ゲートウェー/ファイヤーウォールの設定

IPNAT を使うにはカーネルコンフィグレーションファイルの "pseudo-device ipfilter" を有効にしたカーネルを 使う必要があります。 現在のカーネルが有効になっているかを調べる方法は:

# sysctl net.inet.ip.forwarding
  net.inet.ip.forwarding = 1        

上の例のように結果が "1" にならば有効になっていて、そうではなく、 "0"ならば、このオプションが無効になっています。 2通りの方法があって:

  1. デフォルトで GATEWAY オプションを有効になっている 新しいカーネルをコンパイルする。

  2. 次のコマンドで、現在のカーネルのそのオプションを 有効にする:

    # sysctl -w net.inet.ip.forwarding=1            

    追加される sysctl 設定は /etc/sysctl.conf に書いておく事で、起動時に自動的に設定されます。 この場合書いておくのは

    net.inet.ip.forwarding=1	      

この節の残りでは PPP 接続によりプロバイダーに接続される度に 自動的にがかかるようになる IPNAT の設定を書きます。 この設定では、(例えば)家庭ネットワークの全てのホストが、 それが NetBSD を使ってなくても、ゲートウェー機を通じて インターネットに接続できるようになります。

最初に、 /etc/ipnat.conf ファイルを作り、次のルールを書きます:

map ppp0 192.168.1.0/24 -> 0/32 proxy port ftp ftp/tcp
map ppp0 192.168.1.0/24 -> 0/32 portmap tcp/udp 40000:60000
map ppp0 192.168.1.0/24 -> 0/32        

192.168.1.0/24 は割り当てたネットワークアドレスです。 この設定ファイルの1 行目はオプションで: active FTP がゲートウェー越えで動けるようにするものです。 2行目は tcp パケット及び udp パケットを正しく扱えるようにするもので; 複数対1 の通信関係の為に portmapping は重要です。) 3行目は ICMP, ping 等を有効にします。

/etc/ppp/ip-up ファイルを作ります; これは PPP 接続が動き出す毎に 自動的に呼び出されます。

#!/bin/sh
# /etc/ppp/ip-up
/etc/rc.d/ipnat forcestart        

/etc/ppp/ip-down ファイルを作ります; これは PPP 接続が閉じられたとき 自動的に呼び出されます。

#!/bin/sh
# /etc/ppp/ip-down
/etc/rc.d/ipnat forcestop        

ip-upip-down は共に実行可能であることが必要です :

# chmod u+x ip-up ip-down        

ゲートウェイ機の準備ができました。

10.2.1.2. クライアントの設定

ゲートウェイ機上に /etc/resolv.conf ファイルのようなものを つくります。

次のコマンドを入力して:

# route add default 192.168.1.1        

192.168.1.1 は前節で設定したゲートウェイ機の アドレスです。

もちろん、毎回打ちこむことはしたくないでしょうから、 良い方法があって、/etc/rc.conf ファイルの "defaultroute" エントリーで 定義するか、 /etc/mygate ファイルにゲートウェイのアドレスを 書くかの どちらかででき: /etc/mygate (または defaultroute オプション) の内容を route add default コマンドの引数として使うことで、 デフォルトルートはシステム初期化中に自動的に設定されます。

クライアント機が NetBSD を使っていなければ、設定は変わります。 Windows パソコンでは、TCP/IP プロトコルのプロパティ、ゲートウェイで NetBSD ゲートウェイの IP アドレスを ゲートウェイとして設定します。

以上がクライアント機に必要なことです。

10.2.1.3. 便利なコマンド

次のコマンドが、問題の診断に便利です:

ping

netstat -r

ルーティングテーブルの表示 ( route show と同様)

traceroute

クライアント上で、 行き先までのパケットのルートを追跡して表示します

tcpdump

ゲートウェイ上で TCP/IP traffic のモニターに使います

10.2.2. NFS

これで、 NFS を使って、ネットワークを通じてファイルやディレクトリーの 共有するための準備ができました。 ファイル共有の視点で見て、ファイルやディレクトリーの アクセスを提供するコンピューターを server と呼び、それらのファイルやディレクトリーを 使うコンピューターを client と呼びます。 1台のコンピューターでサーバーとクライアントに同時になることができます。

  • カーネルはクライアント及びサーバーそれぞれにふさわしいオプションで コンパイルされている必要があります (そのオプションは、カーネルコンフィグレーションファイル 中に簡単に見つけられます。 NFS 関係のカーネルオプションに関する詳しいことは Section 10.1.1 を ご覧ください。

  • サーバーでは /etc/inetd.confRPC サービスが有効になっている必要があります。

  • サーバーの /etc/rc.conf では inetdportmap デーモン、 nfs_server オプションが有効になっている必要があります。

  • クライアントの /etc/rc.conf では inetd と nfs_client が有効になっている 必要があります。

  • サーバーはエクスポートするディレクトリーを /etc/exports に list してから、 kill -HUP `cat /var/run/mountd.pid コマンドを実行します。

クライアント機が NFS でリモートディレクトリーにアクセスできるようになるには:

  • サーバーがそのディレクトリーをエクスポートしている

  • クライアント機が次のコマンドでリモートディレクトリーをマウントしている mount server:/xx/yy /mnt

mount コマンドはリモートディレクトリーに関するオプションが 豊富にあって、あまり直感的に判るものでは有りません (控えめに言っても)。

10.2.2.1. NFS 設定例

警告: この複雑な設定例は NetBSD メーリングリストで 仕入れましたが、 私は試していません; NFS を働かせる方法のアイデアにはなるでしょう。

シナリオは次の通り: クライアント機が5台 (cli1, ..., cli5) で、サーバー (buzz.toys.org) の幾つかのディレクトリーを使います。 幾つかのディレクトリーは 各クライアント専用にエクスポートしていて、 他のディレクトリーを 全てのクライアント機で 共有します。

サーバーからエクスポートされているディレクトリーは:

/export/cli?/root

5つのクライアントマシンそれぞれの 固有のルートディレクトリー。

/export/cli?/swap

5つのクライアントマシンそれぞれのスワップディレクトリーで5つ。

/export/common/usr

/usr ディレクトリー; 全クライアント共通。

/usr/src

全クライアントマシンで共通の /usr/src ディレクトリー 。

次のファイルシステムがサーバー上にあり

/dev/ra0a on /
  /dev/ra0f on /usr
  /dev/ra1a on /usr/src
  /dev/ra2a on /export        

各クライアントは次のファイルシステムが必要です

buzz:/export/cli?/root on /
  buzz:/export/common/usr on /usr
  buzz:/usr/src on /usr/src        

サーバーの設定は次のように:

# /etc/exports
  /usr/src -network 123.45.67.0 -mask 255.255.255.0
  /export  -alldirs -maproot=root -network 123.45.67.0 -mask 255.255.255.0        

クライアントマシンでは /etc/fstab の中身を

buzz:/export/cli?/root / nfs rw
  buzz:/export/common/usr /usr nfs rw,nodev,nosuid
  buzz:/usr/src /usr/src rw,nodev,nosuid        

上の例の最初の行の "?" 文字 は クライアント機ごとにつけた番号です。

10.2.3. amd での /net 設定

10.2.3.1. 概論

NFS (や他の) マウントの問題 は、 通常、それをするのに root 権限になる必要があって、 ユーザーには不便です。 amd を使うことで、 certain ディレクトリー (ここでは /net)を だれもが一般ユーザーで NFS-mount でき、 NFS サーバーに長いこと実際にエクスポートされているファイルシステムのようにアクセスできる設定が できます。

certain サーバーがファイルシステムの エクスポートをしているか、また、それはどれか、調べるには、 showmount コマンドに -e (export) スイッチを付けて:

% showmount -e wuarchive.wustl.edu
  Exports list on wuarchive.wustl.edu:
  /export/home                       onc.wustl.edu 
  /export/local                      onc.wustl.edu 
  /export/adm/log                    onc.wustl.edu 
  /usr                               onc.wustl.edu 
  /                                  onc.wustl.edu 
  /archive                           Everyone        

あるディレクトリー (例えば /archive/systems/unix/NetBSD) の下をアクセスするためにディレクトリーをマウントしたければ、 単にそのディレクトリーに行くだけで:

% cd /net/wuarchive.wustl.edu/archive/systems/unix/NetBSD        

ファイルシステムは ( amd によって) マウントされ、 ディレクトリーが システムのスーパーユーザーによって マウントされたように、あらゆるファイルの アクセスができます。

10.2.3.2. 実際の設定

/net ディレクトリーの設定は 次のようにしてできます (基本 amd 設定も含みます):

  1. /etc/rc.conf で、次の変数を設定し:

    amd=yes            
  2. mkdir /amd

  3. mkdir /net

  4. /usr/share/examples/amd/master より 、 /etc/amd/masterに次の通り書き:

    /net            /etc/amd/net            
  5. /usr/share/examples/amd/net を 例に、 /etc/amd/net に次の通り書きます:

    /defaults       type:=host;rhost:=${key};fs:=${autodir}/${rhost}/root
      *               host==${key};type:=link;fs:=/                           \
                      host!=${key};opts:=ro,soft,intr,nodev,nosuid,noconn	    
  6. リブートするか、amd を手動で (再)起動 し:

    # sh /etc/rc.d/amd restart	    

10.2.4.6to4 での IPv6 接続性 & 移行

この節では話題を IPv6 ネットワーク接続のしかたについてに集中しますが、 - ネイティブ接続をするのは まだ簡単なことではなく - ネイティブの IPv6 ピアーが出てくるまでの間の ネイティブ IPv6 接続 の代わりについて記述します。

IPv6 ネイティブを提供する ISP を見つけるにはかなりの幸運が必要です。 次に必要なものは、 traffic を扱えるルーターです。 現在のところ、 全てのルーターメーカーが IPv6 のサポートをしているわけではなく、 もし、サポートしていても、ハードウェアで高速化された IPv6 ルーティングやスイッチングがあると言うわけでは有りません。 今日、むしろルーターハードウェアーの 安い代替案として、普通のパソコンをルーターとして設定して使われるのが一般的です。 例えば、とある Linux や BSD 、 NetBSD のような、 を使い、ルーティングプロトコルの扱いに Zebra のようなソフトウェアを使うことです。 このソリューションは、今日、 IPv6 接続性を求むサイトで一般的なことです。 この欠点は、 IPv6 をサポートする ISP が必要なことで、 IPv6 だけの uplink が必要なことです。

これが、あなたの選択肢に入る余地が無いとしても、 まだ IPv6 接続性を得る方法があって、 トンネルを使うという方法です。 Figure 10-2 にあるように、ケーブル上を IPv6 が流れる代わりに、 IPv4 のカプセルに包まれた IPv6 パケットが流れるものです。現存している IPv4 インフラを使い、 カプセル化されたパケットを IPv6 が使える uplink に送り、 そこでカプセルを解いて、ネイティブ IPv6 経由で IPv6 パケットを発送してもらいます。

Figure 10-2. しばしば変換法として使われる IPv4 パケットへの IPv6 トンネリング

トンネルを使うとき、2つの可能性があります。 1つはいわゆる "configured" トンネルの利用で、 もう1つは "automatic" トンネルの利用です。 "configured" トンネルはトンネルの両端で準備をすることが必要で、 設定情報を交換する何らかの登録のようなものとともに用いられます。 例えばこのような configured トンネルに [RFC1933] に書かれている IPv6-over-IPv4 encapsulation があり 例えば NetBSD では gif(4) デバイスに実装されています。

"automatic" トンネルは なんらかの種類の IPv6 接続性を持つ public サーバーから成り、例えば 6Bone 経由です。 サーバーは public な 接続性情報をつくり、 特に登録をすることもなしにアップリンクに使える トンネルプロトコルを動かしてています。 このようなプロトコルで良く使われているものに [RFC3056] に書かれている 6to4 メカニズムがあり、 NetBSD では stf(4) デバイスの中に実装されています。 IPv6-情報を登録することを要求されないメカニズムには、ほかに 6over4 があり、 IPv6 を 例えばイーサネットや FDDI の代わりに、 マルチキャストが有効な IPv4 ネットワークの上で運ぶ実装です。 6over4 のドキュメントは [RFC2529] です。 この主な欠点はマルチキャスト infrastructure が必要なことです。. もし、マルチキャスト環境が使えなければ、 直接 configured IPv6 トンネルを設定すればよく、 この場合、そんなに困ることではありません。

10.2.4.1. Getting 6to4 IPv6 up & running

6to4 は IPv4 uplink だけを持つホストで IPv6 接続性を手に入れる 簡単な方法です。 とくに、 Section 9.1.7 に書いてある background を have るならば。 ダイナミックに割り当てられた IPv4 アドレスと同様にスタティックなものが用いられ、 例えば、今日ではモデムダイアルアップ方式でも見つけられます。 ダイナミック IPv4 アドレスなら、 IP アドレス変化によって、 データの受信に問題が起こり、 つまり、 永続性のサービスを run できません。

この節の設定例は NetBSD 1.5.2 用のものです。

10.2.4.2. 6to4 のためのアドレス空間を得る

あなたのサイトの 6to4 IPv6 設定は1つの IPv6 アドレスから 成り立っておらず; その代わり、 /48 ネットワーク全体が手に入ります! その IPv6 アドレスは、あなたの (1つの) IPv4 アドレスから 導き出されます。アドレスプリフィックス "2002:" は 6to4 ベースの アドレスの為に予約されています (すなわち、 IPv6 アドレスは IPv4 アドレスから得ます) 次の 32 bit はあなたの IPv4 アドレスです。 この方法によって、 /48 ネットワークがあなた自身の用途に使えます。 16 bit の空間 によって、 それぞれ 264 ノードを持つことのできる IPv6 サブネットを 216 与えられます。 Figure 10-3 に IPv4 アドレスから得られる IPv6 アドレス (範囲) を示します。

6to4 プリフィックスと、 ワールドワイドでユニークな IPv4 アドレスのおかげで、このアドレスブロックはユニークで、 該当 IPv4 アドレスを持ったあなたの機械に割り当てられます。

Figure 10-3. IPv4 アドレスから IPv6 アドレスを取り出す 6to4

10.2.4.3. 接続のしかた

configured "IPv6-over-IPv4 tunnel" 設定 とは違って、 6bone ゲートウェーへの登録は必要なく、 全ての ( IPv4 でカプセル化された) IPv6 trafficが送られます。 代わりに、 IPv6 アドレスは、あなたの IPv4 から導かれたもので、 全ての応答はあなたの一番近くの 6to4 ゲートウェーを通って 送られます。 パケットのカプセル開放は 6to4-capable ネットワークインターフェースによって行われ、 結果の IPv6 パッケージはあなたの経路設定に従って配送されます。 ( 6to4 を割り当てたネットワークに2台以上の機械がある場合)。

IPv6 パケットの送出では、 6to4-capable ネットワークインターフェース が IPv6 パケットを取って、 IPv4 パケットにカプセル化します。 uplink には 6bone に接続された 6to4 ゲートウェーが必要で、 それがカプセル開放をし、 6Bone に転送します。 Figure 10-4 にこれが描かれています。

Figure 10-4. 6to4 では要求と応答で異なるゲートウェーを通るルートをとれる

10.2.4.4. セキュリティ問題

"configured tunnel" 設定と対照的に、普通、あなたは 6to4 をきちんと動作させれるようには認証されていない出所からの 6to4 パケットを ブロックするようにパケットフィルターを設定することができません。 それなりに、悪意のあるユーザーは 無効な/有害な IPv6 ペイロードのパケットを送ることができます。 もし、まだ境界ゲートウェーでフィルターしてなくても、 以下に示す特徴のパケット は正当な 6to4 パケットとするべきではなくて、 いくつかのファイヤーウォールはそれらを正当であるとするようです:

  • 未指定 IPv4 始点/終点 アドレス: 0.0.0.0/8

  • outer (v4) 始点/終点の ループバックアドレス: 127.0.0.0/8

  • 始点/終点 の IPv4 マルチキャスト : 224.0.0.0/4

  • limited ブロードキャスト: 255.0.0.0/8

  • 始点/終点のサブネットブロードキャストアドレス : あなたの IPv4 設定に依存

NetBSD stf(4) マニュアルページにはフィルタリングに関するいくつかの更なるアドバイス と同様に、デフォルトの KAME スタックが遮る いくつかの一般的な設定間違いについて書かれています。 ですが、これらのフィルターの要求に対して 6to4 は完全に安全でないことを覚えておいてください。 さらに、 捏造された 6to4 パケットが問題を起こすなら、 IPv6 パケットが 改変されていないことを保証するのに IPsec 認証 を使うことができます。

10.2.4.5. 6to4 設定に必要なデータ

IPv6 over 6to4 のセットアップと設定には、 あらかじめ、いくらかの設定情報を知っておく必要があります。 これらは:

  • あなたの ローカル IPv4 アドレス。 ほとんどの Unix システムで 'ifconfig -a' か 'netstat -i' コマンドのどちらででも調べられます。 NAT を使った ゲートウェー等を使っているなら、 プライベートアドレス (10/8 や 192.168/16) ではなく、 外から見ることのできる official のアドレスを使ってください。

    この例では、ローカル IPv4 アドレスとして 62.224.57.114 を使います。

  • あなたのローカル IPv6 アドレスは IPv4 アドレスから得るものです。 方法については Figure 10-3 を ご覧ください。

    この例では、 これは 2002:3ee0:3972:0001::1 (62.224.57.114 == 0x3ee03972, 0001::1 は任意 に選んだもの)。

  • 利用したい 6to4 uplink ゲートウェイの IPv6 アドレス。 IPv6 アドレスには、通常の 6to4 translation では そのIPv4 アドレスも含まれています。

    ここでは 2002:c25f:6cbf::1 (== 194.95.108.191 == 6to4.ipv6.fh-regensburg.de) を使います。

10.2.4.6. Kernel Preparation

6to4 パケットを処理するには、 オペレーティングシステムのカーネルが それらのことについて知っている必要があります。 6to4 のことを知っていてそれを扱えるドライバーが入っていなければなりません。

NetBSD カーネルについては、 IPv6 と 6to4 を使うために kernel config ファイルに次のものを入れてください。 例、 NetBSD では:

options INET6                 # IPv6  pseudo-device stf             # 6to4 IPv6 over IPv4 encapsulation

註 stf(4) デバイスはデフォルトでは有効化されていません。 カーネルを再構築して、新しいカーネルでリブートしてください。 新しいカーネルの設定と構築、インストールについて の更なる情報は Chapter 7 を 見てください!

10.2.4.7. 6to4 設定

この節では 6to4 設定のコマンドについて記述します。 簡単に言うと、それのステップはこうで:

  1. インターフェースの設定

  2. デフォルトルートの設定

  3. 必要ならば ルーター通知(Router Advertisement:RA)の設定

6to4 設定の最初の段階は 6to4 インターフェースに IPv6 アドレスを割り当てることです。 これは ifconfig(8) コマンドで行います。 上の例では、割り当てをする NetBSD のコマンドは:

# ifconfig stf0 inet6 2002:3ee0:3972:1::1 prefixlen 16 alias  (ローカル) 

これらのコマンドで 6to4 デバイスの設定後、 すべての IPv6 traffic を 6to4 (uplink) ゲートウェイに フォワードするのにルーティングの設定が必要です。 この一番良い方法はデフォルトルートを設定することで、 NetBSD ではそのコマンドは:

# route add -inet6 default 2002:cdb2:5ac2::1 (remote)

註 NetBSD の stf(4) デバイスは 6to4 uplinkの IPv4 アドレス を ルーティングテーブルから決めます。 この特徴により、 例えば via 6Bone 経由の IPv6 uplinkがあれば あなた自身の 6to4 (uplink) ゲートウェイが簡単に設定できます。

これらのコマンドを実行すれば、 IPv6-enabled 世界につながります - おめでとう! name resolution は、まだ IPv4 でですが、 IPv6-site like www.kame.net や www6.netbsd.org のような IPv6-site に ping をかけることができ:

# /sbin/ping6 www.kame.net

6to4 経由の IPv6 設定の最後のステップとして、 あなたがネットワーク上にいくつかのホストを持っている場合 ルーター通知をしたくなるでしょう。 ノードごとに 6to4 設定することができますが、 ノードから他へのルーティングは非常に高くなるでしょう - パケットが6to4 ゲートウェーに送られて、隣のノードに帰ってくる ということになります。 代わりに、1台に 6to4 を設定し、ケーブル上は IPv6 ネイティブでお話する方法のほうが、 handling things よりもよいでしょう。

この最初のステップは、イーサネットに IPv6 アドレスを 振ることです。次の例では IPv6 の サブネットが "2" で、 イーサネットインターフェースの MAC アドレス が 12:34:56:78:9a:bc 、 つまり ローカルゲートウェイイーサネットインターフェースの IP アドレスが 2002:3ee0:3972:2:1234:56ff:fe78:9abc だとします。 このアドレスをイーサネットインターフェースに割り当てるには、 例えば

ifconfig ne0 inet6 alias 2002:3ee0:3972:2:1234:56ff:fe78:9abc	

ここで、 'ne0' はイーサネットカードインターフェースの例です。 これは、どの種類のカードを使っているかによって、 各自変わるでしょう。

次に必要なことは、パケットがローカル 6to4 デバイスから イーサネットデバイス に送られ戻ってくるように ルーターをきちんと設定することです。 IPv6 パケットフォワーディングを有効にするには、 NetBSD の /etc/rc.conf で "ip6mode=router" を設定します。これによって、 sysctl によって "net.inet6.ip6.forwarding" を "1" に設定されます:

# sysctl -w net.inet6.ip6.forwarding=1 

Figure 10-5. パケットフォワーディングが必要な 6to4 ルーター

BSD でルーター通知の設定をするには、 /etc/rtadvd.conf ファイルのチェックが必要です。 いろいろ設定することができるようになっていますが、 通常、何も入っていないデフォルト設定で大丈夫です。 デフォルト状態で、ルーターのネットワークインターフェース すべての上で見つかった IPv6 アドレスが通知されます。

チェックすることで、ルーター通知設定は正しく、 IPv6 forwarding が有効になり、デーモンでの 取り扱いが始められるようになります。 NetBSDでは、 'rtadvd'と呼ばれます。 起動は手動(初回のテストに) または システムのスタートアップスクリプトを通してのどちらでもでき、 全てのローカルノードが、既存のリンクローカルアドレス以外に、 通知されたサブネットアドレスで自動的に設定されます。

# rtadvd

10.2.4.8. pkgsrc/net/6to4 を使って Quickstart

ここまで、 6to4 の働きとて手動設定法を書いてきました。 自動設定法では、 例えば online になったとき、 '6to4' パッケージは便利です。 プロバイダから割り当てられた IPv4 アドレスから IPv6 アドレスを決定し、 設定して接続されます。

pkgsrc/net/6to4 パッケージの設定のステップは:

  1. 6to4-1.1nb1 パッケージを pkgsrc からコンパイルするか、 pkg_add を使って インストールしてください。

    # cd /usr/pkgsrc/net/6to4
      # make install
    	    
  2. 上の解説を見て、カーネルに stf(4) 擬似デバイスが入っているか 確認してください。

  3. '6to4' パッケージの設定をします。 最初に/usr/pkg/etc/6to4.conf-example/usr/pkg/etc/6to4.conf にコピーし、それから変数を調整します。 このファイルは perl 文法であることに注意してください。

    # cd /usr/pkg/etc
      # cp 6to4.conf-example 6to4.conf
      # vi 6to4.conf
    	    

    6to4.conf に設定できる全ての変数についての説明は、 6to4(8) マニュアルページをご覧ください。 PPP 経由のダイアルアップ IP で、 家庭あるいは仕事場ネットワークの他の IPv6 マシンに Router Advertizing をしようと思わないならば、 何も設定する必要がありません。 Router Advertising を設定したければ、 in_if に 内部向け (イーサネット) インターフェースを設定することが必要で、 例えば

    $in_if="rtk0";            # Inside (ethernet) interface 
  4. ダイヤルアップをし、それから、手動で 6to4 コマンドを起動します:

    # /usr/pkg/sbin/6to4.pl start	    

    それで接続されるはずなので、 ping6(8) 等を使って 動いていることを確認してください。 動くなら、 /etc/ppp/ip-up スクリプトに次の行を入れることで online になる毎にコマンドが実行されます :

    logger -p user.info -t ip-up Configuring 6to4 IPv6
      /usr/pkg/sbin/6to4.pl stop
      /usr/pkg/sbin/6to4.pl start	    
  5. LAN の IPv6 route にしたければ、 Router Advertising の設定として 6to4.pl を次のように使うこともでき:

    # /usr/pkg/sbin/6to4 rtadvd-start	    

    常に変わらない設定として /etc/ppp/ip-up に 書きこむと良いでしょう。

  6. 6to4 設定が自動で行われるように /etc/ppp/ip-up に手を加えたなら、 /etc/ppp/ip-down も書き換えて、 offline になったときに それが止まるようにしたいと思います。 /etc/ppp/ip-down に書き加えるものは次の通りで:

    logger -p user.info -t ip-down Shutting down 6to4 IPv6
      /usr/pkg/sbin/6to4.pl rtadvd-stop     /usr/pkg/sbin/6to4.pl stop 

10.2.4.9. わかっている 6to4 ゲートウェイ

現在、公開 6to4 ゲートウェイは多くはなく、 少ない中からも、 ネット上で最も近いものを使いたいでしょう。 動作が知られている 6to4 ゲートウェイのリストは http://www.kfu.com/~nsayer/6to4/ にあります。 テストでは 6to4.kfu.com と 6to4.ipv6.microsoft.com だけが動いてました。 Cisco は他に持っていて、それは利用前に登録が必要です。 http://www.cisco.com/ipv6/ をご覧ください。

ドイツにも 6to4 実験サーバーがあり、 6to4.ipv6.fh-regensburg.de. です。 このサーバーは NetBSD 1.5 で動いていて、 上に書かれた設定法が使われています。この機械の設定全体は http://www.feyrer.de/IPv6/netstart.local で見ることができます。

10.2.4.10. Conclusion & Further Reading

Compared to where IPv4 is today, IPv6 is still in it's early steps. It is working, there are all sort of services and clients available, only the userbase is missing. It is hoped the information provided here helps people better understand what IPv6 is, and to start playing with it.

A few links should be mentioned here for interested parties: