conrad Posted June 19, 2014 · Report post Доброго времени суток уважаемые форумчане. Есть задача: имеется сервер, один интерфейс которого смотрит в три 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 Заранее благодарю за помощь. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 19, 2014 · Report post netns Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 19, 2014 · Report post Либо добавить вланы в мост и на мост вешать нужный адрес, но тогда нужно будет фильтровать. Либо с помощью ARP объявить себя во всех нужных вланах, но детали реализации увы не подскажу. Скорее всего нужно будет повешать нужный адрес на один влан интерфейс, а на остальные фейковые и проанонсить на них нужный ручками, либо с прокси арп что то покрутить. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
conrad Posted June 20, 2014 · Report post 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, как сделать так чтобы эта сеть была доступна во всех контейнерах? Заранее благодарю за ответ. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted June 20, 2014 · Report post На этом же сервере есть еще один физический интерфейс который смотрит в сеть 10.17.0.0/24, как сделать так чтобы эта сеть была доступна во всех контейнерах? Эм... создать veth пары, одним концом - в бридж с физ. ифейсом, вторым - в контейнер? Правда хз прокатит ли один и тот же адрес, или надо будет контейнерам разные назначать... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 21, 2014 · Report post На этом же сервере есть еще один физический интерфейс который смотрит в сеть 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-ветке ядра Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
conrad Posted June 21, 2014 · Report post т.е. делаете veth-пары между netns и глобалом и в глобале коммутируете с нужным интерфейсом или маршрутизируете с нужной сетью Под коммутированием Вы подразумеваете bridge? И можно подробнее про macvlan интерефейсы? Или ссылочку... Спасибо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 21, 2014 · Report post да, коммутация это bridge. вместо veth+br можно сделать macvlan: ip li add link eth1 eth1-m1 address 00:11:22:33:44:55 type macvlanip 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 или найти нужные патчи Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
conrad Posted June 21, 2014 · Report post да, коммутация это bridge. вместо veth+br можно сделать macvlan: ip li add link eth1 eth1-m1 address 00:11:22:33:44:55 type macvlanip 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 ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 21, 2014 · Report post что такое индеец? вообще запускать процессы в netns легко: ip netns exec vrfX PROCESS/RUN_SCRIPT, только помните что умолчанию в netns-ах лупбек не поднят, а иногда обмен данными идёт через него, если приложение запускает несколько процессов или даже внутри одного процесса если нужно запускать несколько одинаковых процессов(в каждом netns свой), то с большой долей вероятности придётся создавать несколько скриптов запуска(изменять параметры типа pid-файл, var-dir, tmp-dir и т.п.), чтоб одновременно запущенные процессы не подрались за них а если у вас есть навыки программирования, то можно пропатчить приложения, чтоб они стали netns-capable, но это палка о двух концах, потом проблемы с обновлениями, чтоб их не было(или минимизировать их) надо прохивать свой патч в апстрим, в используемый дистрибутив, патч могут не принять с резолюцией "не нужно" и т.д. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
conrad Posted June 21, 2014 · Report post что такое индеец? индеец это apache. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 21, 2014 · Report post можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted June 23, 2014 (edited) · Report post можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать Под дебианом приемлемо сделан запуск изолированых апачей. Там достаточно просто сделать запуск их в своих netns-ах, добавив ip netns exec в инит-скрипт. Ну и многие почему-то забывают, что можно для отладки запустить ip netns exec name /bin/sh в интерактивном режимчике. Edited June 23, 2014 by vop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
conrad Posted June 23, 2014 · Report post можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать Большое Вам спасибо за советы, все работает). У апача сделал необходимое количество копий главного конфига, в каждой копии указал разные pid`ы и запускаю командой ip netns exec netns_name apache2ctl -f config -k start. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...