ホーム テクノロジー LINUX 14 の便利な Linux ネットワーク コマンド

14 の便利な Linux ネットワーク コマンド


ネットワークの構成、監視、セキュリティ保護は、システム管理者の仕事の重要な部分を形成します。 Linux ネットワークの管理に関しては、多数のコマンドやユーティリティが利用可能です。

ネットワーク化されたシステムに障害が発生することがあります。管理者は問題を診断して解決する必要があります。監視は問題を検出し、手に負えなくなる前に修正するのに役立ちます。セキュリティとパフォーマンスの監視も、管理者のアクティビティの重要な部分を形成します。

ここでは、Linux ネットワークを管理するために一般的に使用されるコマンドについて説明します。

ip

iproute2 パッケージには、ネットワークとルーティングの構成に使用される IP コマンドが含まれています。これは、従来のifconfigおよびrouteコマンドを置き換えます。

ipコマンドを実行するオブジェクトと追加、削除、表示などのアクションを指定する 2 番目の引数を取ります。

IPリンク

ip linkは、ネットワーク インターフェイスの設定、追加、削除に使用します。 ip link showコマンドを使用して、システム上のすべてのネットワーク インターフェイスを表示します。

 $ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 02:35:97:08:6b:2a brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff

次のコマンドでip linkのマニュアル ページを参照できます。

 $ man  ip-link

IPアドレス

ip address コマンドを使用して、アドレスを表示したり、新しいアドレスをバインドしたり、古いアドレスを削除したりできます。 man ページの ip address コマンドの名前は ip-address です。

たとえば、次のコマンドは、ネットワーク インターフェイス enp0s8 に割り当てられた IP アドレスを表示します。

 ip address show dev enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.51/24 brd 10.0.0.255 scope global enp0s8
...

IPルート

IP ルートを使用して、ルーティング テーブルを印刷または表示します。次のコマンドは、ルーティング テーブルの内容を表示します。

 $ ip route show
default via 10.0.2.2 dev enp0s3 
10.0.0.0/24 dev enp0s8  proto kernel  scope link  src 10.0.0.51 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.15

nmap

Nmap は多くの映画で使用されてきましたが、 The Matrix Reloaded ( Wikipedia IMDB Amazon ) によって Nmap は映画スターに変身しました。

Nmap (「ネットワーク マッパー」) は、ネットワーク検出、セキュリティ監査、および管理に使用される強力なユーティリティです。多くのシステム管理者は、どのシステムがオンラインであるかを判断するために、また OS の検出やサービスの検出にもこれを使用します。

デフォルトの Nmap スキャンでは、ポート、その状態 (オープン/クローズ)、およびプロトコルが表示されます。最も一般的な 1000 個のポートにパケットを送信し、応答をチェックします。

 $ nmap 10.0.0.50

Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 10:32 UTC
Nmap scan report for 10.0.0.50
Host is up (0.00077s latency).
Not shown: 997 filtered ports
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   open   http
3306/tcp closed mysql

