らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

CentOS8 + Network Namespace + VLAN で検証環境を構築する

以前に CentOS8 + Network Namespace で「管理用ネットワーク」と「検証用ネットワーク」を分離するメモを記載しました。 あまり無いと思いますが、場合によっては更に「検証用ネットワーク側はひとつのインターフェイスを複数の VLAN で利用したい」というケースもあるかも知れません。 今回はそういった場合の設定方法をメモしておきます。

ゴール

以下の構成を作ります。

f:id:sig9:20200510022639p:plain

管理用インターフェイスの設定

管理用インターフェイスに固定アドレスを設定しておきます。

nmcli connection modify ens192 \
  ipv4.addresses 10.0.0.1/24 \
  ipv4.gateway 10.0.0.254 \
  ipv4.dns "1.1.1.1 1.0.0.1" \
  ipv4.method manual

検証用インターフェイスの設定 (複数 VLAN の設定)

Network Namespace + VLAN 設定用のスクリプトは以下の通りです。

#!/bin/bash

case $1 in
    "start")
        echo "Create namespace settings."
        # default
        mkdir -p /var/run/netns/
        ln -s /proc/1/ns/net /var/run/netns/default
        # netns10-30
        ip link add link ens224 name vlan10 type vlan id 10
        ip link add link ens224 name vlan20 type vlan id 20
        ip link add link ens224 name vlan30 type vlan id 30
        ip link set dev vlan10 up
        ip link set dev vlan20 up
        ip link set dev vlan30 up
        ip netns add 10
        ip netns add 20
        ip netns add 30
        ip link set vlan10 netns 10 up
        ip link set vlan20 netns 20 up
        ip link set vlan30 netns 30 up
        ip netns exec 10 ip address add 10.0.10.100/255.255.255.0 dev vlan10
        ip netns exec 20 ip address add 10.0.20.100/255.255.255.0 dev vlan20
        ip netns exec 30 ip address add 10.0.30.100/255.255.255.0 dev vlan30
        ip netns exec 10 ip route add 0.0.0.0/0 via 10.0.10.254 dev vlan10
        ip netns exec 20 ip route add 0.0.0.0/0 via 10.0.20.254 dev vlan20
        ip netns exec 30 ip route add 0.0.0.0/0 via 10.0.30.254 dev vlan30
        ip netns exec 10 /usr/sbin/sshd -f /etc/ssh/sshd_config -o "PidFile /var/run/sshd-10-vlan10.pid"
        ip netns exec 20 /usr/sbin/sshd -f /etc/ssh/sshd_config -o "PidFile /var/run/sshd-20-vlan20.pid"
        ip netns exec 30 /usr/sbin/sshd -f /etc/ssh/sshd_config -o "PidFile /var/run/sshd-30-vlan30.pid"
        ;;
    "stop")
        echo "Delete namespace settings."
        ip netns delete default
        ip netns delete 10
        ip netns delete 20
        ip netns delete 30
        kill -9 `cat /var/run/sshd-10-vlan10.pid`
        kill -9 `cat /var/run/sshd-20-vlan20.pid`
        kill -9 `cat /var/run/sshd-30-vlan30.pid`
        rm /var/run/sshd-10-vlan10.pid
        rm /var/run/sshd-20-vlan20.pid
        rm /var/run/sshd-30-vlan30.pid
        rm /var/run/netns/default
        ;;
    "status")
        echo "-----[ip netns list]"
        ip netns list
        echo "-----[ip address show]"
        echo "(default)"
        ip address show
        echo "(VLAN10)"
        ip netns exec 10 ip address show
        echo "(VLAN20)"
        ip netns exec 20 ip address show
        echo "(VLAN30)"
        ip netns exec 30 ip address show
        echo "-----[ip route show]"
        echo "(default)"
        ip route show
        echo "(VLAN10)"
        ip netns exec 10 ip route show
        echo "(VLAN20)"
        ip netns exec 20 ip route show
        echo "(VLAN30)"
        ip netns exec 30 ip route show
        echo "-----[ip neigh show]"
        echo "(default)"
        ip neigh show
        echo "(VLAN10)"
        ip netns exec 10 ip neigh show
        echo "(VLAN20)"
        ip netns exec 20 ip neigh show
        echo "(VLAN30)"
        ip netns exec 30 ip neigh show
esac

これを例えば以下のように実行します。

/usr/local/sbin/nsctrl start

参考