サーバー移転時の通信不可
サーバー移転時に通信不可となった場合に考えられるトラブルについて説明します。
現象
Webサーバーの移転に伴いIPアドレスが変更になるためDNSサーバーへの登録も行ったが、自宅からWebサーバーに通信出来ない。
パソコンからインターネットへの通信は可能であり、DNSサーバーへの登録、移転先のWebサーバー共に正常に動作しているとします。
切り分け方法
nslookupコマンドによりFQDNで変換されるIPアドレスを確認します。
原因
nslookupで確認したIPアドレスが旧WebサーバーのIPアドレスになっている場合、基本編の「DNSキャッシュ」で示した通り、途中のDNSキャッシュサーバーにより旧Webサーバーの情報がキャッシュされています。
対処
インターネットに接続された全てのDNSキャッシュサーバーの情報をクリアする事は出来ないため、Webサーバー側やDNSサーバー側で対処が出来ません。
このようにならないよう、旧Webサーバーにアクセスが来てもいいように暫くは旧Webサーバーを残しておきます。
旧Webサーバーを残せない、又は旧Webサーバーにアクセスがあっても意味がない等の場合は、移転時に新Webサーバーは旧WebサーバーのIPアドレスを変えずに引き継ぐようにします。引き継げない場合はWebサーバーを移転する前にDNSサーバーでWebサーバーのttlを5分等小さくしておき、5分たったらDNSキャッシュが削除されるようにします。移転した後、DNSサーバーでWebサーバーの情報を新しいIPアドレスに書き換えた後に、安定稼働を確認してttlを元に戻します。
レンタルサーバーを移転する場合でも極力ttlについては調べてから移転するようにします。自分が利用しているDNSサーバーのttlが分からない場合は以下のように調べます。例では自分のドメインがaa.bbで公開サーバーがwww.aa.bbだった場合の例です。
まずは登録されているDNSサーバーを調べます。
コマンドプロンプト |
---|
C:\>nslookup 既定のサーバー: test Address: 192.168.1.1 > set type=ns > www.aa.bb サーバー: test Address: 192.168.1.1 権限のない回答: aa.bb nameserver = ns1.xx.bb aa.bb nameserver = ns2.xx.bb ns1.xx.bb internet address = 172.16.1.2 ns2.xx.bb internet address = 172.16.1.3 > |
次に調査したDNSサーバーに直接問い合わせ、set debugコマンドで詳細情報を表示するようにして、www.aa.bbの情報を取得します。
コマンドプロンプト |
---|
> server ns1.xx.bb
既定のサーバー: ns1.xx.bb
Address: 172.16.1.2
> set type=a
> set debug
> www.aa.bb
サーバー: ns1.xx.bb
Address: 172.16.1.2
------------
Got answer:
HEADER:
opcode = QUERY, id = 5, rcode = NOERROR
header flags: response, auth. answer, want recursion
questions = 1, answers = 1, authority records = 2,
additional = 2
QUESTIONS:
www.aa.bb, type = A, class = IN
ANSWERS:
-> www.aa.bb
internet address = 172.168.2.10
ttl = 86400 (1 day) ★DNSサーバーに設定してあるttl
AUTHORITY RECORDS:
-> www.aa.bb
nameserver = ns1.xx.bb
ttl = 900 (15 mins)
-> www.aa.bb
nameserver = ns2.xx.bb
ttl = 900 (15 mins)
ADDITIONAL RECORDS:
-> ns1.xx.bb
internet address = 172.16.1.2
ttl = 900 (15 mins)
-> ns2.xx.bb
internet address = 172.16.1.3
ttl = 900 (15 mins)
------------
名前: www.aa.bb
Addresses: 172.16.2.10
>
|
ttlが長い場合はレンタル先の設定を確認し、可能な限り事前にttlを小さくします。
パソコンでの対処
このようになった事後でもパソコン側では各自で対処が可能です。以下は移転後にDNSキャッシュの問題で接続出来ない場合でどうしても接続しなければならない場合の対処方法です。
nslookupコマンドでWebサーバーのIPアドレスを調査します。
コマンドプロンプト |
---|
C:\>nslookup
既定のサーバー: test
Address: 192.168.1.1
> set debug
> set type=a
> www.aa.bb
サーバー: ns1.xx.bb
Address: 172.16.1.2
------------
Got answer:
HEADER:
opcode = QUERY, id = 5, rcode = NOERROR
header flags: response, auth. answer, want recursion
questions = 1, answers = 1, authority records = 2,
additional = 2
QUESTIONS:
www.aa.bb, type = A, class = IN
ANSWERS:
-> www.aa.bb
internet address = 172.168.2.10
ttl = 86400 (1 day) ★キャッシュの残り時間
AUTHORITY RECORDS:
-> www.aa.bb
nameserver = ns1.xx.bb
ttl = 900 (15 mins)
-> www.aa.bb
nameserver = ns2.xx.bb
ttl = 900 (15 mins)
ADDITIONAL RECORDS:
-> ns1.xx.bb
internet address = 172.16.1.2
ttl = 900 (15 mins)
-> ns2.xx.bb
internet address = 172.16.1.3
ttl = 900 (15 mins)
------------
権限のない回答:
名前: www.aa.bb
Addresses: 172.16.2.10
>
|
IPアドレスが変更になったかどうか判断は難しいと思いますが、上記ではDNSキャッシュサーバーで保持している情報を表示しているため、事前にサーバーの移転の通知があったが接続出来ず、キャッシュの残り時間が長い場合は旧Webサーバーの情報が残っている可能性が高いと思われます。
このため、新WebサーバーのIPアドレスを上記で回答を得たDNSサーバーから直接調査します。
コマンドプロンプト |
---|
C:\>nslookup
既定のサーバー: test
Address: 192.168.1.1
> server ns1.xx.bb
既定のサーバー: ns1.xx.bb
Address: 172.16.1.2
> www.aa.bb
サーバー: ns1.xx.bb
Address: 172.16.1.2
名前: www.aa.bb
Addresses: 172.168.5.20 ★新WebサーバーのIPアドレス
|
上記の方法はDNSサーバーが変更になっていない場合の方法です。DNSサーバーが変更になっている場合はDNSサーバーのFQDN自体がキャッシュで回答されていて、そのサーバーに接続すると古いIPアドレスが回答されたり、回答がない場合があります。
そのような場合は以下のように調査します。
まずはルートサーバーに接続してwww.aa.bbを問い合わせます。
コマンドプロンプト |
---|
C:\>nslookup 既定のサーバー: test Address: 192.168.1.1 > server a.root-servers.net 既定のサーバー: a.root-servers.net Address: 172.16.2.2 > wwww.aa.bb サーバー: a.root-servers.net Address: 172.16.2.2 名前: www.aa.bb Served by: - a.dns.bb IPv6アドレス 172.16.3.2 bb - b.dns.bb IPv6アドレス 172.16.3.3 bb > exit |
ルートサーバーはwww.aa.bbを直接は知らないため、下位のサーバーを回答しています。上記ではa.dns.bbとb.dns.bbが下位のサーバーとして示されています。このため、示されたサーバーに接続してwww.aa.bbを問い合わせます。
コマンドプロンプト |
---|
C:\>nslookup 既定のサーバー: test Address: 192.168.1.1 > server a.dns.bb 既定のサーバー: a.dns.bb Address: 172.16.3.2 > www.aa.bb サーバー: a.dns.bb Address: 172.16.3.2 名前: www.aa.bb Served by: - ns1.yy.bb 172.16.4.2 aa.bb - ns2.yy.bb 172.16.4.3 aa.bb > exit |
a.dns.bbはwww.aa.bbを直接は知らないため、更に下位のサーバーを回答しています。上記ではns1.yy.bbとns2.yy.bbが下位のサーバーとして示されています。このため、示されたサーバーに接続してwww.aa.bbを問い合わせます。
コマンドプロンプト |
---|
C:\>nslookup
既定のサーバー: test
Address: 192.168.1.1
> server ns1.yy.bb
既定のサーバー: ns1.aa.bb
Address: 172.16.4.2
> www.aa.bb
サーバー: ns1.yy.bb
Address: 172.16.4.2
名前: www.aa.bb
Addresses: 172.16.5.20 ★新WebサーバーのIPアドレス
>
|
上記のように基本編の「便利な住所録」で示した通り、上位から順番に問い合わせる事でDNSキャッシュを使わずに現在のIPアドレスを知る事が出来ます。
現在のIPアドレスを確認後、C:\Windows\System32\drivers\etcフォルダにあるhostsファイルに以下の1行を追加します。C:\Windows部分はWindowsをインストールしたフォルダを指定します。
172.16.5.20 www.aa.bb
hostsファイルに記載があるFQDNはDNSで問い合わせずにファイルに記載しているIPアドレスを利用するようになります。
これにより、DNSキャッシュを利用せずに新WebサーバーのIPアドレスを判断するため、新Webサーバーと通信出来るようになります。
尚、hostsファイルに追加した行はDNSが反映された後は再度移転等でIPアドレスが変わる可能性があるため削除し、DNSの問い合わせでIPアドレスに変換出来るように戻しておく事をお奨めします。