LINUX.ORG.RU
ФорумAdmin

Эмуляция типичного коммутатора

 , , ,


1

2
  1. Создаём netns:
ip netns add switch
ip netns add host1
ip netns add host2
ip netns add host3
ip netns add host4
  1. Создаём виртуальные интерфейсы и делаем базовою настройку
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
  1. Инициализируем дисциплины для входящего трафика на всех интерфейсах
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
  1. Делаем инкапсуляцию в 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
  1. Прописываем путь для обратных пакетов
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
  1. Создаём 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 роутера и нет реального оборудования.

★★★★★

А еще можно поставить eve-ng и не лохматить бабушку...

P.S. Сам использую network namespace в том числе и в тестовой среде, но для более-менее сложных топологий можно натурально заколебаться это всё настраивать

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

P.S. Сам использую network namespace в том числе и в тестовой среде, но для более-менее сложных топологий можно натурально заколебаться это всё настраивать

+1

Но документация лишней не бывает.

Harliff ★★★★★ ()
Ответ на: комментарий от ne-vlezay

Не вижу в упор где в предоставленной тобой конфигурации openvswitch указан интерфейс eth11. И да, как уже подсказал анонимус выше, поддерджка q-in-q появилась в openvswitch в районе конца 2017 года, сомневаюсь что ты собирал там версию из мастера

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Кстати, ещё в Linux порты можно пробрасывать так:

ip link add dev testisp0 up mtu 1500 type gretap local <ip коробки или одноплатника> remote <ip роутера> ttl 1 key 1
echo 0 >/proc/sys/net/ipv6/conf/wan0/autoconf

tc qdisc add dev wan0 handle ffff: ingress
tc qdisc add dev testisp0 handle ffff: ingress

tc filter add dev testisp0 parent ffff: matchall action mirred egress redirect dev wan0
tc filter add dev wan0 parent ffff: matchall action mirred egress redirect dev testisp0

Далее на роутере поднимаем туннель до коммутатора аналогично, ставим на него mac, которые указан в договоре с провайдером и подключаемся к сети.

ne-vlezay ★★★★★ ()