ネットワーク上のどのホストが稼働しているかを確認するには、次の手順を実行します。

 $ nmap -sn 10.0.0.0/24

Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 11:59 UTC
Nmap scan report for 10.0.0.1
Host is up (0.00084s latency).
Nmap scan report for 10.0.0.50
Host is up (0.0021s latency).
Nmap scan report for 10.0.0.51
Host is up (0.00026s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.61 seconds

-O フラグを使用して、ホストが実行しているオペレーティング システムを識別します。

 $ sudo  nmap 10.0.0.50 -O
Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 13:44 UTC
Nmap scan report for 10.0.0.50
Host is up (0.00053s latency).
...
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.10 - 3.19
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.95 seconds

注意: インターネット経由でシステムがスキャンされることを喜ぶ人は誰もいません。したがって、そうする前に許可を得てください。

Windows 上で Nmap を使用することもできます。このインストール ガイドを確認してください。

ピング

ping を使用して、ホストが生きているかどうかを確認します。この非常に単純なコマンドは、ホストまたはネットワーク セグメントのステータスを確認するのに役立ちます。 Ping コマンドは、ICMP ECHO_REQUEST パケットをターゲット ホストに送信し、応答があるかどうかを待機します。

ただし、一部のホストはファイアウォールで ICMP エコー要求をブロックします。インターネット上の一部のサイトでも同様のことが行われる場合があります。

デフォルトでは、ping は無限ループで実行されます。定義された数のパケットを送信するには、 -cフラグを使用します。

 $ ping -c 3 google.com 
PING google.com (172.217.167.238): 56 data bytes
64 bytes from 172.217.167.238: icmp_seq=0 ttl=118 time=7.898 ms
64 bytes from 172.217.167.238: icmp_seq=1 ttl=118 time=7.960 ms
64 bytes from 172.217.167.238: icmp_seq=2 ttl=118 time=6.247 ms

--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 6.247/7.368/7.960/0.793 ms

-o フラグを指定すると、ping は 1 つの応答パケットを受信した後に正常に終了します。

 $ ping -o google.com
PING google.com (172.217.167.46): 56 data bytes
64 bytes from 172.217.167.46: icmp_seq=0 ttl=118 time=7.540 ms

--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 7.540/7.540/7.540/0.000 ms

-nフラグを使用すると、DNS 逆引き参照を回避できます。 ICMP シーケンス番号は特に重要です。シーケンス番号の切れ目はパケットが失われたことを示します。

ping の失敗の原因として考えられるのは、

  • ネットワーク障害
  • ホストは生きていない
  • ICMP ECHO リクエストをブロックするファイアウォール

オンライン ping テストを実行して、世界のさまざまな場所からの接続を確認することもできます。

iPerf

ping はホストの可用性を確認しますが、iPerf は 2 つのホスト間のネットワーク パフォーマンスの分析と測定に役立ちます。 iPerf を使用すると、2 つのホスト間の接続を開き、データを送信します。 iPerf は、2 つのホスト間で利用可能な帯域幅を表示します。

配布パッケージ マネージャーを使用して iPerf をインストールできます。たとえば、Ubuntu ベースのディストリビューションでは次のようにインストールできます。

 $ sudo apt install iperf -y

両方のマシンに iPerf をインストールしたら、そのうちの 1 台で iPerf サーバーを起動します。次の例では、IP アドレス 10.0.0.51 のホスト上で iPerf サーバーを起動します。

 $ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

2 番目のマシンで、-c フラグを指定して iPerf を起動します。これによりサーバーに接続され、データが送信されます。

 $ iperf -c 10.0.0.51
------------------------------------------------------------
Client connecting to 10.0.0.51, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.0.0.50 port 42177 connected with 10.0.0.51 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.13 GBytes   972 Mbits/sec

iPerf は数秒以内に帯域幅の結果を返します。

トレースルート

ping でパケットの欠落が示された場合は、traceroute を使用して、パケットがどのルートをたどっているかを確認する必要があります。 Traceroute は、パケットが宛先に到達するために通過するゲートウェイのシーケンスを示します。たとえば、私のマシンから google.com への traceroute は次のように表示されます。

 $ traceroute google.com
traceroute to google.com (172.217.167.46), 64 hops max, 52 byte packets
 1  dlinkrouter.dlink (192.168.0.1)  5.376 ms  2.076 ms  1.932 ms
 2  10.194.0.1 (10.194.0.1)  5.190 ms  5.125 ms  4.989 ms
 3  broadband.actcorp.in (49.207.47.201)  7.165 ms  5.749 ms  5.755 ms
 4  broadband.actcorp.in (49.207.47.225)  5.918 ms *  8.483 ms
...
 9  108.170.251.97 (108.170.251.97)  6.359 ms
    del03s16-in-f14.1e100.net (172.217.167.46)  5.448 ms
    108.170.251.97 (108.170.251.97)  6.400 ms

この出力の 4 行目では、往復時間に * が表示されます。これは、応答が受信されなかったことを示します。これにはさまざまな理由が考えられます。traceroute ICMP パケットは優先順位が低いため、ルーターによってドロップされる可能性があります。あるいは、単に混雑している可能性もあります。特定のゲートウェイのすべての時刻フィールドに * が表示される場合は、ゲートウェイがダウンしている可能性があります。

多くの Web ベースのルート トレース ツールでは、逆トレースルート、つまり Web サイトからホストへのトレースルートを実行できます。これらは、 traceroute.orgまたは Traceroute で確認できます。

tcpdump

tcpdump はパケット スニッフィング ツールであり、ネットワークの問題を解決するときに非常に役立ちます。ネットワーク トラフィックをリッスンし、定義した基準に基づいてパケット情報を出力します。

たとえば、特定のホスト (この例では Ubuntu18) との間で送受信されるすべてのパケットを検査できます。

 $ sudo tcpdump host ubuntu18 -n -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:12:11.509092 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 2991049004:2991049112, ack 2956233368, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 108
14:12:11.509146 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 108:252, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 144
14:12:11.509218 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 252:288, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 36
14:12:11.509259 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 288:500, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 212
14:12:11.509331 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 500:768, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 268
5 packets captured
6 packets received by filter
0 packets dropped by kernel

デフォルトでは、tcpdump は IP アドレスをホスト名に解決します。 tcpdump に名前検索を実行させたくない場合は、 -nフラグを使用します。

tcpdump の出力では、パケットごとに 1 行が出力されます。 -cフラグを使用して出力を制限します (上の例では 5)。

tcpdump は、ネットワークの問題を解決したり、潜在的な問題を特定したりするのに役立ちます。時々ネットワーク上で tcpdump を実行して、すべてが正常であることを確認することをお勧めします。

ネット統計

Netstat コマンドは、ネットワーク接続、ルーティング テーブル、さまざまなネットワーク設定と統計を調べるために使用されます。

システム上のネットワーク インターフェイスを一覧表示するには、 -iフラグを使用します。

以下に例を示します。

 $ netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0      4001      0      0 0          2283      0      0      0 BMRU
eth1       1500 0     27154      0      0 0        838962      0      0      0 BMRU
lo        65536 0         0      0      0 0             0      0      0      0 LRU

-rフラグを使用すると、ルーティング テーブルが表示されます。これは、ネットワーク パケットを送信するために設定されたパスを示します。

 $ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.0.0        *               255.255.255.0   U         0 0          0 eth1
10.0.2.0        *               255.255.255.0   U         0 0          0 eth0

最後の 2 行のアスタリスクは、これらのネットワーク上のホストにパケットを送信するためにゲートウェイが必要ないことを示します。このホストはネットワーク 10.0.0.0 および 10.0.2.0 に直接接続されています。

最初の行の宛先はデフォルトです。これは、この表にリストされていないネットワーク宛てのパケットはルーター 10.0.2,2 によって処理されることを意味します。

netstat コマンドをオプションなしで実行すると、開いているソケットのリストが表示されます。 -lフラグを使用すると、デフォルトでは表示されない待機ソケットのみが表示されます。 -a フラグを使用すると、リスニングソケットと非リスニングソケットを表示できます。以下に例を示します。

 $ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0     36 10.0.2.15:ssh           10.0.2.2:51017          ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
udp        0      0 *:bootpc                *:*                                
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         DGRAM                    8186     /run/systemd/notify
...

詳細な Netstat コマンドの例はこちら

ss

Linux インストールでは、デフォルトで多くのサービスが実行されます。これらは攻撃対象領域を減らすのに役立つため、無効にするか、できれば削除する必要があります。 netstat コマンドを使用すると、どのサービスが実行されているかを確認できます。 netstat はまだ利用可能ですが、ほとんどの Linux ディストリビューションはssコマンドに移行しています。

ss コマンドを-tおよび-aフラグとともに使用して、すべての TCP ソケットをリストします。これにより、リスニング ソケットと非リスニング ソケットの両方が表示されます。

 $ ss -t -a
State       Recv-Q Send-Q            Local Address:Port                Peer Address:Port   
LISTEN      0      128                           *:sunrpc                         *:*       
LISTEN      0      128                           *:http                           *:*       
LISTEN      0      128                           *:ssh                            *:*       
LISTEN      0      128                           *:60031                          *:*       
ESTAB       0      0                     10.0.2.15:ssh                     10.0.2.2:51699   
ESTAB       0      0                     10.0.2.15:ssh                     10.0.2.2:51049   
LISTEN      0      128                          :::sunrpc                        :::*       
LISTEN      0      128                          :::http                          :::*       
LISTEN      0      128                          :::ssh                           :::*       
LISTEN      0      128                          :::54715                         :::*

確立された状態の TCP 接続のみを表示するには:

 ss -a -t -o state established
Recv-Q Send-Q                 Local Address:Port                     Peer Address:Port   
0      0                          10.0.2.15:ssh                          10.0.2.2:51699    timer:(keepalive,23min,0)
0      0                          10.0.2.15:ssh                          10.0.2.2:51049    timer:(keepalive,114min,0)

ssh

ssh を使用すると、インターネット経由でリモート ホストに安全に接続できます。以前は、rlogin と telnet を使用してリモート ホストに接続し、管理していました。ただし、両方とも、ログイン名とパスワードを含むすべての情報を平文で送信するという根本的な欠陥があります。

ssh は、次の 2 つの機能により、インターネット上で安全な通信を可能にします。

  • リモート ホストが誰であるかを確認します。
  • ホスト間のすべての通信を暗号化します。

リモート ホストに接続するには、リモート ホスト上で OpenSSH サーバーが実行されている必要があります。配布パッケージ マネージャーを使用してインストールできます。たとえば、Ubuntu では次のようにインストールできます。

 $ sudo apt install openssh-server

次に、ssh コマンドを使用してリモート ホスト 10.0.0.50 に接続する方法を示す例を示します。

 me@ubuntu-xenial:~$ ssh 10.0.0.50
The authenticity of host '10.0.0.50 (10.0.0.50)' can't be established.
ECDSA key fingerprint is SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/+PMpnY.
Are you sure you want to continue connecting (yes/no)? yes

ホスト 10.0.0.50 の信頼性を確立できないというメッセージが表示されます。これは、10.0.0.50 (サーバー) との接続が初めて行われ、SSH クライアントがこのリモート ホストをこれまでに見たことがないためです。接続を続行するには、「yes」と入力します。接続が確立されると、パスワードの入力を求められます。

 Warning: Permanently added '10.0.0.50' (ECDSA) to the list of known hosts.
me@10.0.0.50's password:

正しいパスワードを入力すると、リモート ホストにログインします。

 Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64)
 * Documentation:  https://help.ubuntu.com/
