Jump to content

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


Recommended Posts

Posted (edited)

1. Создаём netns:

ip netns add switch
ip netns add host1
ip netns add host2
ip netns add host3
ip netns add host4

 

2. Создаём виртуальные интерфейсы и делаем базовою настройку

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

3. Инициализируем дисциплины для входящего трафика на всех интерфейсах

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

4. Делаем инкапсуляцию в 8021q и перенаправляем на головной интерфейс коммутатора

tc filter add dev ns-host1 parent ffff: matchall action vlan push 1 pipe action mirred egress redirect dev ns-switch.0
tc filter add dev ns-host2 parent ffff: matchall action vlan push 2 pipe action mirred egress redirect dev ns-switch.0
tc filter add dev ns-host3 parent ffff: matchall action vlan push 3 pipe action mirred egress redirect dev ns-switch.0
tc filter add dev ns-host4 parent ffff: matchall action vlan push 4 pipe action mirred egress redirect dev ns-switch.0

5. Прописываем путь для обратных пакетов

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

6. Создаём 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 роутера и нет реального оборудования.
 

Edited by ne-vlezay80
Posted

netns использую давно для построения небольших виртуальных сетей. Вещь достаточно удобная.

Не являюсь экспертом во FreeBSD, и ничего не знаю о реализации netns там. Хотелось бы больше узнать.

Posted

http://netlab.linkpc.net/wiki/ru:software:freebsd:igmpproxy_on_netgraph

http://netlab.linkpc.net/wiki/ru:software:freebsd:lagg_on_netgraph

http://netlab.linkpc.net/wiki/ru:software:freebsd:ng_vlan

http://netlab.linkpc.net/wiki/ru:software:freebsd:ng_utp

В общем нетграф это набор кубиков, которые можно соединять между собой, настраивать и даже программировать.

Есть там и hub/swtch который тупо как свич работает, есть котрый как хаб; бпф программируется на матчинг по паттернам, есть возможность с помощью патч ноды менять содержимое пакетов, есть кубики для л2 и л3 интерфейсов в ядро ос, есть возможность цеплять к реальным интерфейсам, есть кубик для работы с вланами (я его переделал и заапстримил), и куча еще всего.

Свои тоже легко дописываются, пример с торрентами по ссылке выше.

 

Если нужны конкретные какието примеры - описывайте конфиги, как буду у компа попробую накидать, а пока у меня только планшетиг :))

Posted
3 часа назад, vop сказал:

Не являюсь экспертом во FreeBSD, и ничего не знаю о реализации netns там. Хотелось бы больше узнать.

Нет там нетнс как таковой.

Нетграф позволяет строить кастомные обработчики пакетов, при этом не обязательно чтобы они проходили весь сетевой стек, те можно мимо него делать.

Есть таблицы маршрузации, это когда у тебя больше одной таблицы маршрутизации с дефолтным шлюзом, и ты можешь приложению или отдельному сокету эту особую не дефолтную таблицу маршрутизации привязать.

Есть внет - уже не помню для чего, есть джейлы где по сути почти виртуалка работает...

 

Я редко даже до нетграфа дохожу в личных целях, routing tables, vnet, jail ваще не юзал.

 

Еще есть MAC фреймворк, но это про безопасность, он клеит везде метки и чекает их, и разрешения тоже, можно оч гибко разрешать/запрещать что угодно.

Я накорябал модуль чтобы юзеру разрешать всякие равсокеты - нужно для некоторых игрушек под вайном.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.