LINUX.ORG.RU
ФорумAdmin

netns

 , ,


0

2

На физическом хосту enp2s0 создано два сабинтерфейса enp2s0.100 и enp2s0.200, которые были привязаны к сетевым пространствам NS1 и NS2, симулирующим отдельные компьютеры. Также к физическому хосту подключен коммутатор. На сабинтерфейсе первого пространства установлен IP-адрес: 10.0.0.1/30, второго - 10.0.0.2/30. Задача состоит в том, чтобы успешно пропинговать адрес 10.0.0.2 с 10.0.0.1, и наоборот, чтобы путь трафика при этом проходил через коммутатор. На данный момент проблема состоит в том, что трафик успешно добирается до коммутатора, но так как трафик разных vlan, то ARP не может обозначить дальнейший канальный путь для трафика. Какие манипуляции нужно провести с настройками коммутатора или физическим хостом, чтобы выполнить задачу? Маршрутизатор в данной схеме не предусмотрен, но можно пользоваться статикой

Не совсем понимаю что ты хочешь добиться этой схемой но:

Маршрутизатор в данной схеме не предусмотрен

сведет все твои услилия на нет, кто-то должен перебрасывать (маршрутизировать) трафик из одного l2 пространства (vlan) в другое

Какие манипуляции нужно провести с настройками коммутатора

Трансляция vlan (смена номера метки), но ты лучше опиши изначальную задачу, мы тебя в правильном направлении подтолкнем

Kolins ★★★
()
Ответ на: комментарий от Kolins

Описываю задачу максимально детально: Есть первое сетевое пространство ns1 с виртуальным vlan интерфейсом enp2s0.100 и ip-адресом этого интерфейса - 10.0.0.1/30. Также есть второе сетевое пространство ns2: enp2s0.200 : 10.0.0.2/30. Сабинтерфейсы находятся внутри сетевых пространств, но созданы на физическом хосту enp2s0, который напрямую подключен к коммутатору, через один линк fa1/0/1. Нужно получить успешный пинг, который обязан пройти маршрут ns1 - switch - ns2 и наоборот. Любой пакет, с нынешними настройками, успешно добирается до коммутатора, но не может отправиться в нужное сетевое пространство.

ARP-запрос, приходящий с ns1/ns2 на коммутатор, как я понимаю, не может добраться до искомого сетевого пространства из-за того что он, во-первых, не может вернуться в тот же порт enp2s0, с которого он пришел, и, во-вторых, не может определить mac-адрес назначения, так как искомый хост в другом vlan.

Маршрутизацию между vlan не получается собрать, так как на виртуальные порты vlan на коммутаторе просто-напросто не остается свободных ip-адресов из подсети 10.0.0.0/30, а оба единственных адреса уже привязаны к сетевым пространствам.

Имеющиеся настройки:

ip a: aleksandr@aleksandr-xbuntu:~$ ip a

2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 94:de:80:53:83:bb brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 scope global enp2s0 valid_lft forever preferred_lft forever inet6 fe80::96de:80ff:fe53:83bb/64 scope link valid_lft forever preferred_lft forever

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns1 ip a

4: enp2s0.100@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 94:de:80:53:83:bc brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.0.0.1/30 scope global enp2s0.100 valid_lft forever preferred_lft forever inet6 fe80::96de:80ff:fe53:83bb/64 scope link valid_lft forever preferred_lft forever

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns2 ip a

5: enp2s0.200@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 94:de:80:53:83:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.0.0.2/30 scope global enp2s0.200 valid_lft forever preferred_lft forever inet6 fe80::96de:80ff:fe53:83bb/64 scope link valid_lft forever preferred_lft forever

ip route:

aleksandr@aleksandr-xbuntu:~$ ip route

10.0.0.0/24 dev enp2s0 proto kernel scope link src 10.0.0.4

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns1 ip route

10.0.0.0/30 dev enp2s0.100 proto kernel scope link src 10.0.0.1

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns2 ip route

10.0.0.0/30 dev enp2s0.200 proto kernel scope link src 10.0.0.1

ozyruum
() автор топика
Ответ на: комментарий от ozyruum

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns2 ip a

5: enp2s0.200@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 94:de:80:53:83:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.0.0.2/30 scope global enp2s0.200 valid_lft forever preferred_lft forever inet6 fe80::96de:80ff:fe53:83bb/64 scope link valid_lft forever preferred_lft forever

