【初心者向け】各OSのTCP通信チェックコマンド入門(2018年 更新版)
こんにちはコカコーラ好きのカジです。
EC2では色々なOSが構築できますよね。構築後の通信確認はどのように実施してますか?
各OSで他のインスタンスへTCP通信確認のために、ツールをインストールしたり、ICMPなどの別なプロトコルで確認するためにSecurity Groupを一時解放していませんか?
構築直後の状態で、簡単にTCPポート疎通確認可能なコマンドをご紹介します。自分も忘れやすいのでまとめてみました。
以前の記事から、3年が経過し、OSが追加されましたので、更新版です。更新概要はAmazon Linux2、ubuntu16.04、Windows Server 2016の追加、WindowsのPowershellでの調査方法を追記しました。 どなたかのお役に立てれば幸いです。
今回紹介するOSは以下となります。
- Amazon Linux,Amazon Linux 2
- Windows Server 2012R2,Windows Server 2016
- ubuntu14.04LTS,ubuntu16.04LTS
- CentOS6,CentOS7
Amazon Linux
nc(netcat)コマンドを利用します。
動作確認AMI:amzn-ami-hvm-2017.09.1.20180115-x86_64-gp2 (ami-ceafcba8)
単体ポート(80番HTTPの通信確認)
nc -zv <ip address> 80
複数ポート(22、80、8080の通信確認)
nc -zv <ip address> 22 80 8080
ポートレンジ指定
nc -zv <ip address> 20-30
成功時
[ec2-user@ip-10-1-21-222 ~]$ nc -zv <ip address> 80 Connection to <ip address> 80 port [tcp/http] succeeded!
失敗時
[ec2-user@ip-10-1-21-222 ~]$ nc -zv <ip address> 8080 nc: connect to <ip address> port 8080 (tcp) failed: Connection timed out
Amazon Linux 2
Amazon Linux 2は、nc(netcat)コマンドを利用できません。そのため、curlコマンドを利用します。
動作確認AMI:amzn2-ami-hvm-2017.12.0.20180115-x86_64-gp2 (ami-c2680fa4)
成功時
[ec2-user@ip-10-1-21-113 ~]$ curl -v telnet://<ip address>:80 * Rebuilt URL to: telnet://<ip address>:80/ * Trying <ip address>... * TCP_NODELAY set * Connected to <ip address> (<ip address>) port 80 (#0) (ここで [Enter] を押下すると、そのまま押すとHTML表示され、やめたい場合は、Ctrl+Cで中止できます。)
失敗時
[ec2-user@ip-10-1-21-113 ~]$ curl -v telnet://<ip address>:8000 * Rebuilt URL to: telnet://<ip address>:8000/ * Trying <ip address>... * TCP_NODELAY set * connect to <ip address> port 8000 failed: Connection timed out * Failed to connect to <ip address> port 8000: Connection timed out * Closing connection 0 curl: (7) Failed to connect to <ip address> port 8000: Connection timed out
Windows Server 2012R2、Windows Server 2016
定番だったTelnetコマンドがインストールされていないため、コマンドプロンプトからFTP コマンドを利用します。 Powershellの方法も追記しました。ポートを1個づつチェックします。
動作確認AMI:Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2018.01.12 (ami-b777edd1)
動作確認AMI:Windows_Server-2016-Japanese-Full-Base-2018.01.05 (ami-b40b94d2)
FTPコマンド
成功時
C:\>ftp ftp> open <ip address> 80 Connected to <ip address>. (ここで [Ctrl+C] を押下すると「アクティブなすべてのデータ接続を中止しています...」と表示されて中止できる。) Connection closed by remote host. ftp> bye
失敗時
C:\>ftp ftp> open <ip address> 8080 > ftp: connect :接続がタイムアウトしました ftp> bye
Powershell
Powershellで行う場合は、「Test-NetConnection」を利用します。
成功時
「TcpTestSucceeded : True」になっていることを確認します。
PS C:\Users\Administrator> Test-NetConnection <ip address> -Port 80 ComputerName : <ip address> RemoteAddress : <ip address> RemotePort : 80 InterfaceAlias : イーサネット 2 SourceAddress : 10.1.21.187 TcpTestSucceeded : True
失敗時
通信確認中にコンソールに緑色の「Waiting for response」がしばらく表示されます。 「TcpTestSucceeded : False」になっていることを確認します。
PS C:\Users\Administrator> Test-NetConnection <ip address> -Port 8080 警告: TCP connect to <ip address>:8080 failed ComputerName : <ip address> RemoteAddress : <ip address> RemotePort : 8080 InterfaceAlias : イーサネット 2 SourceAddress : 10.1.21.187 PingSucceeded : True PingReplyDetails (RTT) : 1 ms TcpTestSucceeded : False
ubuntu 16.04 LTS、ubuntu 14.04 LTS
Amazon Linuxと同様に nc(netcat)コマンドを利用します。
動作確認AMI:ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20180109 (ami-d39a02b5)
動作確認AMI:ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20180110 (ami-816cf4e7)
成功時
ubuntu@ip-10-1-21-109:~$ nc -zv <ip address> 80 Connection to <ip address> 80 port [tcp/http] succeeded!
失敗時
ubuntu@ip-10-1-21-109:~$ nc -zv <ip address> 8080 nc: connect to <ip address> port 8080 (tcp) failed: Connection timed out
CentOS6、CentOS7
Amazon Linux 2と同様に nc(Netcat)がインストールされていないので、curlコマンドを利用します。ポートを1個づつチェックします。
動作確認AMI:CentOS Linux 6 x86_64 HVM EBS 1801_01-74e73035-3435-48d6-88e0-89cc02ad83ee-ami-5d381c27.4 (ami-88b923ee)
動作確認AMI:CentOS Linux 7 x86_64 HVM EBS 1801_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-0a537770.4 (ami-25bd2743)
成功時
[centos@ip-10-1-21-46 ~]$ curl -v telnet://<ip address>:80 * About to connect() to <ip address> port 80 (#0) * Trying <ip address>... connected * Connected to <ip address> (<ip address>) port 80 (#0) (ここで [Enter] を押下すると、そのまま押すとHTML表示され、やめたい場合は、Ctrl+Cで中止できます。) * Closing connection #0
失敗時
[centos@ip-10-1-21-46 ~]$ curl -v telnet://<ip address>:8080 * About to connect() to <ip address> port 8080 (#0) * Trying <ip address>... Connection timed out * couldn't connect to host * Closing connection #0 curl: (7) couldn't connect to host
参考元
Test-NetConnectionについて以下のページを参考にさせて頂きました。