LPIC あずき本v5.0 ch11 ネットワークの基礎 11.1, 11.2

LPICLinuxネットワーク勉強メモ

TCP/IPの基礎

  • プロトコル

    • 通信を行う上での取り決め

TCP/IPプロトコル

OSI参照モデル TCP/IPの構造
アプリケーション層
プレゼンテーション層
セッション層
アプリケーション層(HTTP, SMTP, TELNET, etc.)
トランスポート層 トランスポート層(TCP, UDP)
ネットワーク層 インターネット層(IP, ICMP)
データリンク層
物理層
ネットワークインターフェース層

TCP: Transmission Control Protocol

  • コネクション型

    • 信頼性高い

      • 再送制御
      • 伝送順序の整列
  • 上位レイヤ

    • FTP
    • Telnet
    • POP
    • SMTP
    • etc.

UDP: Uesr Datagram Protocol

  • コネクションレス型

    • 信頼性低い
    • はやい
  • 上位レイヤ

    • DNS
    • NFS
    • 音声や映像のストリーミング配信

IP: Internet Protocol

  • IPアドレスの規定

    • 32bits
  • データグラム(伝送単位)の規定
  • データグラムが伝送されるネットワーク経路の制御

    • routing

IPv6

  • アドレス部128bits
  • セキュリティ機能

ICMP: Internet Control Message Protocol

  • エラーメッセージや制御メッセージの伝送用
  • pingやtracerouteで使用される

IPアドレス(IPv4)

  • 32ビット
  • 8ビットずつ分割、.区切り10進表記
  • ネットワーク部/ホスト部

    • クラスやサブネットマスクで規定される
  • ホストNICに割り当てられないアドレス

    • ホスト部全ビット0: ネットワークアドレス

      • ネットワーク自身
    • ホスト部全ビット1: ブロードキャストアドレス

      • ネットワーク以下全ホストに送信

クラス

  • 最初の8ビットによる分類
A B C
先頭8ビット 0xxxxxxx 10xxxxxx 110xxxxx
先頭8ビット(10進) 0-127 128-191 192-223
サブネットマスク 255.0.0.0 255.255.0.0 255.255.255.0
ホスト数 2^24 - 2 2-16 - 2 2^8 - 2
  • 特殊なアドレス

    • デフォルトルート

      • 先頭8ビットが0
      • 知らないネットワーク宛のパケットを丸投げ

        • デフォゲ的な?
    • ローカルループバック

      • 先頭8ビットが127
      • localhost127.0.0.1だったり

プライベートアドレス

  • IPアドレスは、原則インターネット内で一意
  • 例外: プライベートアドレス

    • LAN内で一意ならOK
A B C
先頭 00001010.******** 10101100.0001**** 11000000.10101000
先頭(10進) 10 172.16 - 172.32 192.168

CIDR: Classless Inter-Domain Routing

  • クラスCでもホスト数254

    • こんなにいらねえ
  • ネットワークにぶら下げられるホストを減らし、ネットワークを分割する
  • 例: 192.168.0.0/26

    • もともとネットワーク部が24ビットなのを、26に
    • 2ビットを使って、4つのサブネットワークに分ける
第四オクテット 0b00 0b01 0b10 0b11
ネットワークアドレス 192.168.0.0 192.168.0.64 192.168.0.128 192.168.0.192
ブロードキャストアドレス 192.168.0.63 192.168.0.127 192.168.0.191 192.168.0.255
ホストに使えるやつ 1-62 65-126 129-190 193-254

IPアドレス(IPv6)

  • 128ビット

    • ながい
  • :区切りの16進数4桁(=16ビット)8ブロック表記
  • 長いので、省略記法多数

    • 各ブロック先頭の0は省略可
    • 連続する0のみブロックは::と略記可能

      • 1箇所だけ

        • さもないと、何ブロック略記されているのか特定できないから
  • プレフィックス

    • IPv4でいうネットワーク部のこと
    • 64ビット
  • インタフェースID

    • IPv4でいうホスト部のこと
    • 64ビット
