Date: 2009/09/28 | | Tags: Solaris, OpenSolaris, Howto, 利用法
192.168.1.0/24のネットワークに、デフォルトゲートウェイとするルータのIPアドレスが192.168.1.254だったとき、次のようにしてNICをupします。
ifconfig e1000g0 plumb ifconfig e1000g0 192.168.1.10/24 up
この状態でまだ、default gatewayを設定しません。ここで、
ping 192.168.1.254
すると、当然。
192.168.1.254 is alive
となります。そして-sをつけてみると
ping -s 192.168.1.254
たとえば、こんな感じ・・・
PING 192.168.1.254: 56 data bytes 64 bytes from 192.168.1.254: icmp_seq=0. time=0.686 ms 64 bytes from 192.168.1.254: icmp_seq=1. time=0.592 ms 64 bytes from 192.168.1.254: icmp_seq=2. time=0.627 ms ^C ----192.168.1.254 PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip (ms) min/avg/max/stddev = 0.592/0.635/0.686/0.048
まーあたりまえですよね。
ここでdefaultgatewayを設定します。
route add default 192.168.1.254
そして、
ping 192.168.1.254
すると、当然。
192.168.1.254 is alive
まーそりゃそうですよね。
ところがここで。こうします・・・
ping -s 192.168.1.254
PING 192.168.1.254 (192.168.1.254): 56 data bytes
しばしまつ・・・
^C ----192.168.1.254 PING Statistics---- 5 packets transmitted, 0 packets received, 100% packet loss
えええええ・・・・。なぜ、何もないときと-sでこんなの違うの?
さて、これはなぜでしょう?
実は、恥ずかしながら、これで相当な時間はまりました。
ただデフォルトゲートウェイを登録しただけで、デフォルトゲートウェイのIPアドレスに到達できず、route deleteすると、デフォルトゲートウェイのIPアドレスに到達します。
次回までクイズにしたいところですが、答えを・・・
まずnsswitch.confのipnode/hostsが、files,dnsだったとき、DNSをresolv.confに設定しますよね。
このDNSが手違いで実は許可されてないDNS(つまりIP制限されており、許す設定になっていない)だったとき、この状態がおきます。
pingでIPアドレス直うちなので、なんでDNS?とおもうのですが、OpenSolarisのpingは、実は逆引きをするのです。
逆引きの解決が時間以内に出来ないとき、ICMPのECHOのREPLYが帰ってきているにもかかわらず、packet lossと表示されます。
そしてdefault gatewayがあるかどうかで、hostnameの解決に行くかどうかが決まるようで。
これが組み合わされると、このような意味不明な事象が起きるのです。どうもこれ、nameserverがbindとかでは起きないようで。powerdns recursorなどのリゾルバでは、許可しないIPからは無応答のようなのですね。
これが連鎖すると、意味不明な事象が起き、混乱したわけです。
正直、ping -sで逆引きするところまではいいのですが、packet lossと表記する実装はちょっと問題なのではないかと・・・。
UNIXを使っていた先輩に、netstatや、tracerouteなどを習うとき、-n(逆引きしない)をつけるようにならいました。
理由は単に、「遅くなるから」だったのですが、遅くなることよりも問題が複雑になることの方が重要だったのですね。
pingにも、-snと言う形で、意識して-nをつける習慣をつけたほうがいいですね。