ネットワーク管理ティップス

ネットワークの疎通確認

未知のネットワーク構成を調べるときに、ある箇所からある箇所への疎通確認をすることがある。最も単純な方法は ping コマンドを使ってホスト間の疎通を調べるものだろう。ICMP パケット が通る状態であれば、接続先から応答が返ってくる。そうでなければ、例えば “Network unreachable” などのメッセージが出力される。

これを一歩進めてみよう。AWS などの環境ではセキュリティグループの設定によって、あるポートにはリクエストできるが別なポートにはできない、などの細かい制御が行える。例えば memcache.example.com サーバで memcached が11211番ポートを listen しているとしよう。あるホストがこの memcached にアクセスできるか確かめたければ、次のようにコマンドを打てばよい。

$ telnet memcache.example.com 11211
Trying ::1...
Connected to memcache.example.com.
Escape character is '^]'.

このように Escape character is '^]'. のようなメッセージが出る場合は memcached へ接続できているということになる。つまり、少なくともネットワーク的に問題はないということだ。

memcached の場合は、必要があれば telnet で接続した後にテキストベースで動作確認も行える

netcat による特定でのポート待ち受け

先ほどの例では memcached が11211番ポートを listen していることを仮定した。では、あるサーバにおいて任意のポートへのアクセスを試したい場合はどうすればいいだろう?

netcat を使えば、任意のポートでアクセスを待ち受けられる。仮に netcat.example.com で次のように netcat (nc) を実行してみよう。

(netcat.example.com) $ nc -l -p 3000

こうすることで netcat.example.com サーバは3000番ポートを listen する。

別なマシンで次のようにしてみよう。

$ telnet netcat.example.com 3000
...
Hello

こうすることで、netcat.example.com サーバの標準出力にも “Hello” という文字列が表示される。表示されなければ、netcat.example.com の3000番ポートはネットワーク的にアクセスできないということだ。

telnet がない環境で任意のポートへアクセス

ここまで何度も telnet を使ってきた。しかし telnet がインストールされていない環境も存在する。そのときは /dev/tcp/host/port および /dev/udp/host/port が代替になる。

$ man bash
...
/dev/tcp/host/port
       If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port
       If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a UDP connection to the corresponding socket.
...

つまり、telnet netcat.example.com 3000 の代わりに次のようにすればいい。

$ echo "Hello" > /dev/tcp/netcat.example.com/3000

もしくはリダイレクトの向きを変えて、次のようなこともできる。

$ cat < /dev/tcp/localhost/22
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
^C

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中