%==================================================================== % 地惑専攻サーバ トラブルカルテ % 日時: 2001/10/28 % サーバ: DHCP & NAT サーバ (blue) % 文責: 杉山耕一朗 % 森川靖大 ■症状 プライベート空間に接続されている計算機が, グローバルネットワーク 空間へルーティングされなくなった. (断続的に) 一時的にルーティングされる時もあるが,大抵は数分〜数十分で再び ルーティングされなくなり,グローバルネットワーク空間へ出られなくなる. ■原因 joho21 の IP マスカレードの設定が中途半端に残っており, それが悪さを したもよう. joho21 が「自分は 192.168.0.1 だ」と返事していた. ■対応 joho21 のネットワーク線を抜く. joho21 の管理者に, 状況報告する旨メールを書く(別メールにて). ■対策 joho21 の誤りを繰り返さないよう, ホームページに情報をまとめる. ■判定方法 1. グローバル空間と通信できなくなった PC から, プライベート空間にある PC に対して ping を打つ. → 192.168.0.1 (NAT サーバ)以外には ping が通る. → ネットワークパラメータはちゃんと保持されている. DHCP サーバは正常に動いているようす. 2. ブロードキャストアドレスに ping を打つ → 192.168.0.1 も返事する 3. ブロードキャストアドレスに ping を打ったあと, 再度 192.168.0.1 に ping を打つ. → 192.168.0.1 に ping が通る. この段階で通信に使われている Mac アドレスがおかしいのではないかと予想. /proc/net/arp を見る. このファイルには通信に使う Mac アドレスの情報が 書かれている. 4. /proc/net/arp の確認 → 192.168.0.1 として, NAT サーバ以外の Mac アドレスが書かれていた 5. 該当する Mac アドレスを持つ PC の検索 → ブロードキャストに ping を打ったあと, /proc/net/arp を確認 joho21 の Mac アドレスであることがわかった. ^^^^^^ joho21 と NAT サーバが 192.168.0.1 として答えていた. ブロードキャストアドレスにしばらく ping を打った場合には, なぜか joho21 は返答していなかった模様. (joho21 のログを見ていないのでわからず) ■解説 ・プライベート空間とグローバル空間との関係 専攻 DHCP サーバに接続される計算機にはプライベートアドレス (192.168.0.1/24)が割り当てられる. 計算機はその IP を用い, NAT サーバ(プライベートアドレス空間とグローバルアドレス空間 を結ぶ)である blue を通じて外へと通信する. ・イーサネットの通信方法 イーサネットでは, 実際に通信するのに使われるアドレスは IP アドレス ではなく, ネットワークカードに割り当てられた Mac アドレス. 通信を開始するときに, 例えば「192.168.0.1 の Mac アドレスは何?」と 問い合わせを出し, 得られた Mac アドレスを用いて通信を行う. ・/proc/net/arp について ここには,上記のようにして得られたIPアドレスとMacアドレスの対応が書かれている. 有効時間は最後の通信からおよそ数分と短時間で,それを過ぎた場合には 再び問い合わせを行う. 今回の事態でルーティングされたりされなかったりしたのは, 問い合わせた際にblue(本物)が答えたり,joho21(偽物)が答えたり したからである. なお, /proc/net/arp の内容は以下のコマンドからでも知ることができる. # arp -n $ /usr/sbin/arp -n ・NAT サーバのネットワークパラメータの設定 NAT サーバとして機能させるPCの /etc/network/interfaces には 1. そのPC自身のネットワークパラメータ 2. プライベートアドレス空間の gateway としてのネットワークパラメータ 3. そのPCが「プライベートアドレス空間からの通信をルーティングする」 という記述 という3つの内容が書きこまれている必要がある. 今回 joho21 には1と3の内容のみが書きこまれており,そのために 中途半端にルータとして働こうとした. ・NATサーバでのルーティング情報の表示 NATサーバで,現在のルーティング情報を表示するには以下のコマンドを使うと良い. $ netstat -Mn (IPアドレス,ポート番号で表示) $ netstat -M (ドメイン名,サービス名で表示) ・ping について http://www.ep.sci.hokudai.ac.jp/~epnetfan/zagaku/2000/0714/ep7-7.html