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