Linux

Linuxのnamespaceでネットワークを区切って遊ぶ

Linuxのnamaspace(名前空間)で遊んでみます。

Dockerとかコンテナを実現する技術で使われるアレですね。

お遊び内容

まず、下図のネットワーク構成を作ります。

f:id:segmentation-fault:20180121153248p:plain

・eth1,eth2は内部ネットワーク
・vlan100,vlan200はVLANタグ付きのインタフェース
・veth1, veth2はnamespace間をつなぐインタフェース
・br1,br2はブリッジ

VLAN単位でネットワークを区切って通信ができるのか確認してみます。
ルーター、L3スイッチのVRFみたいなものですね。

vlan100,vlan200はネットワークが違うのでIPアドレスが同じでも各々で通信が可能なはずです。

各種設定

まず、VM1,VM2を作成します。(ここではともにCentOS 7です)

内部ネットワークのインタフェースはプロミスキャスモードをすべて許可にしてから起動します。
(許可しないとnamespace側のMACアドレスが宛先MACになっているフレームを破棄してしまうため)

f:id:segmentation-fault:20180121154012p:plain

以下、各VMの設定です。

◆VM1

内部ネットワークのインタフェース名を構成図のeth1に合わせます。

続いてnamespace, 各インタフェースを作成します。

namespaceはip netns add 作ります。
namespace上でコマンドを実行する場合はip netns exec "namespace" "実行したいcommand" となります。

namespaceと各インタフェースが作成されていることを確認します。

◆VM2

VM2もVM1と同じように設定します。

疎通確認

vlan200の通信確認

f:id:segmentation-fault:20180121154730p:plain

vlan100の通信確認

f:id:segmentation-fault:20180121154753p:plain

期待通り通信ができることを確認できました。

参考

Technology: VRF & Linux Network Name Space

Linux Network Namespace で遊んでみる | CUBE SUGAR STORAGE

namespace を使ってみる - いますぐ実践! Linuxシステム管理 / Vol.260