環境
CentOS 6.5 (Mac OS X 上のVM。VMware Fusion 6.0.3 を使用。)
今回の原因と対策
/etc/resolv.conf に nameserver IPアドレス
の一行が抜けていたことが原因でした。
解決した後にいろいろと調べたところ、NetworkManagerデーモンが悪さをしていたようです。
このデーモンが起動をしていると、 /etc/resolv.conf を上書きしてしまうため、使わないなら chkconfig
でデーモンが起動しないような設定が必要です。
[nikuyoshi@centos01 ~ ]$ sudo service NetworkManager stop NetworkManager デーモンを停止中: [ OK ] [nikuyoshi@centos01 ~ ]$ sudo chkconfig NetworkManager off [nikuyoshi@centos01 ~ ]$ chkconfig --list | grep NetworkManager NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
調査概要
ネットワーク→セキュリティ→DNSと確認していきました。
ネットワーク周り
ip addr show
、ifconfig
で基本的な設定が間違えていないか確認- VMware Fusionのvmnet8の設定確認
route
でルーティングテーブルの確認ping
で通信できるか確認traceroute
でネットワーク経路の確認
セキュリティ周り
DNS周り
- /etc/resolv.confの設定確認
ざっくりとした構成図
インターネットに繋げなくなるまで、下記の構成で設定していました。
調査内容
DHCPではなく、CentOSに固定IPアドレスの設定をしていたため、まずCentOSのeth0の設定が変わっていないかを確認しました。
ip addr show
、 ifconfig
で確認し、特に問題無いのが分かりました。 サブネットマスクも問題なし。
[nikuyoshi@centos01 ~ ]$ ip addr show 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 ---略--- inet 172.16.182.3/24 brd 172.16.182.255 scope global eth0 ---略---
次に、VMware Fusionの設定が変わっていないか一応確認しました。 ブリッジ、ホストオンリーではなく、NATで設定しています。 設定ファイルである、 /Library/Preferences/VMware Fusion/vmnet8/nat.conf を確認しましたが、これも問題ありませんでした。 一応知らない人のために補足をしておきますと、この設定ファイルにVMware FusionのNAT設定がつらつらと書かれています。デフォルトゲートウェイのアドレスが何かを確認するのによく見るファイルと認識しています。 実際のファイルの中身は下記の通りです。
# VMware NAT configuration file [host] # NAT gateway address ip = 172.16.182.2 netmask = 255.255.255.0 # VMnet device if not specified on command line device = vmnet8 ...
NAT設定ファイルも問題ないということで、 CentOS上でroute
を叩いてルーティングテーブルがどうなってるのかを確認しました。
[nikuyoshi@centos01 ~ ]$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.16.182.0 * 255.255.255.0 U 1 0 0 eth0 default 172.16.182.2 0.0.0.0 UG 0 0 0 eth0
デフォルトゲートウェイの向き先も /Library/Preferences/VMware Fusion/vmnet8/nat.conf のIPアドレスと一致しているので問題ありません。
ping 172.16.182.2
を叩いてデフォルトゲートウェイまで通信できていることも分かりました。
インターネットまでの経路がどうなっているのかを確認していなかったので traceroute 173.194.117.216
を叩いたところ、きちんとデフォルトゲートウェイを
通ってました。 はて。。。
getenforce
の結果はPermissive*1だし、iptables
のルールも問題なし。 ファッ!?ってなってたところ、どう考えても
途中で叩いているコマンドがおかしいことに気づきました。 なんで traceroute google.co.jp
でやらなかったんだ。。。 わざわざwhoisで正引きIPアドレスを
調べる必要はなかったのに何故やっちゃったんだ。
[nikuyoshi@centos01 ~ ]$ sudo traceroute google.co.jp google.co.jp: 名前またはサービスが不明です Cannot handle "host" cmdline arg `google.co.jp' on position 1 (argc 1)
上記の結果から、DNS周りがおかしいことが判明したので、CentOSの /etc/resolv.conf の設定を見たところ設定が消えているのが分かりました。
nameserver 172.16.182.2
の行を追加して無事解決。 冒頭に書いたとおり、NetworkManagerの設定も変更して完了です。
DNS周りをすぐに調べる習慣があまり無いので、確認する習慣を身につけたいですねぇ。 障害対応時にもいかせるはず。