Linuxのネットワークを理解しよう|ip・ping・ss・curlコマンドを初心者向けに解説
Linuxサーバーを扱ううえで、ネットワークの知識は欠かせません。
たとえば、
「サーバーのIPアドレスは何?」
「インターネットへ通信できている?」
「どのポートでサービスが待ち受けている?」
といったことを確認する場面があります。
Linuxでは、こうしたネットワークの状態もコマンドから確認できます。
今回は、
ip addrip routepingsscurl
などを実際に使いながら、Linuxサーバーのネットワークを確認する方法を学んでいきます。
Linuxサーバーもネットワークにつながっている
Linuxサーバーも、PCやスマートフォンと同じようにネットワークへ接続して通信します。
たとえば、
PC
│
│ ネットワーク
↓
Linuxサーバー
という構成があれば、PCからLinuxサーバーへSSH接続したり、Linux上で動いているWebサーバーへアクセスしたりできます。
インターネットへ接続する場合は、
Linuxサーバー
↓
ルーター
↓
インターネット
といった経路で通信します。
この通信を理解するために、まずは、
- NIC
- IPアドレス
- デフォルトゲートウェイ
- DNS
- ポート
という基本的な要素を確認していきましょう。
NICとは?
**NIC(Network Interface Card)**は、コンピューターをネットワークへ接続するためのインターフェースです。
LinuxではNICが、
eth0
ens33
enp0s3
などの名前で表示されることがあります。
環境によって名前は異なります。
イメージすると、
Linuxサーバー
│
NIC
│
↓
ネットワーク
という関係です。
Linuxサーバーがネットワークと通信するための出入口と考えると分かりやすいでしょう。
IPアドレスとは?
**IPアドレス(IP Address)**は、ネットワーク上の機器を識別するために利用される番号です。
たとえば、
192.168.1.10
というIPv4アドレスがLinuxサーバーに設定されているとします。
同じネットワークに、
PC
192.168.1.20
Linuxサーバー
192.168.1.10
が存在していれば、PCからLinuxサーバーへ通信できます。
ネットワーク上の住所のようなものと考えるとイメージしやすいでしょう。
ip addr:IPアドレスを確認する
LinuxでネットワークインターフェースやIPアドレスを確認するときに利用できるのが、
ip addr
です。
短く、
ip a
と入力することもできます。
実行すると、たとえば次のような情報が表示されます。
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.1.10/24
ここでは、
enp0s3
→ ネットワークインターフェース
192.168.1.10
→ IPv4アドレス
/24
→ プレフィックス長
などを確認できます。
サーバーへ接続できないとき、
「そもそもサーバーにどのIPアドレスが設定されているのか?」
を確認するためにも重要なコマンドです。
loとは?
ip addrを実行すると、
lo
というインターフェースが表示されます。
loは**ループバックインターフェース(Loopback Interface)**です。
代表的なIPv4アドレスとして、
127.0.0.1
があります。
これは、自分自身を表すために利用されます。
たとえばLinuxサーバー自身で動いているWebサービスへ、
http://127.0.0.1
のようにアクセスすることがあります。
また、
localhost
という名前もよく使われます。
127.0.0.1
≒
localhost
というイメージを持っておきましょう。
デフォルトゲートウェイとは?
同じネットワーク内では直接通信できますが、別のネットワークへ通信する場合にはルーターなどを経由します。
そこで登場するのが**デフォルトゲートウェイ(Default Gateway)**です。
たとえば、
Linuxサーバー
192.168.1.10
│
↓
ルーター
192.168.1.1
│
↓
インターネット
という構成なら、
192.168.1.1
がデフォルトゲートウェイとして設定されている場合があります。
簡単にいうと、
「宛先への経路が分からないとき、とりあえずこちらへ送る」
ための経路です。
ip route:ルーティングを確認する
Linuxのルーティング情報を確認するには、
ip route
を利用できます。
例:
default via 192.168.1.1 dev enp0s3
192.168.1.0/24 dev enp0s3
ここで、
default via 192.168.1.1
という部分があれば、
デフォルトの通信先として192.168.1.1を利用する
というルートが設定されています。
つまり、
Linuxサーバー
↓
192.168.1.1
↓
別ネットワーク
という通信経路を確認できます。
ping:相手と通信できるか確認する
ネットワークの疎通確認でよく利用されるのがpingです。
たとえば、
ping 192.168.1.1
と実行します。
通信できれば、応答時間などが表示されます。
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.8 ms
停止するときは、
Ctrl + C
を押します。
pingは、
「相手までIP通信できるか?」
を確認するための基本的なコマンドです。
ただし、相手側の設定やファイアウォールなどによってICMPが許可されていない場合もあります。
そのため、
pingが失敗した = 必ず相手が停止している
とは限りません。
IPアドレスでは通信できるのに名前では通信できない?
たとえば、
ping 8.8.8.8
では通信できるのに、
ping example.com
では通信できない場合があります。
この場合、確認したいものの一つがDNSです。
DNSとは?
**DNS(Domain Name System)**は、
example.com
のような名前と、
IPアドレス
を対応付ける仕組みです。
イメージすると、
example.com
↓
DNS
↓
IPアドレス
という流れです。
そのため、
IPアドレスでは通信できる
↓
ドメイン名では通信できない
という場合には、DNSによる名前解決に問題がないか確認するという考え方ができます。
ポート番号とは?
サーバーでは、1台のLinux上で複数のサービスが動くことがあります。
たとえば、
Linuxサーバー
├── SSH
├── Webサーバー
└── Minecraftサーバー
という構成です。
IPアドレスだけでは、
「どのサービスへ通信したいのか」
を区別できません。
そこで利用されるのが**ポート番号(Port Number)**です。
代表例として、
| サービス | 代表的なポート |
|---|---|
| SSH | TCP 22 |
| HTTP | TCP 80 |
| HTTPS | TCP 443 |
| Minecraft Java Edition | TCP 25565 |
などがあります。
たとえば、
192.168.1.10:22
なら、
192.168.1.10
→ サーバー
22
→ SSH
というイメージです。
LISTENとは?
サーバー側では、クライアントからの通信を受け付けるために特定のポートで待ち受けます。
この状態を、
LISTEN(待ち受け)
と呼びます。
たとえばSSHサーバーがTCP 22番ポートで待ち受けている場合、
Linuxサーバー
│
TCP 22番ポート
│
LISTEN
│
↓
SSH接続を待つ
というイメージです。
ss:待ち受けているポートを確認する
Linuxでソケットやポートの状態を確認するときに便利なのがssです。
たとえば、
ss -tuln
を実行します。
表示例:
Netid State Local Address:Port
tcp LISTEN 0.0.0.0:22
これはTCP 22番ポートで待ち受けていることを示しています。
オプションを簡単に見てみましょう。
-t
→ TCP
-u
→ UDP
-l
→ LISTEN状態
-n
→ ポート番号などを数値で表示
そのため、
ss -tuln
で、
TCP・UDPの待ち受け状態を数値で確認する
ことができます。
特定のポートを探してみる
Minecraftサーバーを構築したあと、
「本当に25565番ポートで待ち受けているの?」
と確認したいとします。
その場合、
ss -tuln | grep 25565
のように確認できます。
結果が、
tcp LISTEN 0 4096 0.0.0.0:25565
のように表示されれば、Minecraftサーバーがそのポートで待ち受けていることを確認する材料になります。
前の記事で登場したパイプ|とgrepも、ここで利用できます。
0.0.0.0とは?
ssを利用していると、
0.0.0.0:22
のような表示を見ることがあります。
0.0.0.0でLISTENしている場合、一般的にはそのサービスが利用可能なIPv4インターフェースで接続を受け付ける設定になっていることを表します。
一方、
127.0.0.1:8080
のようになっている場合は、ループバックアドレスで待ち受けているため、基本的にはそのLinux自身からの接続を対象とします。
0.0.0.0
→ 利用可能なIPv4インターフェースで待ち受け
127.0.0.1
→ 自分自身からの通信を待ち受け
この違いは、サーバーへ外部から接続できないときの確認ポイントになります。
curl:HTTP通信を確認する
WebサーバーなどへのHTTP通信を確認するときによく利用されるのがcurlです。
たとえば、
curl https://example.com
と実行すると、WebサーバーへHTTPリクエストを送り、レスポンスの内容を確認できます。
また、自分のLinux上でWebサーバーが動いている場合、
curl http://localhost
のように確認できます。
つまり、
Linux
↓
HTTPリクエスト
↓
Webサーバー
↓
HTTPレスポンス
という通信をコマンドから確認できます。
pingとcurlは何が違う?
どちらも通信確認に使えますが、確認しているものが違います。
ping
↓
IPレベルで相手との疎通を確認する材料
curl
↓
HTTPなどを使って
実際のアプリケーションとの通信を確認
たとえば、
pingは成功する
↓
でもWebサイトにはアクセスできない
ということもあります。
その場合、
ネットワーク自体には到達できているが、Webサービス側に問題がある
といった切り分けができます。
「つながらない」ときは順番に確認する
Linuxサーバーへ接続できない場合、いきなり設定を変更するのではなく、順番に確認していくことが重要です。
たとえば、
① IPアドレスは設定されている?
↓
② ルーティングは設定されている?
↓
③ 相手まで通信できる?
↓
④ サービスは起動している?
↓
⑤ ポートはLISTENしている?
↓
⑥ ファイアウォールなどで遮断されていない?
という流れで確認できます。
今回学んだコマンドを当てはめると、
① ip addr
↓
② ip route
↓
③ ping
↓
④ systemctl status
↓
⑤ ss
↓
⑥ ファイアウォールなどを確認
となります。
前回学んだsystemctlもここでつながります。
Minecraftサーバーではどう使う?
今後構築するMinecraftサーバーでも、今回のネットワーク知識を利用します。
たとえばLinuxサーバーのIPアドレスが、
192.168.1.10
だったとします。
Minecraft Java EditionのサーバーがTCP 25565番ポートで待ち受けていれば、
PC
│
│ TCP 25565
↓
192.168.1.10
Linuxサーバー
│
↓
Minecraft Server
という形で接続します。
Linux側では、
ip addr
でIPアドレスを確認し、
ss -tuln | grep 25565
で25565番ポートの待ち受け状態を確認できます。
さらに、
systemctl status minecraft
でMinecraftをサービス化したあとの稼働状態を確認できるようになります。
つまり、
Minecraftにつながらない!
↓
IPアドレスは?
↓
サービスは動いてる?
↓
25565番はLISTENしてる?
↓
通信経路やファイアウォールは?
というように、原因を一つずつ切り分けられるようになります。
これがLinuxサーバーを運用するときの大切な考え方です。
実際にネットワークを確認してみよう
まず、自分のLinuxに設定されているIPアドレスを確認します。
ip addr
次にルーティングを確認します。
ip route
デフォルトルートが存在するか確認してみましょう。
次に、通信可能な相手へpingを実行します。
ping 接続先のIPアドレス
確認できたらCtrl + Cで終了します。
続いて、Linux上で待ち受けているポートを確認します。
ss -tuln
SSHが動いている環境なら、22番ポートが存在するか探してみましょう。
ss -tuln | grep 22
最後に、HTTP通信を試せる環境であれば、
curl https://example.com
などを実行してみましょう。
ここまでできれば、
IPアドレス
↓
ルーティング
↓
疎通
↓
ポート
↓
アプリケーション通信
というLinuxネットワーク確認の基本的な流れを体験できます。
🍯 はちみつメモ
ネットワーク障害は「どこまで通信できているか」を順番に確認しよう!
「つながらない!」となったときに、いきなり設定を変更する必要はありません。
ip addrで自分のIPアドレスを確認し、
ip routeで経路を確認し、
pingで疎通を確認し、
systemctlでサービスを確認し、
ssでポートを確認する。このように一つずつ確認すると、問題がどこにあるのか見つけやすくなります。
まとめ
今回はLinuxサーバーのネットワークについて学びました。
この記事で覚えること
- NICはLinuxとネットワークをつなぐインターフェース
- IPアドレスはネットワーク上の機器を識別するために使われる
ip addrでIPアドレスやインターフェースを確認できる127.0.0.1は代表的なループバックアドレス- デフォルトゲートウェイは別ネットワークへの通信で重要
ip routeでルーティング情報を確認できるpingでIP通信の疎通を確認できる- DNSは名前とIPアドレスを対応付ける
- ポート番号によって通信先のサービスを識別できる
ssで待ち受けているポートなどを確認できるcurlでHTTPなどの通信を確認できる- Minecraft Java Editionでは通常TCP 25565番ポートを利用する
- ネットワークトラブルでは順番に原因を切り分けることが重要
Linuxサーバーを扱うとき、
「IPアドレスは?」「経路は?」「サービスは?」「ポートは?」
と順番に確認できるようになると、トラブルシューティングがかなりしやすくなります。
コマンドを丸暗記するのではなく、
「何を確認するためのコマンドなのか」
を意識して使ってみましょう。
次におすすめ
次は**「Linuxのパッケージ管理」**について学びます。
Linuxではソフトウェアを一つずつWebサイトからダウンロードするだけでなく、パッケージマネージャーを利用してソフトウェアを管理できます。
Ubuntu系で利用されるapt、RHEL系で利用されるdnfを中心に、
- パッケージとは?
- リポジトリとは?
- 依存関係とは?
- ソフトウェアのインストール
- アップデート
- アンインストール
について学びます。
この知識は、Minecraftサーバー構築でJavaをインストールするときにも実際に利用します。