..
me@vagrant-ubuntu-trusty-64:~$ 

exit コマンドを使用して、このリモート シェルを終了できます。

また、ssh を使用すると、リモート ホスト上で単一のコマンドを簡単に実行できます。たとえば、リモート ホストで df -h を実行するには、次のようにします。

 $ ssh 10.0.0.50 df -h
me@10.0.0.50's password: 
Filesystem      Size  Used Avail Use% Mounted on
udev            241M   12K  241M   1% /dev
tmpfs            49M  384K   49M   1% /run
/dev/sda1        40G  1.6G   37G   5% /
...
none            224G  113G  111G  51% /vagrant
me@ubuntu-xenial:~$

scp と sftp

scp (セキュア コピー) は、ファイルをコピーするためのcpコマンドに非常に似ていますが、ソースまたはコピー先のパス名にリモート ホスト名を含めることができる点が追加されています。ホスト名とディレクトリ パスはコロンで区切られます。これにより、ファイルを暗号化された形式でネットワーク経由で安全にコピーできるようになります。次のコマンドは、 a.txt をローカル マシンから 10.0.0.50 にコピーします。

 me@ubuntu-xenial:~$ scp a.txt 10.0.0.50:/home/me
me@10.0.0.50's password: 
a.txt                                           100%    0     0.0KB/s   00:00