...

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns2 ip route

10.0.0.0/30 dev enp2s0.200 proto kernel scope link src 10.0.0.1

кто-то кого-то обманывает

vel ★★★★★
()
Ответ на: комментарий от ozyruum

Нужно получить успешный пинг, который обязан пройти маршрут ns1 - switch - ns2 и наоборот.

практический смысл в этом какой?

Любой пакет, с нынешними настройками, успешно добирается до коммутатора, но не может отправиться в нужное сетевое пространство.

Если fa1/0/1 у тебя тегированный то ничего удивительного, внутри два «виртуальных» кооммутатора и фреймы из одного в другой попасть не могут.

Маршрутизацию между vlan не получается собрать, так как на виртуальные порты vlan на коммутаторе просто-напросто не остается свободных ip-адресов из подсети 10.0.0.0/30, а оба единственных адреса уже привязаны к сетевым пространствам.

Ну используй 10.0.0.0/30 для vlan100 и 10.0.0.4/30 для vlan200 и маршрутизируй трафик между этими сетями

Хочешь гонять фреймы между vlan - трансляция vlan на коммутаторе, поддерживается ли она и как настраивается надо смотреть по конкретной модели устрйоства. Но я так и не понял зачем ты это делаешь.

Kolins ★★★
()
Ответ на: комментарий от Kolins

Наставник дал конкретное задание и не позволяет никакого самовольства с дано. Уже пытался настроить маршрутизацию между vlan, но мне явно дали понять, что можно обойтись без нее, т.к. «это типичное задание, которое все успешно выполняют». По поводу трансляции vlan - пробовал разные режимы работы порта, но ни один не позволяет пробросить тегированный пинг обратно.

console(config-if)#switchport mode

general - generic port mode

access - vlan unaware port

trunk - vlan aware port

promiscuous - private VLAN promiscuous port

host - private VLAN host port

customer - customer equipment port

ozyruum
() автор топика
Ответ на: комментарий от ozyruum

У тебя 2 vlan-а внутри одной подсети (10.0.0.0/30). Чтобы такое работало нужен мост между ними.

Ну и то, что 10.0.0.0/30 находится в 10.0.0.0/24 тоже создает некоторые проблемы.

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

Изначально подходил к решению задачи с созданием моста, который эмулирует виртуальный коммутатор в сетевых пространствах, но мне снова дали понять, что нужно обойтись без него :)

ozyruum
() автор топика
Ответ на: комментарий от ozyruum

Нет, не подойдёт. Не будет прохождение через коммутатор.

Прогнать один и тот же пакет через один и тот же порт коммутатора - достаточно непростая задача.

Возможно на том коммутаторе есть какие-то хитрые фичи.

vel ★★★★★
()
Ответ на: комментарий от vel

Насколько я смог выяснить, вся загвоздка заточена на режиме порта коммутатора, но какие конкретно манипуляции нужно провести - я не знаю. Могу отписаться в топике, как задача будет решена, если кому-то будет интересно.

ozyruum
() автор топика
Ответ на: комментарий от ozyruum

Ну допустим так (хотя selective qnq в самом своем названии говорит что оно для другого, но vlan mapping на этой модели нет), меняем 200 метку на 100

conf
int fa1/0/1
selective-qinq list ingress override_vlan 100 ingress_vlan 200

Kolins ★★★
()
Ответ на: комментарий от Kolins

Манипуляция с тегам у всех производителей сделана посвоему.

Кто-то в q-in-q это пихает, кто-то делает отдельно в виде vlan_translation.

После этого правила нужно запустить tcpdump на хосте, из ns1 сделать пинг в ns2. Если увидишь пакет в 200-ом влане - значит возможно это правильный путь.

А второе правило можно на интерфейс повесить?

selective-qinq list ingress override_vlan 200 ingress_vlan 100

vel ★★★★★
()
Ответ на: комментарий от vel

