PC:cubeをルータとして使えるようにしたときの記録です.

まず,OSは,UNIXかWindowsNT系ならOKです.
今回は,Linux2.2(VineLinux2.0)を使っています.
理由として,rpmコマンドでインストールやアップグレードが簡単
豊富はrpmパッケージ,最初から日本語が使えるためです. 

もっとも重要なことは,NICを2枚さし,その間をデータが通り抜けるようにします(forwarding)
プライベートアドレスは,グローバルなインターネットには,存在しないアドレスであり,
インターネットのサービスを利用することができません. 
そこで,これを解決するために,代理サーバ(ProxyServer)が必要になります.
これをSquidで作製しました.
ルータとは関係ありませんが,常時起動しているWindows用のファイル&プリンタサーバやタイムサーバ
サブネット内のネームサーバ,DHCPサーバ,X端末用tftpサーバを一緒に組み込むとより
快適なサブネット生活が送れます.

今回は,ワークステーションが,130.153.140.0につながり,そこにX端末をアクセスさせるために
NAT(Network Address Translator)という方式と用いています.これは,グローバル-グローバル間のアドレス
の時に,用いる方法で,1つのアドレスに対し,1つのアドレスが対応します.

これに対し,PNAT(Parive NeteorkAddress Translator)というものがあります.
これは,Linuxでは,よくIPマスカレードとよばれているもので,グローバル-プライベート間のアドレスの時に
用いる方法です.ひとつのアドレスに対し,複数のアドレスが対応します.
このため,グローバルなアドレスのワークステーションからプライベートなアドレスのX端末には,DISPALYの設定が
できなく今回は,使っていません.,Proxyサーバがいらないため,簡単にrouterを作ることができます.
電子科のどこかの研究室がこの方式で運用しているらしい.


インストール:
大きな流れとしては,以下の通りです.
LinuxのCDをブートし,インストーラを起動
HDDのFDISK パーティション作製
Host名,IPaddressの設定
パッケージの選択
再起動 終了

今回のHDDは,このようになっています.ポイントとして
/varにsquidのWEBのキャッシュが入りますので大きくとりました
/home10は,将来のWindowsFileServer(Samba)をインストールしたときの
みんなのWindows用のホームディレクトリとするためです.
ファイルシステム      1k-ブロック 使用済   使用可 使用率% マウント場所
/dev/sda1              2016016   1394236    519368  73% /
/dev/sda5             20161172     79168  19057864   0% /home10
/dev/sda6              1011928    200756    759768  21% /var

パッケージは,いちいち選択しなくとも,ALLでもかまいません.
ただし,/etc/rc.d/以下の不要な起動スクリプトだけは,確認したほうがよいかも知れません.

Host名やIPは,インストール時eth0だけの設定を行うことにあるので,
起動後,netconf などで,eth1についてもネットワークの設定を行う必要があります.
/etc/sysconfig/netwark-script/ifcfg-eth0 , eth1が実際の設定ファイルです. 
以下が ifcfg-eth0 の内容です.
DEVICE="eth0" // デバイス名 
IPADDR="172.21.88.1" //IPAddress 
NETMASK="255.255.255.0"//subnetmask 
ONBOOT="yes"// ブート時にこのネットワークデバイスを有効にするか 
BOOTPROTO="none"//DHCP クライアント等を使う時に指定する 
IPXNETNUM_802_2=""// これ以降は,IPX/SPX の設定なので今回は無視 
IPXPRIMARY_802_2="no" 
IPXACTIVE_802_2="no" 
IPXNETNUM_802_3="" 
IPXPRIMARY_802_3="no" 
IPXACTIVE_802_3="no" 
IPXNETNUM_ETHERII="" 
IPXPRIMARY_ETHERII="no" 
IPXACTIVE_ETHERII="no" 
IPXNETNUM_SNAP="" 
IPXPRIMARY_SNAP="no" 
IPXACTIVE_SNAP="no"// ここまで 
フォワーディングを可能にするため,/proc/sys/net/ipv4/ip_forward を "1"と記します.
これが無いと,ルートデーモンを起動させてもルーティングできません.

