この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちはコカコーラ好きのカジです。
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について以下のページを参考にさせて頂きました。