分類 IPv6表記 プレフィックス(2進) 備考
ローカルループバックアドレス ::1/128 000…1
グローバルユニキャストアドレス 2000::/3 001
リンクローカルユニキャストアドレス fe80::/10 1111111010
マルチキャストアドレス ff00::/8 11111111 IPv4のブロードキャストアドレス相当
エニーキャストアドレス 複数のホストの集合に割り当てられる

ポート番号

  • 送信元/先の識別に使われる

    • これのおかげで、同一のホストが複数のアプリケーションを使用していても正しく通信できる
    • 0は特殊。「動的に別の空きを割り当ててね」というやつ(any port)
  • どのアプリケーションが何番を使うか、有名どころは決まっている(well-known port)

    • 1023まで予約済
    • IANA: Internet Assigned Numbe Authority

      • well-known portの予約などを行う組織
      • 現在、ICANNの下部組織
番号 トランスポート層 上位サービス・プロトコル 説明
20 TCP FTP FTPのデータ転送
21 TCP/UDP FTP FTPの制御情報
22 TCP SSH SSH
23 TCP Telnet Telnet接続
25 TCP/UDP SMTP 電子メール
53 TCP/UDP DNS DNS
80 TCP HTTP Web
110 TCP POP3 電子メール(受信)
123 UDP NTP NTPサービス
139 TCP/UDP NetBIOS Microsoftネットワーク
143 TCP IMAP 電子メール(IMAP2/IMAP4)
161 UDP SNMP ネットワークの監視
162 TCP/UDP SNMP Trap ネットワークの監視(警告通知等)
389 TCP/UDP LDAP ディレクトリサービス
443 TCP/UDP HTTP over SSL/TLS SSL/TLSによるHTTP接続
465 TCP SMTP over SSL/TLS SSL/TLSによるSMTP接続
514 UDP Syslog ロギングサービス
636 TCP/UDP LDAP over SSL/TLS SSL/TLSによるディレクトリサービス
993 TCP/UDP IMAP over SSL/TLS SSL/TLSによるIMAP接続
995 TCP/UDP POP3 over SSL/TLS SSL/TLSによるPOP3接続
  • 465 — SSMTPはIANAによる正式な割り当てではないらしい
  • レジスタードポート

    • 1024-49151

      • 49151 = 65535 - 16384 = (1 << 16) - 1 - (1 << 14)
      • 使用可能な0-65535のうちだいたい3/4
    • ベンダやグループの申請により割り当てが可能

      • PostgreSQL: 5432 とか
  • IPv4でローカルにWebサーバーを立てたなら

    • 127.0.0.1:80
  • IPv6では、IPアドレスのブロックの区切りの:と混ざってしまわないよう、アドレスを[]で囲む

    • [0:0:0:0:0:0:0:1]:80
  • ポート番号とサービスとの対応は/etc/servicesに記述されている

/etc/services

# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, officially ports have two entries
# even if the protocol doesn't support UDP operations.
#
# Updated from http://www.iana.org/assignments/port-numbers and other
# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
# New ports will be added on request if they have been officially assigned
# by IANA and used in the real-world or are needed by a debian package.
# If you need a huge list of used numbers please install the nmap package.

tcpmux		1/tcp				# TCP port service multiplexer
echo		7/tcp
echo		7/udp
discard		9/tcp		sink null
discard		9/udp		sink null
systat		11/tcp		users
daytime		13/tcp
daytime		13/udp
netstat		15/tcp
qotd		17/tcp		quote
msp		18/tcp				# message send protocol
msp		18/udp
chargen		19/tcp		ttytst source
chargen		19/udp		ttytst source
ftp-data	20/tcp
ftp		21/tcp
fsp		21/udp		fspd
ssh		22/tcp				# SSH Remote Login Protocol
telnet		23/tcp
smtp		25/tcp		mail

ネットワークの設定

ネットワークの基本設定

  • コマンドで設定

    • ifconfigとか
    • 一時的
  • 設定ファイルで設定

    • /etc以下のなにか
    • 永続化

/etc/hostnameファイル

wand-ThinkPad-X240s

/etc/hostsファイル