Добавил команды для замены тегов с 200 на 100, с 100 на 200, но в захвате трафика пакеты все равно остаются с родными метками vlan (см. скрин по ссылке - https://imgur.com/a/jmls3Gz). ARP-запрос по-прежнему не может получить mac-адрес хоста назначения. Не могу понять почему, потому что не может отправиться обратно в тот же порт или потому что не может добраться до хоста в другом vlan? Либо и то, и другое? К слову, mac-адреса на сабинтерфейсах я поднял на единичный порядок, так что проблемы в их равенстве быть не должно.

ozyruum
() автор топика
Ответ на: комментарий от ozyruum

Захваченный пакет исходящий, а входящего нет. Значит что-то не так.

Начать нужно было с 1 правила.

Второе, более важное - это тип порта на коммутаторе. Порт должен иметь возможность работы с тегированными пакетами. У разных производителей это называется разными словами.

Когда ты пингуешь с ns1 ns2 нужно посмотреть на коммутаторе мас-адреса порта к которому подключен хост. Либо смотреть мас-адреса vlan-ов 100 и 200.

Т.к. используется selective-qinq значит нужно убедиться, что q-in-q включен.

vel ★★★★★
()
Ответ на: комментарий от vel

«Начать нужно было с 1 правила.» Оставил только одно правило - ничего не изменилось.

«Второе, более важное - это тип порта на коммутаторе. Порт должен иметь возможность работы с тегированными пакетами.» Порты настроены в режиме trunk на работу с 100,200 тегами. До этого стоял general 100,200 tagged, но сути это не поменяло

«Когда ты пингуешь с ns1 ns2 нужно посмотреть на коммутаторе мас-адреса порта к которому подключен хост.»

Vlan Mac Address Port Type

1 94:de:80:53:83:bb fa1/0/1 dynamic
1 a8:f9:4b:a5:d7:80 0 self
100 94:de:80:53:83:bc fa1/0/1 dynamic
200 94:de:80:53:83:bd fa1/0/1 dynamic

Общие настройки коммутатора:

vlan database vlan 100,200

exit !

username admin password encrypted f0578f1e7174b1a41c4ea8c6e17f7a8a3b88c92a privilege 15 !

interface fastethernet 1/0/1

switchport mode trunk

switchport trunk allowed vlan add 100,200

selective-qinq list ingress override_vlan 200 ingress_vlan 100

exit !

interface vlan 1 no ip address dhcp

!

interface vlan 100
name vlan100

!

interface vlan 200

name vlan200

ozyruum
() автор топика
Ответ на: комментарий от vel

aleksandr@aleksandr-xbuntu:~$ sudo tcpdump -i enp2s0

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns1 ping 10.0.0.2

17:11:55.667721 ARP, Request who-has aleksandr-xbuntu tell _gateway, length 28

17:11:56.691757 ARP, Request who-has aleksandr-xbuntu tell _gateway, length 28

Такой вывод через tcpdump. Возможно, не разбираюсь, но как посмотреть именно входящие? До этого пользовался аккурат wireshark и только

ozyruum
() автор топика
Ответ на: комментарий от vel

aleksandr@aleksandr-xbuntu:~$ sudo tcpdump -nei enp2s0 -Q inout

aleksandr@aleksandr-xbuntu:~$ sudo ip netns exec ns1 ping 10.0.0.2

13:07:35.985189 94:de:80:53:83:bc > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 100, p 0, ethertype ARP (0x0806), Request who-has 10.0.0.2 tell 10.0.0.1, length 28

после смены метки тега на коммутаторе поменялась таблица mac-адресов, переопределив оба mac-адреса в один vlan, но пинг почему-то так и не доходит:

console#show mac address-table

Vlan Mac Address Port Type

1 a8:f9:4b:a5:d7:80 0 self

200 94:de:80:53:83:bc fa1/0/1 dynamic

200 94:de:80:53:83:bd fa1/0/1 dynamic

ozyruum
() автор топика
Ответ на: комментарий от ozyruum

Тогда я не представляю как решить данную задачу.

Нормальный коммутатор не отправляет пакет в порт из которого этот пакет пришел.

Интересно, как такая задача решается.

Есть конечно port mirroring, но я сомневаюсь, что это поможет.

vel ★★★★★
()
Ответ на: комментарий от vel

Куратор, который выдал это задание ушел в отпуск, так и не объяснив решение. Новый куратор упростил задание до 5 минут решения - добавил маршрутизатор и сделал на сетевых пространствах разные IP-подсети. Я уже на упорстве решал на старых условиях, но, видимо, не судьба. Как предыдущий вернется из отпуска - попробую узнать решение и отпишусь.

ozyruum
() автор топика