はじめに
Linux の namespace機能を使ってルーティングを体験するメモ
初学者向け
Linux 1台でできるので、お手軽にルーティングの基礎を学べます
その他の namespace を利用した体験メモはこちら
環境準備
- Ubuntu22.04などのLinuxを1台準備します
- traceroute を利用します。コマンドがインストールされていないなら、インストールしてくだい
sudo apt install inetutils-traceroute
ルータ1つのパターン
- 2つのPCを別々のセグメント(10.11.12.0/24, 10.21.22.0/24)に分けます
- 2つのセグメント間にルータを入れます
- セグメントのデフォルトゲートウェイをルータにします
- 2つのPC間でルーターを経由してPingのやり取りができることを確認します
sudo ip --all netns delete
sudo ip netns add testns01
sudo ip netns add testns02
sudo ip netns add testgw01
sudo ip netns list
sudo ip link add testns01-veth0 type veth peer name testgw01-veth0
sudo ip link add testns02-veth0 type veth peer name testgw01-veth1
sudo ip link
sudo ip link set testns01-veth0 netns testns01
sudo ip link set testns02-veth0 netns testns02
sudo ip link set testgw01-veth0 netns testgw01
sudo ip link set testgw01-veth1 netns testgw01
sudo ip netns exec testns01 ip link
sudo ip netns exec testns02 ip link
sudo ip netns exec testgw01 ip link
sudo ip netns exec testns01 ip a add 10.11.12.1/24 dev testns01-veth0
sudo ip netns exec testns02 ip a add 10.21.22.1/24 dev testns02-veth0
sudo ip netns exec testgw01 ip a add 10.11.12.254/24 dev testgw01-veth0
sudo ip netns exec testgw01 ip a add 10.21.22.254/24 dev testgw01-veth1
sudo ip netns exec testns01 ip link set testns01-veth0 up
sudo ip netns exec testns02 ip link set testns02-veth0 up
sudo ip netns exec testgw01 ip link set testgw01-veth0 up
sudo ip netns exec testgw01 ip link set testgw01-veth1 up
sudo ip netns exec testns01 ip link set lo up
sudo ip netns exec testns02 ip link set lo up
sudo ip netns exec testgw01 ip link set lo up
sudo ip netns exec testns01 ping 10.11.12.254
sudo ip netns exec testns02 ping 10.21.22.254
sudo ip netns exec testgw01 ping 10.11.12.1
sudo ip netns exec testgw01 ping 10.21.22.1
sudo ip netns exec testns01 ip route add default via 10.11.12.254
sudo ip netns exec testns02 ip route add default via 10.21.22.254
sudo ip netns exec testns01 ip route show
sudo ip netns exec testns02 ip route show
sudo ip netns exec testgw01 sysctl net.ipv4.ip_forward=1
sudo ip netns exec testns01 ping 10.21.22.1
sudo ip netns exec testns02 ping 10.11.12.1
sudo ip netns exec testns01 traceroute 10.21.22.1
sudo ip netns exec testns02 traceroute 10.11.12.1
ルータ2つのパターン
- 2つのPCを別々のセグメント(10.11.12.0/24, 10.21.22.0/24)に分けます
- ルータ間を別のセグメント(10.31.32.0/24)で接続します
- 2つのセグメント間に2つのルータを入れます
- セグメントのデフォルトゲートウェイをルータにします
- 2つのPC間でルーターを経由してPingのやり取りができることを確認します
sudo ip --all netns delete
sudo ip netns add testns01
sudo ip netns add testns02
sudo ip netns add testgw01
sudo ip netns add testgw02
sudo ip netns list
sudo ip link add testns01-veth0 type veth peer name testgw01-veth0
sudo ip link add testns02-veth0 type veth peer name testgw02-veth0
sudo ip link add testgw01-veth1 type veth peer name testgw02-veth1
sudo ip link
sudo ip link set testns01-veth0 netns testns01
sudo ip link set testns02-veth0 netns testns02
sudo ip link set testgw01-veth0 netns testgw01
sudo ip link set testgw01-veth1 netns testgw01
sudo ip link set testgw02-veth0 netns testgw02
sudo ip link set testgw02-veth1 netns testgw02
sudo ip netns exec testns01 ip link
sudo ip netns exec testns02 ip link
sudo ip netns exec testgw01 ip link
sudo ip netns exec testgw02 ip link
sudo ip netns exec testns01 ip a add 10.11.12.1/24 dev testns01-veth0
sudo ip netns exec testns02 ip a add 10.21.22.1/24 dev testns02-veth0
sudo ip netns exec testgw01 ip a add 10.11.12.254/24 dev testgw01-veth0
sudo ip netns exec testgw01 ip a add 10.31.32.10/24 dev testgw01-veth1
sudo ip netns exec testgw02 ip a add 10.21.22.254/24 dev testgw02-veth0
sudo ip netns exec testgw02 ip a add 10.31.32.11/24 dev testgw02-veth1
sudo ip netns exec testns01 ip link set testns01-veth0 up
sudo ip netns exec testns02 ip link set testns02-veth0 up
sudo ip netns exec testgw01 ip link set testgw01-veth0 up
sudo ip netns exec testgw01 ip link set testgw01-veth1 up
sudo ip netns exec testgw02 ip link set testgw02-veth0 up
sudo ip netns exec testgw02 ip link set testgw02-veth1 up
sudo ip netns exec testns01 ip link set lo up
sudo ip netns exec testns02 ip link set lo up
sudo ip netns exec testgw01 ip link set lo up
sudo ip netns exec testgw02 ip link set lo up
sudo ip netns exec testns01 ping 10.11.12.254
sudo ip netns exec testns02 ping 10.21.22.254
sudo ip netns exec testgw01 ping 10.11.12.1
sudo ip netns exec testgw02 ping 10.21.22.1
sudo ip netns exec testgw01 ping 10.31.32.11
sudo ip netns exec testgw02 ping 10.31.32.10
sudo ip netns exec testns01 ip route add default via 10.11.12.254
sudo ip netns exec testns02 ip route add default via 10.21.22.254
sudo ip netns exec testgw01 ip route add 10.21.22.0/24 via 10.31.32.11
sudo ip netns exec testgw02 ip route add 10.11.12.0/24 via 10.31.32.10
sudo ip netns exec testns01 ip route show
sudo ip netns exec testns02 ip route show
sudo ip netns exec testgw01 ip route show
sudo ip netns exec testgw02 ip route show
sudo ip netns exec testgw01 sysctl net.ipv4.ip_forward=1
sudo ip netns exec testgw02 sysctl net.ipv4.ip_forward=1
sudo ip netns exec testns01 ping 10.21.22.1
sudo ip netns exec testns02 ping 10.11.12.1
sudo ip netns exec testns01 traceroute 10.21.22.1
sudo ip netns exec testns02 traceroute 10.11.12.1
さいごに
かんたんでしたね