Jump to content
Калькуляторы

Одинаковые ip на vlan интерфейсах

Доброго времени суток уважаемые форумчане. Есть задача: имеется сервер, один интерфейс которого смотрит в три vlan`a,

в каждом vlan`e интерфейс должен иметь адрес 10.10.10.1 и при этом быть доступным со всех вланов. Во всех вланах есть хосты

с адресами 10.10.10.2-254 которые должны иметь связь с 10.10.10.1. Пробовал настраивать vrf-lite, то есть

на каждый интерфейс вешать отдельную таблицу маршрутизации, но при добавлении ip адресов на vlan интерфейсы в таблице main получается вот что:

 

10.10.10.0/24 dev eth0.1 proto kernel scope link src 10.10.10.1

10.10.10.0/24 dev eth0.2 proto kernel scope link src 10.10.10.1

10.10.10.0/24 dev eth0.3 proto kernel scope link src 10.10.10.1

10.10.10.0/24 dev eth0.4 proto kernel scope link src 10.10.10.1

 

При этом если пинговать узел 10.10.10.1 со второго влана, то при ответе узел видит что сеть 10.10.10.0/24 находится за интерфейсом

eth0.1, а дальше выясняет что мака узла которому нужно ответить на этом интерфейсе нет, соответственно ничего не работает.

 

Подскажите пожалуйста как это исправить?

 

Прилагаю список правил маршрутизации и содержание одной из кастомных таблиц, содержание других таблиц аналогично за исключением

названий интерфейсов.

 

root@hesk:~# ip rule sh

0: from all lookup local

10: from all iif eth0.1 lookup vlan1

20: from all iif eth0.2 lookup vlan2

30: from all iif eth0.3 lookup vlan3

40: from all iif eth0.4 lookup vlan4

32766: from all lookup main

32767: from all lookup default

 

 

root@hesk:~# ip ro sh table vlan2

unreachable default proto static

broadcast 10.10.10.0 dev eth0.2 proto kernel scope link

10.10.10.0/24 dev eth0.2 proto static scope link

local 10.10.10.1 dev eth0.2 proto kernel scope host

broadcast 10.10.10.255 dev eth0.2 proto kernel scope link

 

Заранее благодарю за помощь.

Share this post


Link to post
Share on other sites

Либо добавить вланы в мост и на мост вешать нужный адрес, но тогда нужно будет фильтровать.

 

Либо с помощью ARP объявить себя во всех нужных вланах, но детали реализации увы не подскажу.

Скорее всего нужно будет повешать нужный адрес на один влан интерфейс, а на остальные фейковые и проанонсить на них нужный ручками, либо с прокси арп что то покрутить.

Share this post


Link to post
Share on other sites

netns

 

Большое Вам спасибо за совет, воспользовался netns - часть задачи решена, узел доступен со всех вланов, для этого провел следующие действия:

 

ip netns add vlan1

ip link set dev eth0.1 netns vlan1

ip netns exec vlan1 ip a a 10.10.10.1/24 dev eth0.1

ip netns exec vlan1 ip link set dev eth0.1 up

 

ip netns add vlan2

ip link set dev eth0.2 netns vlan2

ip netns exec vlan2 ip a a 10.10.10.1/24 dev eth0.2

ip netns exec vlan2 ip link set dev eth0.2 up

 

ip netns add vlan3

ip link set dev eth0.3 netns vlan3

ip netns exec vlan3 ip a a 10.10.10.1/24 dev eth0.3

ip netns exec vlan3 ip link set dev eth0.3 up

 

ip netns add vlan4

ip link set dev eth0.4 netns vlan4

ip netns exec vlan4 ip a a 10.10.10.1/24 dev eth0.4

ip netns exec vlan4 ip link set dev eth0.4 up

 

На этом же сервере есть еще один физический интерфейс который смотрит в сеть 10.17.0.0/24, как сделать так чтобы эта сеть была доступна во всех контейнерах? Заранее благодарю за ответ.

Share this post


Link to post
Share on other sites

На этом же сервере есть еще один физический интерфейс который смотрит в сеть 10.17.0.0/24, как сделать так чтобы эта сеть была доступна во всех контейнерах?

Эм... создать veth пары, одним концом - в бридж с физ. ифейсом, вторым - в контейнер? Правда хз прокатит ли один и тот же адрес, или надо будет контейнерам разные назначать...

Share this post


Link to post
Share on other sites

