基盤構築演習
Cloud Infrastructure Design and Deployment
2. Linux ー 構築 基礎知識
2017.v1
Table of contents
Linux ー ー 基礎
o OS 役割
o Linux 起動
o systemd ー 起動
ー 基礎
o ー ン LVM 構成
o ー ー ッ 利用
o iSCSI ー ッ 構成
ネッ ワー 基礎
o IP ネッ ワー VLAN 基礎
o iptables 基礎 ッ ン
o iptables NAT 処理
o ネッ ワー ネー ー
o OpenFlow Open vSwitch
鍵 SSH 認証
Linux ー ー 基礎
OS 役割と
OS 役割と ?
OS 物理 ン ーネン 違い 吸収 抽象化 単純化 架空 ン
ー ー / ー ン・ 提供
o OS 利用者 基本的 ー 違い 意識 必要 あ
OS 導入・設定 管理者 ー 違い 理解 上 適
切 構成 必要 あ
o 特 ー 応 選択 導入 注意 必要
物理 ン ーネン
抽象化 単純化
架空 ン ー
ー ン・
役割
ー ・ ー 物理
NIC 要求
Linux ーネ 適切 使
用 実際 行い
Linux ーネ ー ン 対応
ン 必要 あ
o Red Hat Enterprise Linux 各 ーネ
RPM ッ ー 内 ーネ 本体 合わ
ン 一式 含
い
o /lib/modules/< ーネ ー ン>/以下 該
当 ーネ 用 導入
Linux起動時 ー
ン 必要 初
期RAM 提供
o 初期RAM 後 説明
ー
物理
ー ・
ソー 配分
ー 空間
Linux ーネ
ー
Linux ー ー 基礎
Linux 起動プ セ
Linux 起動プ セ と初期RAM
ー 電源 入 ー 搭載 BIOS 起動 ー
ー GRUB2 読 込 実行 開始
o BIOS 使用 独自機能 起動
GRUB2 起動 ーネ 選択画面 表示 指定 ーネ 初期RAM 読
込 後 ーネ 実行 開始
o 初期RAM ー 必要 init
含
ーネ 初期RAM 上 領域 展開 読
込 後 init 実行
ー ー GRUB2
/boot
ー ー 読 込
RAM 領域
展開
物理 起動
Linux ーネ
初期RAM
Linux ーネ
初期RAM
RAM 領域
・
・init
・ 他 ン 類
BIOS 起動
Linux 起動プ セ と初期RAM (2)
ーネ 展開 初期RAM 含 init 実行 OS 起動
開始 RHEL7 以降 init systemd ン い
o systemd 関 後 補足
RHEL6以前 init 以下 う い
lrwxrwxrwx 1 root root 7 2月 21 11:13 bin -> usr/bin drwxr-xr-x 2 root root 4.0K 2月 21 11:13 dev
drwxr-xr-x 11 root root 4.0K 2月 21 11:13 etc
lrwxrwxrwx 1 root root 23 2月 21 11:13 init -> usr/lib/systemd/systemd lrwxrwxrwx 1 root root 7 2月 21 11:13 lib -> usr/lib
lrwxrwxrwx 1 root root 9 2月 21 11:13 lib64 -> usr/lib64 drwxr-xr-x 2 root root 4.0K 2月 21 11:13 proc
drwxr-xr-x 2 root root 4.0K 2月 21 11:13 root 省略
#!/bin/nash 中略
echo "Loading ehci-hcd.ko module" insmod /lib/ehci-hcd.ko
echo "Loading ohci-hcd.ko module" insmod /lib/ohci-hcd.ko
echo "Loading uhci-hcd.ko module" insmod /lib/uhci-hcd.ko
mount -t usbfs /proc/bus/usb /proc/bus/usb echo "Loading jbd.ko module"
insmod /lib/jbd.ko 中略
echo Mounting root filesystem. mount /sysroot
echo Setting up other filesystems. setuproot
echo Switching to new root and running init. switchroot
#!/bin/sh
#
# Licensed under the GPLv2
#
# Copyright 2008-2009, Red Hat, Inc.
# Harald Hoyer <harald@redhat.com>
# Jeremy Katz <katzj@redhat.com> 中略
# start up udev and trigger cold plugs udevd --daemon –resolve-names=never
中略
exec switch_root "$NEWROOT" "$INIT" $initargs || { warn "Something went very badly wrong in the init ramfs. Please "
warn "file a bug against dracut." emergency_shell
} fi
RHEL5 場合
→ insmod ン 明示的 ー RHEL6 → udevd 必要 場合 判別 ー (*)
判別 い 参考資料: RHEL6 け 機能変更 ョ udev 自動 ー 参照
Linux ー ー 基礎
systemd よ ービ 起動
systemd と
systemd Linux ーネ 起動後 一番最初 起動 常 ID=1 持
o systemd 起動 予 用意 設定 従い 様々 起動 い OS 起動時
自動実行 い 様々 や ー ン systemd 起動
RHEL7以降 標準機能 採用 い
o 以前 SysVinit いう形式 採用 い
SysVinit Unix 受け継 伝統的 起動方法 ーネ 起動 /sbin/init /etc/inittab 設定 従い
初期化 ン 応 起動 順次実行 いく方式
起動 単純 管理 わ や く 容易
限界 systemd ッ
o OS 利用環境 多様化 従い OS 起動処理 様々 要件 求 う 代表的 例
仮想 ー ー 普及 あ
物理環境 あ 一度起動 後 構成 変更 新 機器 接続等 稀 初期化 起動時 一回行
え 十分 仮想化環境や 環境 仮想 ー ー ネッ ワー や 構成 動的 変更
可能
構成 変更 行わ 一部 初期化処理 再実行 必要 あ 記述 起動処理
部分 切 出 再実行 再実行 伴い 影響 うけ ? い 操作 SysVinit 形式
困難
o systemd 問題 解決 起動時 行わ 処理 Unit いう単位 細分化
依存関係 定義 う い 必要 応 特定 処理 再実行 事 容易
o 依存関係 定義 依存関係 い 並列 起動 う 起動 高速化 い
う ッ あ
Unit 種類と ービ 操作
systemd 管理 Unit いく 種類 あ Unit 管理 拡
張子 種類 判別 以下 Unit 種類
o service : ー 起動 管理者 主 操作
o target :複数 Unit ー 化
o mount : ン /etc/fstab 自動生成
o swap : ワッ 領域 有効可 /etc/fstab 自動生成
o device : 関 処理 認識 自動生成
設定 以下 保存 い
o /usr/lib/systemd/system 設定内容
o /etc/systemd/system 変更 内容
systemd 管理 ー systemctl ン 操作 行い
o 起動: systemctl start <<service>>
o 停止: systemctl stop <<service>>
o 有効化: systemctl enable <<service>>
o 無効化: systemctl disable <<service>>
o 再起動: systemctl restart <<service>>
o 一覧表示: systemctl - a
systemd 詳 い説明 参考資料 確認く い
o Linux 構築・運用技術 第5章 Linux 内部構造
ー 基礎
ー ンとLVM 構成
領域 ー ン構成
領域 ー ン 特別 要件 無い限 次 単純 構成
勧
o (*) 本来 ワッ 領域 不要 程度 十分 実 搭載 望 場
合 最大 2GB 程度 ワッ 領域 用意 十分
ー ン 構成方法
o ン ー 時 ー ン設定画面 作成 選択後 上
記 ー ン 指定
o 自動 ー ン 選択 LVM ( 論理 ー ネー ) 利用
ー ン構成
ー ン ー ッ 説明
/boot ext4 / xfs 通常 500MB 程度 十分
/ ext4 / xfs 10GB 程度あ 全 ッ ー 導入 可能
内蔵 総容量 応 決定
ワッ 領域 Swap Red Hat 社 下記 推奨 い
(*)・実 2GB 以下 時 : 実 2 倍
・実 2-8GB 時 : 実 同
・実 8-64GB 時:実 半分
・実 64GB 以上 時:利用用途 応 決定
LVM 概要
論理 ー ・ ネー LVM 物理 ー
PV ー ー VG 論理 ー LV
概念 管理
o 物理 ー PV :個々 物理 /dev/sdX
o ー ー VG :複数 PV ー
o 論理 ー LV :VG内 作成 仮想的
LV 上 作成 使用
o 複数PV LV 作成可能 後 LV 拡張 可能
o 新 PV 追加 VG 全体 拡張可能
ー ー VG
論理 ー LV
物理 ー PV
ー ン
LVM 管理
LVM い 管理
/dev/<VG名>/<LV名> /dev/sda1
/dev/sda2
/dev/sda3
LVM 基本操作
新規PV VG 構成 LV 作成 手順 例 (1)
o pvcreate: /dev/sdb /dev/sdc PV 登録
o vgcreate: /dev/sdb /dev/sdc VG vg_data00 作成
o lvcreate: vg_data00 内 512MB LV lv_data00 作成
o -i ン 複数PV 例 2 個 ン 指定 い
LV 上 作成 使用 (2)
o 複数PV LV 作成可能 後 LV 拡張 可能 (3)
o 新 PV 追加 VG 全体 拡張可能 (4)
# pvcreate /dev/sdb
# pvcreate /dev/sdc
# vgcreate vg_data00 /dev/sdb /dev/sdc
# lvcreate -i 2 -L 512M -n lv_data00 vg_data00
# mkfs.ext4 /dev/vg_data00/lv_data00
# mkdir /data00
# mount /dev/vg_data00/lv_data00 /data00
(1) PV/VG 構成 LV 作成
(2) LV 上 作成 ン
# pvcreate /dev/sdd
# vgextend vg_data00 /dev/sdd
(4) VG 新規PV 追加
# lvextend -L+128M /dev/vg_data00/lv_data00
# resize2fs /dev/vg_data00/lv_data00
(3) LV 拡張
# pvdisplay (or pvs)
# vgdisplay (or vgs)
# lvdisplay (or lvs)
構成情報 確認
# yum install -y lvm2
# reboot
LVM ップ ッ ついて
既存 論理 ー ッ ッ 論理 ー 作成
o 元 論理 ー 差分 ー 保存 領域 け 持 元
論理 ー ッ ッ 書 込 発生 差分 ー
書
o 読 込 際 差分 あ 場合 差分 ー 読 差分 い場
合 元 論理 ー ー 読
差分 ー 領域 不足 ッ ッ 使用不能
o 通常 ッ ッ 物理 ー 取得 後 ッ ッ
破棄
論理 ー
差分 ー 領域
読 込
差分 あ 場合
差分 い場合
ッ ッ
LVM ッ ッ 仕組
ッ ッ
論理 ー
LVM ップ ッ よ ッ ップ
ッ ッ 作成 一瞬 終わ ッ ッ 取得
う ー ン停止時間 短縮 い場合 有用
o ッ ッ 作成 削除 次 ン 用い
o lvcreate -s -L < 差分領域 容量> -n < ッ ッ LV名> /dev/<VG名
>/<LV 名>
o lvremove -f /dev/<VG 名>/< ッ ッ LV名>
ッ ッ ッ ッ
取得 後 ッ ッ 削除
LVM ッ ッ ッ ッ 取得 流 ン 例
・ ー ン停止
・ ↓ ン ン
・ ッ ↓ ッ 作成
・ ↓ ン
・ ↓ ー ン再開
ー ン停止# umount /data00
# lvcreate -s -L 100M -n lv_snap00 /dev/vg_data00/lv_data00
# mount /dev/vg_data00/lv_data00 /data00
ー ン再開
# mount /dev/vg_data00/lv_snap00 /mnt/snapshot
/mnt/snapshot ッ ッ
# umount /mnt/snapshot
# lvremove -f /dev/vg_data00/lv_snap00
Device Mapper ついて
LVM 動作 内部的 Device Mapper いう機能 実現 い
o Device Mapper ッ 特定 ッ 切 出 別名 付け 別
ッ う
o Device Mapper Linux け ッ 操作 基本機能 1 LVM う 論理
実現 ー ン ー 二重化 暗号化等
利用 い
様々 ッ ン 可能
o 方式:Linear Striped Mirror Multipath Snapshot Crypt Zero Error Delay
o 詳細 い man(8) dmsetup 参照
ッ
ッ
DM
Linear ッ ン 例
ッ
ッ
DM
Striped ッ ン 例
ー 基礎
ー フ と ープ ッ 利用
ー フ 仕組み
ー 通常 ー
使用 仕組
o DVD ー 形式 書 ISO ー
ー 一種
ー 内部 ー ン 分割
各 ー ン 作成
o ー 仮想化環境 ー 仮想 ン 接続 仮
想 利用
ー
ー 内部 仮想
ー ン 分割
作成
ー ン
論理 ー
/dev/vda1
/dev/vda2
/dev/vda3
ープ ッ 利用 (1)
ー ンや論理 ー 対応 あ
o /dev/sda1 /dev/<VG 名>/<LV名>
o ン 指定
ー ー ッ 紐 け ー 内
ン 編集
o 内部 ー ン 持 いISO -o loop ン け
ン 自動的 ー ッ 紐 け 行わ
o 次 例 dvd.iso ー ッ /dev/loop0 紐 け い
dvd.iso
物理 ー
/dev/sda
/dev/loop0
ー ッ
# mount -o loop dvd.iso /mnt/iso
# df | grep loop
/dev/loop0 3351190 3351190 0 100% /mnt/iso
/dev/sda1
/dev/sda2
/dev/sda3
ープ ッ 利用 (2)
ー 内部 ー ン 作成 場合 ー
ン 個別 ッ ン 操作 必要
o 次 ン 各 ー ン /dev/mapper/loopXpY ッ ン
losetup -fv < ー > : ー 全体 紐付け
kpartx -av < ー ッ > : ー 含 ー ン ッ ン
kpartx -d < ー ッ > : ッ ン 解除
losetup -d < ー ッ > : ー 全体 紐 け 解除
o 次 3 ー ン 持 volume01.img 第2 ー ン ン 例
/boot ー ン ー ー ン Swap 領域 持 仮想 ー
# losetup -fv volume01.img Loop バイ /dev/loop0 です
# kpartx -av /dev/loop0
add map loop0p1 (253:0): 0 208782 linear /dev/loop0 63 add map loop0p2 (253:1): 0 8193150 linear /dev/loop0 208845 add map loop0p3 (253:2): 0 1044225 linear /dev/loop0 8401995
# mount /dev/mapper/loop0p2 /mnt/image
# ls -l /mnt/image/ 合計 184
drwxr-xr-x. 2 root root 4096 2月 14 11:56 2011 bin drwxr-xr-x. 2 root root 4096 2月 14 09:57 2011 boot drwxr-xr-x. 2 root root 4096 2月 14 09:57 2011 dev drwxr-xr-x. 74 root root 4096 3月 4 08:56 2011 etc
以下略
# umount /mnt/image
# kpartx -d /dev/loop0
# losetup -d /dev/loop0
/dev/loop0
/dev/mapper/loop0p1
/dev/mapper/loop0p2
/dev/mapper/loop0p3
ー
volume01.img
ー 基礎
iSCSI ター ッ 構成
iSCSI 概要
iSCSI ー 接続 SCSI IP ネッ ワー 転送
技術
o ー 従来 同 SCSI 認識
iSCSI接続専用 使用 ー ・ ー
く 通常 NIC 使用 ソ ・ ー
利用
o ー ・ ー iSCSI 処理 上 行わ
Linux 通常 SCSI 認識
o ソ ・ ー Linux 機能 iSCSI 処理 行い
/dev/sdX
SCSI ー
SCSI /dev/sdX
従来 SCSI接続 SCSI
iSCSI ー 装置
iSCSI 接続
仮想SCSI
NIC IP
SCSI iSCSI 変換
ー ・ ー 仕組
ネッ ワー
ッ
Linux 従来 同
SCSI 見え
iSCSI 接続
専用
Linux
SCSI 見え
ソフ ・ター ッ 利用
Linux 機能 iSCSI ー 装置 ー ン ソ ・ ー ッ 呼
o Linux ー 上 論理 ー や ー iSCSI 他 Linux ー 見
o 時 ー ッ 側 iqn いう識別 設定 関連付け iqn 対 iSCSI ー ー 行い
o 次 3GB LVM ー iSCSI 公開 例 的 ACL 無効化 い
# yum install -y targetcli
# systemctl enable target.service && systemctl start target.service
# pvcreate /dev/vdb
# vgcreate vg_data01 /dev/vdb
# lvcreate -L 3G -n lv_data01 vg_data01 && lvcreate -L 3G -n lv_data02 vg_data01
# lvs
LV VG Attr LSize lv_data01 vg_data01 -wi-a--- 3.00g lv_data02 vg_data01 -wi-a--- 3.00g
# targetcli /backstores/block create name=data01 dev=/dev/vg_data01/lv_data01
# targetcli /backstores/block create name=data02 dev=/dev/vg_data01/lv_data02
# targetcli /iscsi create iqn.2016-03.com.example:host01
# targetcli /iscsi/iqn.2016-03.com.example:host01/tpg1/luns create /backstores/block/data01
# targetcli /iscsi/iqn.2016-03.com.example:host01/tpg1/luns create /backstores/block/data02
# targetcli /iscsi/iqn.2016-03.com.example:host01/tpg1 set attribute generate_node_acls=1
# targetcli /iscsi/iqn.2016-03.com.example:host01/tpg1 set attribute authentication=0
# targetcli saveconfig
lv_data01
/dev/sdX
lv_data02
物理 LVM
data01
data02
ソ ー ッ
ー ッ LUN
iqn.2016- 03.com.exampl
e:host01
ー ッ iqn
ー ー
ソ ・ ー ッ
ン ー 有効化
LVM ー 作成
LVM ー
ー ッ LUN 登録
iqn 登録 LUN 関連付け ACL 無効化 設定 保存
ソフ ・ ーター 利用
ー ー ー ッ 側 設定 iqn 対
行い
o iqn ン 行う iqn 関連付け
可能
o 以下 Linux ソ ・ ー ー 用い 先 例 公
開 iqn ン 例
# yum install -y iscsi-initiator-utils
# systemctl enable iscsid.service
# systemctl start iscsid.service
# iscsiadm -m discovery --type sendtargets --portal <<ターゲッ IP >>
<IP >:3260,1 iqn.2016-03.com.example:host01
# iscsiadm -m node -T iqn.2016-03.com.example:host01 -p <<ターゲッ IP : ー 番号>> -l
Logging in to [iface: default, target: iqn.2016-03.com.example:host01, portal: <<taget ip>>] (multiple) Login to [iface: default, target: iqn.2016-03.com.example:host01, portal: <<target ip>>] successful.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 3G 1 disk
sdb 8:16 0 3G 1 disk vda 5 :0 0 0G 0 disk
└─vda1 5 : 0 0G 0 part /
ソ ・ ー ー
ン ー 有効化
ー ッ iqn 検索
ー ッ iqn
対 ン
実行
ー ッ 側 公開 ー ー ー側 参照可能
iqn と ACL
先 例 ー ッ 側 認証 無効化 い 実際 環境 ACL 使
可能 ー ー 制限 必要 あ
o キ 上 理由 あ iSCSI 公開 ッ
あ 利用 ー ー側 OS ext4 やxfs等 作成
利用
o 一般的 OS キ ッ 制御や排他制御 行う事 複数
1 iSCSI 領域 利用 う 高確率 ー 破壊 い
o 問題 避け 接続 複数 OS間 ー 呼 複
数 1 領域 共有 利用 必要 あ
iSCSI 一般的 ACL ー ッ 側 接続可能 ー ー iqn 制限
iSCSI ー ー側 iqn 持 い
data01 iqn.2016- 03.com.exampl
e:host01 iqn.2016- 03.com.exampl
e:client01
iqn.2016- 03.com.exampl
e:client02
ー ッ
ー ー
ACL 無効化 い 環境 場合
制御
接続可能!
制御
data01 iqn.2016- 03.com.exampl
e:host01 iqn.2016- 03.com.exampl
e:client01
iqn.2016- 03.com.exampl
e:client02
ー ッ
ー ー
ACL 設定 い 環境 場合
制御
接続不可
全 接続OK 03.com.example:clientiqn iqn.2016-
01 以外 接続禁止
ネッ ワー 基礎
IP ネッ ワー とVLAN 基礎
IP ネッ ワー 基本構造
IPネッ ワー 基本単位 L2 ッ 相互接続 続 ネッ
複数 ネッ ー 相互接続
o 同 ネッ 接続 ー ー 介 直接 ッ 交換
o 異 ネッ 向け ッ ー 中継 い
o L3 ッ 内部 仮想 ー 持 ネッ ワー ッ
192.168.1.1 192.168.2.1
192.168.1.10 192.168.1.20
192.168.2.10 192.168.2.20
ネッ 192.168.2.0/24
ネッ 192.168.1.0/24
L3 ッ
仮想 ー
L2 ッ L2 ッ L2 ッ
ネッ ネッ
論理接続図
物理接続図
ネッ ワー 表記方法
各 ネッ 利用 IP 範囲 示 ネッ ワー 割
当
o ネッ ワー 192.168.1.0/24 192.168.1.0 左 24 ッ 分 固定
後 自由 使え いう意味
IP 8 ッ .8 ッ .8 ッ .8 ッ いう数字 並 今 場合
192.168.1. 固定 最後 8 ッ 0 〜255 自由 使え
範囲 最初 最後 あ 192.168.1.0 192.168.1.255 特別 意味 持 ー
割 当 最初 192.168.1.0 ネッ ワー 表 最後
192.168.1.255 ー キ
o 192.168.1.0/255.255.255.0 192.168.1.0/24 同 意味
関係 下図 参照 く い /255.255.255.0 や /24 ネッ 呼
IP 表記 際 ネッ ワー 明示 ネッ 併
記 あ
o 例え 192.168.1.10/24 ネッ ワー 192.168.1.0/24 ネッ
属 わ
o 1 ネッ 内 異 ネッ ワー IP 混在
255.255.255.0 11111111.11111111.11111111.00000000
2 進数表記
24 ッ
ネッ ワー 計算例
IP 192.168.100.5/255.255.255.240 属 ネッ ネッ ワー
計算 利用可能 IP 範囲 求
o 下図 自由 使え 部分 末尾 4 ッ IP 範囲 192.168.100.0 〜
192.168.100.15 わ
o 自由 使え 部分 0 入 ネッ ワー
192.168.100.0/28 あ い 192.168.100.0/255.255.255.240 ネッ ワー
同様 IP 192.168.100.24/255.255.255.240 属 ネッ
ネッ ワー 計算 う う ?
o 答 192.168.100.16/28
255.255.255.240 11111111.11111111.11111111.1111 0000
28 ッ
192.168.100.5 11000000.10101000.01100100.0000 0101
2 進数表記 固定部分 自由 使え 部分
VLAN 基本的 仕組み
VLAN L2 ッ 内部 複数 ネッ ワー ン 作成
機能
o ー 内部 VLAN 接続 指定 ー VLAN
o ー VLAN 設定 ー 接続 機器 VLAN 用 特別 設定 不
要
ッ 間 ー 接続 際 接続 ー VLAN 設
定
o ー 出入 ッ VLAN 行く 示 VLAN
付け
ー VLAN100 ー VLAN200
VLAN VLAN
1 2 3 4 5
VLAN100 VLAN200
ッ #1 ッ #2
1 2 3 4 5
VLAN100 VLAN200
ー VLAN100 ー VLAN200
部分 VLAN VLAN100
く VLAN200 付 ッ 流
Linux ー VLAN 接続方法
Linux ー VLAN 接続
2 種類 方法 あ
o ー VLAN 設定 ッ ー
接続
Linux ー 側 特別 設定 不要
ー VLAN 設定 VLAN 通信
行い
o VLAN 設定 ッ ー 接
続
Linux ー 側 付け外 行う
VLAN 構成 必要 あ
複数 VLAN 構成 複数
VLAN 通信 可能
1 3 4 5
VLAN100 VLAN200
eth0
192.168.100.10
eth0
2
eth0
eth0.100 eth0.200
192.168.200.10
192.168.100.11 192.168.200.11
VLAN
192.168.100.10
DEVICE=eth0.100 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.100.11 NETMASK=255.255.255.0 ifcfg-eth0.100
DEVICE=eth0 ONBOOT=yes BOOTPROTO=none
ifcfg-eth0
物理NIC
ー 仮想化 おけ VLAN接続
ー 仮想化環境 仮想 ッ 仮想
ッ 経由 仮想 ン VLAN
接続 仮想 ン VLAN
接続
o 仮想 ン OS 上 仮想NIC 対
IP 設定
o VLAN 付け外 VLAN 行う
OS VLAN 存在 意識 必要
あ 1 3 4 5
VLAN100 VLAN200
2
eth0
仮想 ン#1
br100 br200
仮想 ン#2
仮想 ン#3
仮想 ン#4
eth0.100 eth0.200
付 ッ
ッ
仮想 ッ
VLAN
DEVICE=eth0.100 ONBOOT=yes BOOTPROTO=none BRIDGE=br0 ifcfg-eth0.100
DEVICE=eth0 ONBOOT=yes BOOTPROTO=none
ifcfg-eth0
物理NIC
DEVICE=br100 ONBOOT=yes TYPE=Bridge BOOTPROTO=none ifcfg-br100
ネッ ワー 基礎
iptables 基礎と ッ フ タ ン
iptables 機能
iptables 機能 大 く ッ ン
NAT (Network Address Translation) 分
o ッ ン Linux 上 ー 機能 提供
IP ッ 送信 受信 転送 い 許可条件
設定
o NAT Linux ー ー 使用 際 利用 機能
ッ 転送時 ッ 含 送信元 く 宛先IP
変換
正確 DNAT 宛先 変換 SNAT 送信元 変換 ー
SNAT 特別版 3 種類 あ 詳細 後 説明
ン ーネッ
192.168.100.10
192.168.100.1 192.168.100.11
iptables 利用例
ン ーネッ
接続 ッ ン
ー IP
XX.XX.XX.XX
ー ネッ ワー
ン ーネッ ー 接続 外部 接続 ン ッ
ー 用 Linux ー
ー ネッ ワー 192.168.100.0/24
iptables 設定方法
iptables 有効化/無効化 iptables ー 起動・停止 行い
o # service iptables start : 設定 /etc/sysconfig/iptables
化
o # service iptables stop : 設定 無効
RHEL7 iptables 利用 iptables-services 導入
iptables 設定 設定 編集 再 化 方法
iptables ン 設定 直接変更 方法 あ
o 設定 直接変更 場合 別途 設定 内容 書 出
い 再起動後 変更 失わ
iptables ン 設定
/etc /sysconfig/iptables 設定
設定 編集
iptables 2 種類 設定方法
設定 再 化
# service iptables restart
設定 書 出
# service iptables save
iptables おけ 処理 流
Linux ー 通過 ッ いく ーン 通過 い
o INPUT ーン : 受信 ッ 通過
o OUTPUT ーン : 送信 ッ 通過
o PREROUTING FORWARD POSTROUTING ーン : 転送 ッ 通過
ーン 次 ー 設定 従 ッ 処理 行わ
o filter ー : ッ ン 処理 定義
o nat ー : NAT 処理 定義
ネッ ワー
filter ー
filter ー
INPUT ーン
OUTPUT ーン
ネッ ワー #2
nat ー
nat ー
PREROUTING ーン
POSTROUTING ーン
ネッ ワー #1
filter ー
FORWARD ーン
DNAT処理 SNAT処理
受信 ッ
INPUT ーン
送信 ッ
転送 ッ
ー ン
ッ フ タ ン 設定例
ッ ン 設定 基本 ン 次 通
o 指定条件 ッ ッ 対 ー ッ 定義
iptables -A < ーン> < ッ 条件> -j < ー ッ >
o ー ッ 定義
iptables -P < ーン> < ー ッ >
o -A ン 設定 順 ッ 条件 評価 行わ 最初 ッ 条件 対
ー ッ 実行 LOG ン以外 評価 終了
o 条件 ッ 場合 -P ン 指定 ン 実行
o 現在 設定 次 ン 表示
iptables [-v][-n] -L < ーン>
-v ン 詳細情報 表示 -n ン IP やTCP/UDP ー 番号 数値 表示
指定 い場合 名前解決 行い
ー ッ 説明
ACCEPT ッ 送受信 許可
DROP ッ 破棄
REJECT ッ 拒否 ICMP 通
知
LOG ッ 情報 Syslog 出力
# service iptables stop
# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -d 192.168.100.10 -p tcp -m tcp --dport 22 -j ACCEPT
# iptables -A INPUT -j LOG -m limit --log-prefix "[INPUT Dropped] "
# iptables -P INPUT DROP
# service iptables save
# service iptables start
受信 ッ 対 ン 設定手順 例
192.168.100.10
外部 接続 ッ
ン
ー 定義チ ーン
用意 ーン 他 任意 名前 ーン 追加
定義 ー 定義 ーン 呼
o -j ン ー ッ 名 ー 定義 ーン 指定 ッ
該当 ー 定義 ーン 指定 処理 行わ
ー ン 呼 出 ー ー 定義 ーン内 評価
ッ ッ 呼 出 元 ーン 戻 評価 継続
o 次 SSH 接続 許可 条件 設定 SSH_OK ーン 定義
FORWARD ーン 呼 出 例
# iptables -N SSH_OK
# iptables -A SSH_OK -p tcp -p tcp -m tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -j SSH_OK
SSH_OK ーン 作成
SSH_OK ーン ー 追加
SSH_OK ーン 転送 ー
ネッ ワー #2
nat ー
nat ー
PREROUTING ーン
POSTROUTING ーン
ネッ ワー #1
filter ー
FORWARD ーン
転送 ッ
filter ー
iptables と firewalld
RHEL7 iptables ッ ー あ firewalld いう
ッ ー管理 採用 い
o 仮想化や ン 環境 登場 iptables ー 複雑化 複数
頻繁 ー 変更 行わ う 全体 整合
ー 管理 仕組 必要 firewalld 誕生
o firewalld 内部 iptables 利用 い 2 同時 ー ー 操
作
2 設定 競合 う可能性 あ
本講義 主 iptables 利用 い
o OpenStack 等 設定 ッ ー ー 確認 利用
firewalld
実際 ッ ー設定
iptables
ネッ ワー 基礎
iptables よ NAT処理
SNAT/ マ カ ー 仕組み
下図 SNAT/ ー 送信元IP 変換 例
o ー ネッ ワー IP 192.168.100.10 ー ン
ーネッ IP YY.YY.YY.YY ー ッ 送信
o ー 用Linux 送信元IP 自身 ー IP XX.XX.XX.XX 書
換え ン ーネッ ッ 転送
o ン ーネッ 返送 ッ 宛先IP 元
192.168.100.10 逆変換 ー ネッ ワー ー 送 返
YY.YY.YY.YY
ン ーネッ
192.168.100.10 192.168.100.10
YY.YY.YY.YY
XX.XX.XX.XX YY.YY.YY.YY
XX.XX.XX.XX YY.YY.YY.YY
192.168.100.10 YY.YY.YY.YY
宛先IP 送信元IP
宛先IP 送信元IP
逆変換 変換
ー IP
XX.XX.XX.XX
ー ネッ ワー 192.168.100.0/24
ー 用 Linux ー
複数 ー SNAT 処理 ついて
複数 ー ー IP 共通 ー IP 変換 際 逆変換 際 変換先
ー IP 正 く判別 必要 あ
iptables 送信元IP 送信元 ー 番号 記憶 返送 ッ 送信先
ー 番号 逆変換先 IP 決定
o 複数 ー 同 送信元 ー 番号 使 場合 SNAT処理 い 送信元 ー 番号 変換
o 大量 ー 同時 SNAT 利用 変換先 送信元 ー 番号 不足 SNAT 処理
く 場合 あ
SNAT対象 ー 個別 ー IP 割 当 使用 可能
ン ーネッ
192.168.100.10
192.168.100.1
192.168.100.11 192.168.100.12
ー IP
XX.XX.XX.XX
ー ネッ ワー 192.168.100.0/24
ー 用 Linux ー
送信元IP 送信元 ー 番号 送信元 ー 番号変換後
192.168.100.10 3021 3021
192.168.100.11 4008 4008
192.168.100.12 3021 9000
SNAT 記憶 ー 例
DNAT 仕組み
下図 DNAT 宛先IP 変換 例
o ン ーネッ IP YY.YY.YY.YY PC ー 用Linux ー
ー IP XX.XX.XX.XX ッ 送信
o ー 用Linux 宛先IP ー ネッ ワー ー IP
192.168.100.10 書 換え ッ 転送
o ー ネッ ワー ー 返送 ッ 送信元IP
XX.XX.XX.XX 逆変換 ン ーネッ PC 送 返
ン ーネッ
192.168.100.10 192.168.100.10
YY.YY.YY.YY
XX.XX.XX.XX YY.YY.YY.YY
XX.XX.XX.XX YY.YY.YY.YY
192.168.100.10 YY.YY.YY.YY
宛先IP 送信元IP
宛先IP 送信元IP
変換 逆変換
YY.YY.YY.YY
ー IP
XX.XX.XX.XX
ー ネッ ワー 192.168.100.0/24
ー 用 Linux ー
NAT 設定例 (1)
NAT 設定 -t nat ン nat ー 指定 SNAT/ ー
DNAT 使用 ーン 異
o SNAT/ ー POSTROUTING ーン 使用 ー 変換IP
ー NIC IP 自動的 使用
iptables -t nat -A POSTROUTING < ッ 条件> -j SNAT --to-source <変換IP >
iptables -t nat -A POSTROUTING < ッ 条件> -j MASQUERADE
DNAT PREROUTIGN ーン 使用
iptables -t nat -A PREROUTING < ッ 条件> -j DNAT --to-destination <変換IP >
SNAT/ ー 設定例
o 変換元 変換先 IP 1対1 指定 SNAT 変換 行い
o ー ネッ ワー 192.168.100.0/24 他 ネッ ワー 通信
ー 変換
ー 処理 変換先 IP 指定 ッ 送出 NIC IP 自動的
選択
# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 192.168.100.10 -j SNAT --to-source XX.XX.XX.10
# iptables -t nat -A POSTROUTING -s 192.168.100.11 -j SNAT --to-source XX.XX.XX.11
# iptables -t nat -A POSTROUTING -s 192.168.100.12 -j SNAT --to-source XX.XX.XX.12
NAT 設定例 (2)
DNAT 設定例
o 前 ー SNAT 変換表 同 変換 DNAT 行い
SNAT け 場合 ー ネッ ワー ー ン ーネッ 接続 ン ー
ネッ ー ネッ ワー ー 接続 前 ー SNAT 合わ DNAT
設定 ー ネッ ワー ン ーネッ 双方向通信 可能
o ン ーネッ ー IP XX.XX.XX.XX HTTP
ー ネッ ワー ー 192.168.100.10 転送 応答 返
宛先 ー TCP80 番 ッ け 選択 192.168.100.10 Web ー 転送 い
ン ーネッ
192.168.100.10 192.168.100.1
Web ー http://XX.XX.XX.XX
HTTP 転送
ー IP
XX.XX.XX.XX
ー ネッ ワー 192.168.100.0/24
ー 用 Linux ー
# iptables -t nat -A PREROUTING -d XX.XX.XX.XX -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10
# iptables -t nat -A PREROUTING -d XX.XX.XX.10 -j DNAT --to-destination 192.168.100.10
# iptables -t nat -A PREROUTING -d XX.XX.XX.11 -j DNAT --to-destination 192.168.100.11
# iptables -t nat -A PREROUTING -d XX.XX.XX.12 -j DNAT --to-destination 192.168.100.12
ネッ ワー 基礎
ネッ ワー ネー ペー
Linux 名前空間
Linux OS 内部 様々 名前 識別子 持 い 命名や採番 OS内
一意 あ 求 多くあ
o あ /hoge/foo/bar
o あ PID=xxx
o 他 多数
名前 使え 空間 分離 重複 命名や採番 行え う ネー
ー 呼 機能
# ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# chroot /usr
# ls / bin etc games include lib lib64 libexec local sbin share src tmp
chroot 対 分離
chroot 実行 指定
/ 見え う 以
降 実行
# df -h
フ イ シ サイ 使用 残り 使用% ウン 位置
/dev/vda1 10G 977M 9.1G 10% /
〜省略〜
# unshare --mount /bin/bash
# mkdir /mnt/tmpfs
# mount -t tmpfs tmpfs /mnt/tmpfs
# df -h
フ イ シ サイ 使用 残り 使用% ウン 位置
/dev/vda1 10G 977M 9.1G 10% /
〜省略〜
tmpfs 497M 0 497M 0% /mnt/tmpfs
ン ン 分離
同 ン
実行実行結果
異 い 別 起動 ン ン 確認
上記 /mnt/tmpfs 確認 い
ネッ ワー ネー ペー
ネッ ワー ネー ー 名 通 ネッ ワー 関 機能 名前空間 分離
名前空間 分離 ネッ ワー 設定 行う 1 OS 上 ナ矛盾 設定ナやナ重複 設
定ナ 行う 可能
o ip netns ン 使 ネッ ワー ネー ー 管理
下記 例 1 台 Linux ー ー上 同 IP 持 仮想 ー ー 起動 仮
想 ー ー 外部 通信 う 設定 概略図
o 例 192.168.1.254 対 ー 重複 ネッ ワー ネー ー 隔離
設定 可能
1台 Linux ー ー上 重複 IP 管理 概略図 実際 う少 複雑
仮想 ン1 仮想 ン2
eth eth
192.168.1.1 192.168.1.1
tap tap
br br
192.168.1.254 192.168.1.254
eth0
br
tap tap
tap tap
172.16.1.10 172.16.1.20
ネー ー ネー ー 2
ー ン
やNAT設定 やNAT設定ー ン
tap, br ソ 的 NIC 同
ふ い 論理的 ネッ ワー
・ ン ー ー
名前空間 実装
機能 ーネ 上 実装 い 最終
的 ー clone(2) 実行
o 確認 う 名前空間 存在
確認
# yum install -y man-pages
# man 2 clone
CLONE(2) Linux Programmer's Manual CLONE(2)
NAME
clone, __clone2 - create a child process
SYNOPSIS
/* Prototype for the glibc wrapper function */
#include <sched.h>
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...
/* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
/* Prototype for the raw system call */
long clone(unsigned long flags, void *child_stack, void *ptid, void *ctid,
struct pt_regs *regs);
~~~~~~~~~~(省略)~~~~~~~~~~
ネッ ワー 基礎
OpenFlow と Open vSwitch
OpenFlow よ フ ー制御とOpen vSwitch
用語 覚え い く い
o OpenFlow
L1-4 各種 ッ 情報 用い ー ッ ッ 対 特
定 ン 行わ ー ネッ ワー 制御
従来 L2 MAC L3 IP 用い 転送制御 比
柔軟 動的 ネッ ワー 管理 可能
o Open vSwitch
OpenFlow ー ー ンソー ソ
Linux 従来使わ ッ 変わ 機能 備え
仮想化 ー ー等 利用 仮想ネッ ワー 実現 使わ
両者 OpenStack 内部 使わ 機能
演習 中 確認 い
o OpenFlow Open vSwitch 直接操作 演習 あ
興味 あ 方 各自 調査 く い
鍵ペ よ SSH認証
鍵ペ よ 認証 基礎
ネッ ワー 上 認証 ー 認証 ー 認証 あ
o ー 認証:接続 許可 ー 見 本物 ー あ 確認
o ー 認証:接続 ー 見 本物 ー あ 確認
認証 主 非対称鍵暗号 利用 方法 用い
o 非対称鍵暗号 暗号化 使う鍵 復号化 使う鍵 異
o 非対称鍵暗号 鍵 所有者 け 保管 秘密鍵 万人 配布 構わ い公開鍵
利用 秘密鍵 誤 他人 手 渡 い う 管理 必要 あ
下図 事前 配布 公開鍵 暗号化 ッ ー 送 う例
ッ ー 秘密鍵 持 自分 け 復号化 読
秘密鍵
公開鍵
A
公開鍵
僕 秘密鍵 い 誰
復号化 い 安心 A 暗号化 送 公開鍵
対称鍵暗号 ついて
暗号化 復号化 同 鍵 秘密鍵 使う対称鍵暗号 非対称鍵暗号
比較 次 う 特徴 あ
o 暗号化/復号化 計算量 少 く 高速 処理 可能
o 秘密鍵 共有 必要 あ 相手側 鍵 情報 い 仕組
必要
SSH接続 ー 認証/ ー 認証 非対称鍵暗号 用い
通信内容 暗号化 対称鍵暗号 使用
o 非対称鍵 認証 成功 後 通信 暗号化 対称鍵 ッ
ン鍵 生成 利用 SSH 接続 終了 ッ ン鍵 破棄
Kerberos認証 Windows AD認証 対称鍵暗号 使用
o 秘密鍵 集中管理 専用 認証局 用い ー ー
鍵 共有 く安全 認証 行い
o 歴史的 非対称鍵暗号化 研究 進 い 時代 開発 技術
ネッ ワー 的 閉 環境 認証方式 現在 使用 い
鍵ペ よ SSH ー 認証 仕組み
公開鍵認証 SSH接続 際 次 流 ー 認証 行わ
o SSH 接続 ー 鍵 事前 生成 公開鍵 接続先 ー 登録
o SSH 接続 受け付け ー SSH ー ン 乱数 発生 ー 公開鍵
暗号化 ン SSH ン 送信
o ン 対応 秘密鍵 復号化 ッ 値 返答
o ー 元 乱数 ッ 値 計算 ン 返答 一致
確認
ー 秘密鍵
復号化
乱数 乱数
暗号化
ッ 値
ッ 値計算
SSH ン
SSH ー ン ッ 値
ッ 値計算
比較
ー 公開鍵
ー 公開鍵
ー A 鍵 生成
authorized_keys 保存
事前 登録
鍵ペ よ SSH ー 認証 仕組み
SSH接続 際 ー 見 接続先 ー 本物 あ 確
認 ー 認証 行わ
o ン ー ー 証明書 公開鍵 受け取 保存
o 同 ー 以前 異 公開鍵 受け取 場合 処理 中断
o ン 乱数 ー 公開鍵 暗号化 ー 送 ー 対応
秘密鍵 復号化 ッ 値 返送
o ン 元 乱数 ッ 値 計算 ー 返答 一致
確認
ー 公開鍵
暗号化
乱数 乱数
復号化
ッ 値
ッ 値計算
SSH ン
SSH ー ン ッ 値
ッ 値計算
比較
known_hosts 保存
ー 秘密鍵
ー 証明書
ー 公開鍵
SSH 公開鍵認証 設定手順
次 SSH ン 上 ー 鍵 作成 ー server01 ー
user01 ン 公開鍵登録 行う例
o ssh-keygen ン 鍵 作成 ン ~/.ssh/id_rsa 秘密鍵
~/.ssh/id_rsa.pub 公開鍵 保存
-N ン 秘密鍵 使用 際 入力 ー 指定 秘密鍵 盗難 あ 場
合 安全対策 ッ 処理 自動接続 行う場合 ー
鍵 必要
o ssh-copy-id ン 接続先 ー ~/.ssh/authorized_keys 公開鍵 登録
同時 接続先 ー ー 証明書 ー 公開鍵 ン ー
ン 側 ~/.ssh/known_hosts 登録
1 行 1 公開鍵 記載 キ キ 編集可能
server01 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnakSHxbAkQ0oDML1aYNyKS/2aqIkVDSKfpr+KKR/VoICon9HlX 0TS2oks1oqt/VYt8EFsRjyQgkXjd+hoU71rea+9Wvbya5/54nQeqtyqnlNKFkNMG6r4ewrpjOv1DccYLF5bFouXig1SuYM5 168QiSW7pjBDFNRKKBMGa3koGpaX1PCBybUwH6aCZe3MYF4BR9zYzwePI3/d6w0Y+PX/3TWEadsdXdncrbLguVqyVbD5QJ2 ZQIHV9d8zO1IxjjeSL15/0Jgm+VtUkt5PntZ9UAm/RDXe8lHmd6S05ieTqfEUpqiiblSwg08HnpgCDrjn/74pi/XJw7mD3w AaYR3xQ==
10.7.7.55 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3K0ppAgND9dVJxQmvLUCaSBblwSDr7xHa4ePuUtdBVXRdjIiY o9EVNEv0oQDfzrQICJH6HKwf06etJogYiNBc4UOv4OWLEQqoXES56BceD+Sx3uenel7N8T1bjIQfW4gpH1nwC5BHyaR71dM Bpr9nfbhp2NlXZS6Ar9Sd8PiXw/3u6jPa0UiwFB48smLpKxWxqQotWsvWSiUtGPEQBz8FoiDKY2ENECeW8i1LBKJA44rxyB VD9JTFB4WwZTbvyO9dCCpF6tOVT9vptFTVALm5m2cpKRYg2AU8gRAZo3tmP1QaFZhlSVaJSYoaVj8X+bPJ4bA462B83PHdm XrDh/tkw==
~/.ssh/known_hosts 例
# ssh-keygen -N ""
# ssh-copy-id user01@server01
SSH 公開鍵認証を使用す 際 注意点
新 い ー 初 接続 際 ー 証明書 受け入 確認 ッ ー 表示
場合 あ
以前 接続 あ ー 前回 異 ー 証明書 ー 公開鍵 受
け取 場合 偽者 ー 可能性 あ ン 接続 拒否
o 何 理由 公開鍵 変更 わ い 場合 ~/.ssh/known_hosts
該当 ン 削除 再度 SSH接続
# ssh root@server01
The authenticity of host 'server01 (XXX.XXX.XXX.XXX)' can't be established. RSA key fingerprint is 7c:e6:a3:78:a6:54:a8:4b:f2:87:0b:d5:5d:66:9c:d9. Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server01' (RSA) to the list of known hosts.
新 い ー 証明書 受け入 確認 ッ ー
# ssh root@server01
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is e3:d4:87:e2:5b:34:21:8b:7b:40:7a:41:93:91:06:d0.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:1
RSA host key for server01 has changed and you have requested strict checking. Host key verification failed.