Huney

サーバー / Linux

Linuxのネットワークを理解しよう|ip・ping・ss・curlコマンドを初心者向けに解説

Linuxサーバーのネットワークについて初心者向けに解説します。IPアドレス、NIC、デフォルトゲートウェイ、DNS、ポートの基本から、ip addr、ip route、ping、ss、curlを使った確認方法まで学びます。

読了時間:約15分
  • #Linux
  • #ネットワーク
  • #IPアドレス
  • #Linuxコマンド
  • #サーバー

Linuxのネットワークを理解しよう|ip・ping・ss・curlコマンドを初心者向けに解説

Linuxサーバーを扱ううえで、ネットワークの知識は欠かせません。

たとえば、

「サーバーのIPアドレスは何?」

「インターネットへ通信できている?」

「どのポートでサービスが待ち受けている?」

といったことを確認する場面があります。

Linuxでは、こうしたネットワークの状態もコマンドから確認できます。

今回は、

  • ip addr
  • ip route
  • ping
  • ss
  • curl

などを実際に使いながら、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をインストールするときにも実際に利用します。