1 はじめに
ネームスペースを使って、ホストーブリッジーホストの環境を構築してみます。
ip netnsコマンドの基本的な使い方は、以下を参照ください。
ip netnsコマンドの使い方(ネットワークの実験の幅が広がるなぁ~) - hana_shinのLinux技術ブログ
2 検証環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
3 構築する環境
ブリッジにホストが2台接続する環境を仮想マシンに構築してみます。
192.168.100.0/24 +--- host1 --+ +-- bridge --+ +--- host2 --+ | | | | | | | | | | | | | | | | | | | | | | | | | host1(p-h1) --- (p1-br) (p2-br) --- (p-h2) | | | .10 | | .20 | | | | | | | | | | | | | | | | | | | | +------------+ +------------+ +------------+
4 構築手順
4.1 ホストの作成
ホストを2つ作成します。
[root@server ~]# ip netns add host1 [root@server ~]# ip netns add host2
ネームスペースを確認します。ホストが2つ追加されたことがわかります。
[root@server ~]# ip netns list host2 host1
4.2 ブリッジの作成
仮想マシンに存在するブリッジを確認します。私の環境では、virbr0という名前のブリッジがありました。
[root@server ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254006d88ad yes virbr0-nic
bridgeという名前のブリッジを作成します。
[root@server ~]# brctl addbr bridge
ブリッジの一覧を表示します。bridgeが追加されたことがわかります。
[root@server ~]# brctl show bridge name bridge id STP enabled interfaces bridge 8000.000000000000 no virbr0 8000.5254006d88ad yes virbr0-nic
4.3 ポートの作成
- ホストポートの作成
ホストに接続するポートを作成します。
[root@server ~]# ip link add p-h1 type veth peer name p1-br [root@server ~]# ip link add p-h2 type veth peer name p2-br
作成したポートをホストに接続します。
[root@server ~]# ip link set p-h1 netns host1 [root@server ~]# ip link set p-h2 netns host2
- ブリッジポートの作成
bridgeに接続するブリッジポートを作成します。
[root@server ~]# brctl addif bridge p1-br [root@server ~]# brctl addif bridge p2-br
4.4 IPアドレスの設定
ホストポートにIPアドレスを設定します。
[root@server ~]# ip netns exec host1 ip addr add 192.168.100.10/24 dev p-h1 [root@server ~]# ip netns exec host2 ip addr add 192.168.100.20/24 dev p-h2
4.5 ポートのリンクアップ
- ホスト1のポートリンクアップ
[root@server ~]# ip netns exec host1 ip link set p-h1 up [root@server ~]# ip netns exec host1 ip link set lo up
- ホスト2のポートリンクアップ
[root@server ~]# ip netns exec host2 ip link set p-h2 up [root@server ~]# ip netns exec host2 ip link set lo up
- ブリッジポートのリンクアップ
[root@server ~]# ip link set p1-br up [root@server ~]# ip link set p2-br up [root@server ~]# ip link set bridge up
5 設定内容の確認
ホスト1のIPアドレスを確認します。
[root@server ~]# ip netns exec host1 ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 7: p-h1@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 12:26:5d:9f:e3:e1 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.100.10/24 scope global p-h1 valid_lft forever preferred_lft forever inet6 fe80::1026:5dff:fe9f:e3e1/64 scope link valid_lft forever preferred_lft forever
ホスト2のIPアドレスを確認します。
[root@server ~]# ip netns exec host2 ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 9: p-h2@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 5e:c9:22:99:7b:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.100.20/24 scope global p-h2 valid_lft forever preferred_lft forever inet6 fe80::5cc9:22ff:fe99:7b07/64 scope link valid_lft forever preferred_lft forever
ブリッジのポートを確認します。
[root@server ~]# brctl show bridge bridge name bridge id STP enabled interfaces bridge 8000.7688e9382eea no p1-br p2-br
6 動作確認
host1に入ります。
[root@server ~]# ip netns exec host1 bash
host1からhost2に対してpingを実行してみます。host2から応答があることがわかります。
[root@server ~]# ping -c 1 192.168.100.20 PING 192.168.100.20 (192.168.100.20) 56(84) bytes of data. 64 bytes from 192.168.100.20: icmp_seq=1 ttl=64 time=0.090 ms --- 192.168.100.20 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.090/0.090/0.090/0.000 ms
7 環境構築用シェルスクリプト
今まで説明した手順をシェルスクリプトに記述して、環境構築/削除の自動化をしてみたいと思います。
7.1 構築
環境を構築するスクリプトです。
[root@server ~]# cat build.sh #!/usr/bin/bash ip netns add host1 ip netns add host2 brctl addbr bridge ip link add p-h1 type veth peer name p1-br ip link add p-h2 type veth peer name p2-br ip link set p-h1 netns host1 ip link set p-h2 netns host2 brctl addif bridge p1-br brctl addif bridge p2-br ip netns exec host1 ip addr add 192.168.100.10/24 dev p-h1 ip netns exec host2 ip addr add 192.168.100.20/24 dev p-h2 ip netns exec host1 ip link set p-h1 up ip netns exec host1 ip link set lo up ip netns exec host2 ip link set p-h2 up ip netns exec host2 ip link set lo up ip link set p1-br up ip link set p2-br up ip link set bridge up
シェルを実行して環境を構築する。
[root@server ~]# ./build.sh
host1からhost2に対してpingを実行します。host2から応答があることがわかります。
[root@server ~]# ip netns exec host1 ping -c 1 192.168.100.20 PING 192.168.100.20 (192.168.100.20) 56(84) bytes of data. 64 bytes from 192.168.100.20: icmp_seq=1 ttl=64 time=0.097 ms --- 192.168.100.20 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.097/0.097/0.097/0.000 ms
7.2 削除
環境を削除するスクリプトです。
[root@server ~]# cat del.sh #!/usr/bin/bash ip link set p1-br down ip link set p2-br down ip link set bridge down ip netns exec host1 ip link set p-h1 down ip netns exec host1 ip link set lo down ip netns exec host2 ip link set p-h2 down ip netns exec host2 ip link set lo down brctl delif bridge p1-br brctl delif bridge p2-br ip link delete p1-br ip link delete p2-br brctl delbr bridge ip netns delete host1 ip netns delete host2
シェルを実行して環境を削除する。
[root@server ~]# ./del.sh
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