はじめに
本記事は、Coursera の Network Principles in Practice: Linux Networking モジュール「Introduction to Linux Networking」で学んだ内容を整理した学習記録です。
Linux Networking の前提知識
LinuxはPCだけに使うOSではない。
Linuxには膨大な機能群があり、用途によって使う部分が異なる。
| 利用用途 | Linux内の機能例 |
|---|---|
| PCのOS | GUI / ファイル管理 / 標準アプリ |
| ネットワークOS | iproute2 / netfilter / bridge / VLAN / tunnel |
📌 Linuxのネットワーク機能 = Linux Data Plane
→ Forwarding / NAT / VLAN / Bridge / Load Balancing などが含まれる
Linux Networking Utilities
Linux kernel にあるネットワーク機能(Linux Data Plane)を操作するのがNetworking Utilities
| パッケージ | 役割 |
|---|---|
iproute2 |
ネットワーク設定 & 制御 |
net-tools |
ifconfig / arp / route など |
iptables |
NAT / Filtering |
tc |
トラフィック制御 |
ipvsadm |
L4ロードバランシング |
Netlinkとは?
- ユーザ空間 ⇔ kernel の プロセス間通信のプロトコル
- Networking Utilitiesは Netlinkでカーネルに命令している
[User Space] ip / tc / iptables ...
↓ Netlink
[Kernel] Linux Data Plane(処理実行)
ip linkとは
Linuxのネットワークデバイスを操作するコマンド
https://manpages.ubuntu.com/manpages/xenial/man8/ip-link.8.html
よく使うサブコマンド
| コマンド | 目的 |
|---|---|
show |
デバイス一覧の表示 |
set |
状態変更(up/down, MAC変更) |
add |
仮想デバイスの作成(bridge, vlan…) |
delete |
デバイスの削除 |
使用例
ip link show
ip link set dev eth0 up
ip link add name mybridge type bridge
ip link delete dev eth0.2
Troubleshooting Tools
| ツール | 目的 |
|---|---|
ping |
疎通確認 & RTT測定 |
tshark |
パケットキャプチャ(CLI版Wireshark) |
scapy |
Pythonでパケット生成・操作 |
tshark の例
# インターフェース指定
tshark -i eth1
# ARPだけ見る
tshark -i eth1 -f "arp"
📌 -f は「キャプチャフィルタ(事前)」
📌 -Y は「表示フィルタ(後処理)」
Bridge(L2スイッチ)をLinuxで作る
やること
Host1 → Switch → Host2 に L2通信(MACベース) を流す
前提
Bridgeはスイッチの役割をする仮想デバイスですが、接続するポートが無いと動作しません。
ここでは下記のようにコンテナが作成され、各エンドポイントがlinkされている前提で進めています。
Host1 (eth1) ──┐
(eth1)
[ Switch コンテナ ]
(eth2)
Host2 (eth2) ──┘
実行コマンド
# Linuxカーネル上にBridgeデバイスを作成
# switch用のコンテナで実行
ip link add name mybridge type bridge # Bridgeの作成
ip link set mybridge up # Bridgeの起動
ip link set eth1 master mybridge # eth1をBridgeに接続
ip link set eth2 master mybridge # eth2をBridgeに接続
→ Linux 上で 仮想スイッチ ができた状態
→ bridge が L2スイッチとしてFlood/Broadcastを行うためhost1 から送信されたパケットがhost2に届く
VLAN
共有ネットワーク(L2) を論理的に分割する技術
ip link add link eth0 name eth0.2 type vlan id 2
ip link set eth0.2 up
link eth0 は親、eth0.2 は VLAN専用の仮想インターフェースとして作成される
📌 eth0.2 に流れたパケットには VLAN ID 2 のタグが付与される
Geneve / VXLAN(Tunnel技術)
L3 の上に L2 の通信を乗せる(=トンネリング)
→物理ネットワークの制約を超えて、L3上に仮想L2ネットワークを作れる
ip link add name gen0 type geneve id 55 remote 1.2.3.4
カプセル化のイメージ
┌──────────────────────────────┐
│ Outer IP Header ← L3 (WAN通過用)
│ Geneve/VXLAN Header
│ Inner Ethernet Frame ← 本当はL2! (MAC, VLAN, ARPなど)
└──────────────────────────────┘
📌 “L2パケットをL3で運ぶ” → Overlay Network
📌 L2 over L3 と呼ばれる