- Создаём netns:
ip netns add switch
ip netns add host1
ip netns add host2
ip netns add host3
ip netns add host4
- Создаём виртуальные интерфейсы и делаем базовою настройку
ip link add dev ns-switch.0 up mtu 16384 type veth peer name eth0 mtu 16384 netns switch
ip link add dev ns-host1.0 up mtu 16384 type veth peer name eth0 mtu 16384 netns host1
ip link add dev ns-host2.0 up mtu 16384 type veth peer name eth0 mtu 16384 netns host2
ip link add dev ns-host3.0 up mtu 16384 type veth peer name eth0 mtu 16384 netns host3
ip link add dev ns-host4.0 up mtu 16384 type veth peer name eth0 mtu 16384 netns host4
# Поднимаем внутренние интерфейсы
ip -n switch link set dev eth0 up
ip -n host1 link set dev eth0 up
ip -n host2 link set dev eth0 up
ip -n host3 link set dev eth0 up
ip -n host4 link set dev eth0 up
# Прописываем адреса
ip -n host1 addr add 192.168.1.1/24 dev eth0
ip -n host2 addr add 192.168.1.2/24 dev eth0
ip -n host3 addr add 192.168.1.3/24 dev eth0
ip -n host4 addr add 192.168.1.4/24 dev eth0
- Инициализируем дисциплины для входящего трафика на всех интерфейсах
tc qdisc add dev ns-switch.0 handle ffff: ingress
tc qdisc add dev ns-host1.0 handle ffff: ingress
tc qdisc add dev ns-host2.0 handle ffff: ingress
tc qdisc add dev ns-host3.0 handle ffff: ingress
tc qdisc add dev ns-host4.0 handle ffff: ingress
- Делаем инкапсуляцию в 8021q и перенаправляем на головной интерфейс коммутатора
tc filter add dev ns-host1.0 parent ffff: matchall action vlan push id 1 pipe action mirred egress redirect dev ns-switch.0
tc filter add dev ns-host2.0 parent ffff: matchall action vlan push id 2 pipe action mirred egress redirect dev ns-switch.0
tc filter add dev ns-host3.0 parent ffff: matchall action vlan push id 3 pipe action mirred egress redirect dev ns-switch.0
tc filter add dev ns-host4.0 parent ffff: matchall action vlan push id 4 pipe action mirred egress redirect dev ns-switch.0
- Прописываем путь для обратных пакетов
tc filter add dev ns-switch.0 parent ffff: prio 1 protocol 802.1q flower vlan_id 1 action vlan pop pipe action mirred egress redirect dev ns-host1.0
tc filter add dev ns-switch.0 parent ffff: prio 2 protocol 802.1q flower vlan_id 2 action vlan pop pipe action mirred egress redirect dev ns-host2.0
tc filter add dev ns-switch.0 parent ffff: prio 3 protocol 802.1q flower vlan_id 3 action vlan pop pipe action mirred egress redirect dev ns-host3.0
tc filter add dev ns-switch.0 parent ffff: prio 4 protocol 802.1q flower vlan_id 4 action vlan pop pipe action mirred egress redirect dev ns-host4.0
- Создаём VLAN’ы на коммутаторе и делаем с ними что хотим
ip netns exec switch bash
ip link add link eth0 name eth0.1 up type vlan id 1
ip link add link eth0 name eth0.2 up type vlan id 2
ip link add link eth0 name eth0.3 up type vlan id 3
ip link add link eth0 name eth0.4 up type vlan id 4
# Ну, например делаем из них мост
ip link add dev br0 up mtu 16384 type bridge
ip link set dev eth0.1 master br0
ip link set dev eth0.2 master br0
ip link set dev eth0.3 master br0
ip link set dev eth0.4 master br0
Это может быть полезно, например в виртуальных машинах или если хочется протестировать работу opensource роутера и нет реального оборудования.