ルートデーモンには,gatedを用いました.これは,学内の他ルータがRIP2で動いているために,
それに合わせる必要があります. BSD 系では,routed がRIP2 に対応していますが, 
Linux では,routed がRIP2 に対応していませんそこで RIP2 に対応している gatedを用います. 
gated のURLは,http://www.gated.org です.日本のサイトは,ありません.
gated の設定は,/etc/gated.conf で行います
以下,/etc/gated.conf の内容です. 
rip yes{ 
interface all ripin ripout version 2; 
}; 
interface を eth0,eth1 等個別に指定することができます.
all で全てのネットワークデバイスになります 
例 interface eth0 ripin noripout; 
ripin(RIP 情報を受け入れるか),ripout(RIP 情報を出すか),その前にnoを付けることでその逆になります. 
version 2 を付けることで,RIP2 になり,これをはずすと RIP1 なります. 
rpm パッケージでインストールしますと,/etc/rc.d/rc3.d/K75gated* というスクリプトも作ってくれます.
K75gated を S76gated 等とSで始まる名前にすれば自動で起動します. 

gated の確認は,以下のことを行いました.
動作確認として,お互いのネットワーク内からping を打ちます.もし,RIP がきちんと動いていれば,それぞれ以下のようになります.globalNetwork 内からPrivateNetworkのマシンにping を打った時の例を示します.router マシンを130.153.140.55/24(Global) 172.21.88.1/24(Private) としています. 
#ping 172.21.88.5 
Pinging 172.21.88.55 with 32 bytes of data: 
Reply from 172.21.88.55: bytes=32 time<10ms TTL=127 
また,RIP は動いているが,gated.conf の設定が怪しい時には, 
以下のようになります.130.153.140.55 に経路情報を聞きにいっていますが,gated.conf の設定が間違っているため,172.21.88.55 に達することが出来ません. 
ping 172.21.88.55 
Pinging 172.21.88.55 with 32 bytes of data: 
Reply from 130.153.140.55: Destination host unreachable 
RIP が全く動いていない時は,以下のようになります.130.153.140.55 に経路情報を聞きに行かず,他のrouter に聞きにいっています. 
ping 172.21.88.55 
Pinging 172.21.88.55 with 32 bytes of data: 
Reply from 130.153.11.1: Destination host unreachable. 

次に,プロクシサーバですが,squidを用いました.
URLは,http://www.squid.org 日本のサイトは,http://cache.jp.apan.net/doc/Squid-FAQ-j.htmlです.

proxy(squid) のサーバ側の設定は,/etc/squid/squid.conf で行います. 
acl localdomain src 172.21.88.0/24 
acl mydomain src 130.153.140.0/24 
http_access allow localdomain 
http_access deny all 
で、172.21.88.0 以外からの proxy の使用を禁止します。 
localdomain は aclname であり、自由な名前をつけられます。 
さらに以下の様に3行で記述しますと,allow を localdomain,mydomain に対して行えます.
これが現在の設定です. 
http_access allow localdomain 
http_access allow mydomain 
http_access deny all 
特定の host に対して許可を取ることも可能です。 
ftp は以下のものを追加しないと使えません. 
ftp_user Squid@cube.ee.uec.ac.jp 
ftp をブラウザに表示する時の文字数を指定出来ます. 
ftp_list_width 32 これで 32文字表示 出来ます. 
また, squid は,DNS の名前解決した結果もcache に残すことが出来ます.
これにより,DNS server の負荷を下げられます. 
cache_dns_program /usr/lib/squid/dnsserver 
次の設定で,DNS serverに同時にアクセスさせる子プロセス数を指定出来ます. 
これによりproxyServerに同時に複数人からアクセスがあった際にも,URLの名前解決を高速化することが出来ます. 
dns_children 5 
cache_access_log /var/log/squid/access.log 
この設定を有効にしますと, どのホストからどのURL に閲覧しに行ったか /var/log/squid/access.log に
logとして残ります.現在これは, 無効になっています. 
また,proxy(squid)は,クライアントの設定も必要です. 
/etc/squid/squid.conf
http_port 3128
cache_mem  8 MB
cache_swap_low  90
cache_swap_high 95
cache_dir /var/spool/squid 100 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
ftp_user Squid@cube.ee.uec.ac.jp
ftp_list_width 32
cache_dns_program /usr/lib/squid/dnsserver
dns_children 5
dns_nameservers 130.153.149.2 130.153.13.17
acl localdomain src 172.21.88.0/24
acl mydomain src 130.153.140.0/24
acl all src 0.0.0.0/0.0.0.0
http_access allow localdomain
http_access allow mydomain 
http_access deny all
miss_access allow all
forwarded_for off

2枚NICをさし,gatedでルーティングし,プロクシ設定をすれば,最低限のことは,完成です.