sftp (secure ftp) もftpに似たファイル コピー プログラムです。ただし、すべてをクリアテキストで送信するのではなく、SSH 暗号化トンネルを使用してファイルをコピーします。また、リモート ホスト上で FTP サーバーを実行する必要もありません。必要なのは SSH サーバーのみです。以下にセッションの例を示します。

 me@ubuntu-xenial:~$ sftp 10.0.0.50
me@10.0.0.50's password: 
Connected to 10.0.0.50.
sftp> put kali-linux-2020.3-installer-netinst-i386.iso
Uploading kali-linux-2020.3-installer-netinst-i386.iso to /home/me/kali-linux-2020.3-installer-netinst-i386.iso
kali-linux-2020.3-installer-netinst-i386.iso    100%  435MB  27.2MB/s   00:16    
sftp> bye

ifconfig

システムに割り当てられている IP アドレスを確認するには、主にifconfigコマンドを使用します。

 [root@lab ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 209.97.137.171  netmask 255.255.240.0  broadcast 209.97.143.255
        inet6 fe80::c035:b2ff:fe9d:72d5  prefixlen 64  scopeid 0x20<link>
        ether c2:35:b2:9d:72:d5  txqueuelen 1000  (Ethernet)
        RX packets 1333200  bytes 167143230 (159.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 979666  bytes 93582595 (89.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 16  bytes 1392 (1.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1392 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@lab ~]#

掘る

dig (Domain Information Groper) は、DNS ネーム サーバーに問い合わせるための柔軟なツールです。

DNS ルックアップを実行し、ネーム サーバーから返された回答を表示します。

 [root@lab ~]# dig .com

; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> .com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12310
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;.com.			IN	A

;; ANSWER SECTION:
.com.		30	IN	A	104.27.119.115
.com.		30	IN	A	104.27.118.115

;; Query time: 12 msec
;; SERVER: 67.207.67.2#53(67.207.67.2)
;; WHEN: Wed Sep 16 17:58:45 UTC 2020
;; MSG SIZE  rcvd: 74

[root@lab ~]#

テルネット

Telnet 接続が確立されている場合は、2 つのホスト間の接続が正常に機能していることを意味します。

 [root@lab ~]# telnet gf.dev 443
Trying 104.27.153.44...
Connected to gf.dev.
Escape character is '^]'.

nslookup

nslookup は、ドメイン ネーム サーバーに問い合わせて IP を解決するプログラムです。

 [root@lab ~]# nslookup relicflare.com
Server:		67.207.67.2
Address:	67.207.67.2#53

Non-authoritative answer:
Name:	relicflare.com
Address: 192.64.119.178

[root@lab ~]#

まとめ

Linux のネットワークは膨大な主題であり、多数のコマンドやユーティリティが必要になります。この記事では、一般的に使用されるいくつかのコマンドについて説明しました。これらのコマンドがネットワークの管理とセキュリティ保護に役立つことを願っています。

「 14 の便利な Linux ネットワーク コマンド」についてわかりやすく解説!絶対に観るべきベスト2動画

Linux入門 非常によく使うLinuxのデバッグコマンド CPU、メモリ、ネットワークの使用状況を確認するコマンドです。  top, free, vnstatコマンドなどを解説。
【すぐできる!】誰でも簡単!Linux をコマンド操作してみよう! #1 パッケージ管理 #Linux #APT