2013年12月23日月曜日

CentOS6 で Linux Network Namespace を使う

Network Namespace は 1 つの Linux ホストの中に仮想的なネットワーク環境を複数作れる機能です。これを使うと、ネットワークの実験を VM などリソースをたくさん消費する手段を使わずにできるので便利です。

Network Namespace は最近新しめの Linux Kernel を採用している Ubuntu などではそのままで利用できますが、RHEL6/CentOS6 ではまだ標準では利用できません。 RedHat が中心となって開発している OpenStack ディストリビューション RDO のパッケージを使うことで、簡単に CentOS6 環境でも Network Namespace が利用できるので、紹介します。

RDO が RHEL6/CentOS6 向けに Network Namespace に対応したパッケージを用意しているのは、OpenStack Neutron では Reference Implementation は Network Namespace の機能が利用されており、RHEL6/CentOS6 環境で OpenStack を動かせるようにするためです。

Network Namespace (netns) を動かすためには、netns に対応した Linux Kernel と netns に対応した iproute パッケージ (ip コマンド) が必要です。
CentOS6.5 とそれ以前では、カーネルの対応状況が異なりますので、分けて説明します。

CentOS 6.5 (以降)

CentOS 6.5 で提供されるカーネル自身は netns に対応していますが、標準で提供されている iproute は netns に対応していません (ip netns というサブコマンドがありません)。

RDO の yum レポジトリから iproute パッケージをインストールします。
  • RDO の yum レポジトリを追加してからインストールする方法
  • RDO で提供される iproute RPM パッケージを直接指定する
の2つの方法があります。今現在は後者の方が楽だと思いますが、パッケージバージョンの変更には前者の方が強いでしょう。
RDO の yum レポジトリを追加してからインストールする方法
rdo-release.rpm をインストールすると、RDO 関連の yum repository 定義が /etc/yum.repos.d 以下に登録されます。その後、yum install で iproute を指定してインストールします。
# yum install http://rdo.fedorapeople.org/rdo-release.rpm
# yum install iproute
インストール後に期待通りのバージョンがインストールされているか確認します。あわせて、netns がきちんと動作するか確認しておきます。
# rpm -qa | grep iproute
iproute-2.6.32-130.el6ost.netns.2.x86_64
# ip netns
# ip netns add testns1
# ip netns
testns1
# ip netns delete testns1
RDO で提供される iproute RPM パッケージを直接指定する
# yum install http://repos.fedorapeople.org/repos/openstack/openstack-havana/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
パッケージは以下の URL にありますので、もしパッケージのバージョン番号が変わっていた場合はチェックしてみてください。古いものがなくなることはあまりありませんが。
http://repos.fedorapeople.org/repos/openstack/openstack-havana/epel-6/

CentOS 6.4 以前

CentOS 6.4 以前では、カーネルも network namespace に対応していません。そのため、カーネルと iproute パッケージの両方を新しくする必要があります。
http://repos.fedorapeople.org/repos/openstack/openstack-havana/epel-6/ にパッケージがありますので、kernel と iproute を探してインストールします。
  • kernel-2.6.32-358.123.2.openstack.el6.x86_64.rpm, kernel-firmware-2.6.32-358.123.2.openstack.el6.noarch.rpm
  • iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
個別にインストールするよりは、上記の CentOS6.5 の説明の「RDO の yum レポジトリを追加してからインストールする方法」にあるように yum repository を追加しておいた方が楽だと思います。

では、Network Namespace を使って、お手軽にネットワーク実験をお楽しみください。