На этом же сервере есть еще один физический интерфейс который смотрит в сеть 10.17.0.0/24, как сделать так чтобы эта сеть была доступна во всех контейнерах? Заранее благодарю за ответ.

Как было сказано выше, это можно сделать через veth. Несколько примеров я описал здесь

 

т.е. делаете veth-пары между netns и глобалом и в глобале коммутируете с нужным интерфейсом или маршрутизируете с нужной сетью

 

если вариант с коммутацией устраивает, то можно его реализовать проще - путём создания macvlan-интерфейсов и запихиванием их в нужные netns-ы. в ядре линукс была проблема на тему macvlan в netns, сейчас она исправлена в net-next, но не уверен, что оно слито с mainline. workaround - ifconfig ethX promisc (на интерфейсе, поверх которого будете плодить mac-vlan'ы)

 

для L3-варианта тоже есть красивое решение без veth, называется vznetdev, но оно живёт только в openvz-ветке ядра

Share this post


Link to post
Share on other sites

 

т.е. делаете veth-пары между netns и глобалом и в глобале коммутируете с нужным интерфейсом или маршрутизируете с нужной сетью

 

 

Под коммутированием Вы подразумеваете bridge? И можно подробнее про macvlan интерефейсы? Или ссылочку... Спасибо.

Share this post


Link to post
Share on other sites

да, коммутация это bridge. вместо veth+br можно сделать macvlan:

ip li add link eth1 eth1-m1 address 00:11:22:33:44:55 type macvlan

ip li add link eth1 eth1-m2 address 00:11:22:33:44:56 type macvlan

ip link set eth1-m1 netns vrf1

ip link set eth1-m2 netns vrf2

ip netns exec vrf1 ifconfig eth1-m1 10.17.0.254/24 up

ip netns exec vrf2 ifconfig eth1-m2 10.17.0.253/24 up

(это в случае если сеть 10.17/24 является dc)

 

если не будет работать, то ifconfig eth1 promisc или найти нужные патчи

Share this post


Link to post
Share on other sites

да, коммутация это bridge. вместо veth+br можно сделать macvlan:

ip li add link eth1 eth1-m1 address 00:11:22:33:44:55 type macvlan

ip li add link eth1 eth1-m2 address 00:11:22:33:44:56 type macvlan

ip link set eth1-m1 netns vrf1

ip link set eth1-m2 netns vrf2

ip netns exec vrf1 ifconfig eth1-m1 10.17.0.254/24 up

ip netns exec vrf2 ifconfig eth1-m2 10.17.0.253/24 up

(это в случае если сеть 10.17/24 является dc)

 

если не будет работать, то ifconfig eth1 promisc или найти нужные патчи

 

Спасибо большое, помогло! Возможно ли запустить индейца в контейнерах? Или для этого уже необходимы lxc ?

Share this post


Link to post
Share on other sites

что такое индеец? вообще запускать процессы в netns легко: ip netns exec vrfX PROCESS/RUN_SCRIPT, только помните что умолчанию в netns-ах лупбек не поднят, а иногда обмен данными идёт через него, если приложение запускает несколько процессов или даже внутри одного процесса

 

если нужно запускать несколько одинаковых процессов(в каждом netns свой), то с большой долей вероятности придётся создавать несколько скриптов запуска(изменять параметры типа pid-файл, var-dir, tmp-dir и т.п.), чтоб одновременно запущенные процессы не подрались за них

 

а если у вас есть навыки программирования, то можно пропатчить приложения, чтоб они стали netns-capable, но это палка о двух концах, потом проблемы с обновлениями, чтоб их не было(или минимизировать их) надо прохивать свой патч в апстрим, в используемый дистрибутив, патч могут не принять с резолюцией "не нужно" и т.д.

Share this post


Link to post
Share on other sites

можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать

 

Под дебианом приемлемо сделан запуск изолированых апачей. Там достаточно просто сделать запуск их в своих netns-ах, добавив ip netns exec в инит-скрипт.

 

Ну и многие почему-то забывают, что можно для отладки запустить ip netns exec name /bin/sh в интерактивном режимчике.

Edited by vop

Share this post


Link to post
Share on other sites

можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать

 

Большое Вам спасибо за советы, все работает). У апача сделал необходимое количество копий главного конфига, в каждой копии указал разные

pid`ы и запускаю командой ip netns exec netns_name apache2ctl -f config -k start.

Share this post


Link to post
Share on other sites

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.