127.0.0.1	localhost
127.0.1.1	wand-ThinkPad-X240s

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • 名前解決を記述

    • ホスト名の定義ファイルではない

      • それは/etc/hostname
  • 小規模ネットワークならこれでネットワーク内の名前解決が実現可能

    • Dockerでちょっと遊ぶだけ、とか
  • ネットワークに変更があったら、全ホストの/etc/hostsを書き換える必要あり

/etc/network/interfacesファイル

  • Debian系ディストリ
  • ネットワークインタフェースの設定を記述
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
  • loインタフェースをループバックとして設定しているもよう

/etc/sysconfig/network-scriptsディレクトリ

  • Red Hat系ディストリ
  • 様々なネットワークインタフェースの設定ファイルを配置

    • ifcfg-eth0とかそういう感じのファイル命名
  • CentOS7コンテナにはなかったです

    • nmtui/nmcliコマンドを使って設定することが推奨されているらしい
  • CentOS6コンテナにはあった

NetworkManagerによる設定

  • NetworkManager

    • CentOS, Red Hatに導入されている
    • centos7コンテナには入っていなかった
    • C-S構成
  • インストール
yum install -y NetworkManager
  • サービス動かす
systemctl start NetworkManager
systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-04-17 06:24:31 UTC; 5s ago
     Docs: man:NetworkManager(8)
 Main PID: 2318 (NetworkManager)
   CGroup: /docker/727bfe1baddeb8a5b1488ef5c03d3198417e541231a2e53a06ec7c691adbd0e0/system.slice/NetworkManager.service
           └─2318 /usr/sbin/NetworkManager --no-daemon
           ‣ 2318 /usr/sbin/NetworkManager --no-daemon

Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9644] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9652] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9656] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9659] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9668] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9671] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9674] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9680] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9684] ...
Apr 17 06:24:31 727bfe1badde NetworkManager[2318]: <info>  [1555482271.9689] ...
Hint: Some lines were ellipsized, use -l to show in full.
  • Clientさわる
nmcli --help
  • dockerみたいなコマンド体系

    • 「何を(OBJECT)」「どうする」という感じ
...

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent
  m[onitor]       monitor NetworkManager changes
  • Network Managerの状態を表示
nmcli general status
# nmcli general # これでもおなじ
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled 
  • 無線接続
  • 状態取得
nmcli radio
WIFI-HW  WIFI     WWAN-HW  WWAN    
enabled  enabled  enabled  enabled 
  • Wi-Fiのみ取得
nmcli radio wifi
enabled
  • Wi-Fi無効化・有効化

    • privilegedコンテナ内から実行するとホストのWi-Fiが影響を受ける
sudo nmcli radio wifi off
nmcli radio
WIFI-HW  WIFI      WWAN-HW  WWAN    
enabled  disabled  enabled  enabled 
sudo nmcli radio wifi on
nmcli radio all
WIFI-HW  WIFI      WWAN-HW  WWAN    
enabled  disabled  enabled  enabled 
  • 接続一覧取得
nmcli connection show
NAME                UUID                                  TYPE      DEVICE 
eth0                50a52767-1d0d-4a3b-b4de-81161e89807f  ethe
rnet  eth0   
Wired connection 1  291c7b26-6e87-32b8-b702-3839a81df5dd  ethernet  --     
  • デバイス情報取得
nmcli device status
# nmcli device # これでもおなじ
DEVICE  TYPE      STATE      CONNECTION 
eth0    ethernet  connected  eth0       
lo      loopback  unmanaged  --    
  • hostnamectl

    • ホスト名設定・関連情報の取得
hostnamectl status
# hostnamectl status # これでもおなじ
[root@727bfe1badde /]# hostnamectl status
   Static hostname: 727bfe1badde
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 5e7ad63340d1400aba5b3b022de880bb
           Boot ID: 3aa178b2499447f28aa817cf02905437
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 4.15.0-47-generic
      Architecture: x86-64
  • ホスト名変更
sudo hostnamectl set-hostname piyo

コラム: systemd-networkd

  • Systemd採用システム
  • NetworkManagerやnetplan(Ubuntu)の代替
  • /etc/systemd/network/ディレクトリ以下の設定ファイルで設定