conrad Posted June 19, 2014 Posted June 19, 2014 Доброго времени суток уважаемые форумчане. Есть задача: имеется сервер, один интерфейс которого смотрит в три 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
Ivan_83 Posted June 19, 2014 Posted June 19, 2014 Либо добавить вланы в мост и на мост вешать нужный адрес, но тогда нужно будет фильтровать. Либо с помощью ARP объявить себя во всех нужных вланах, но детали реализации увы не подскажу. Скорее всего нужно будет повешать нужный адрес на один влан интерфейс, а на остальные фейковые и проанонсить на них нужный ручками, либо с прокси арп что то покрутить. Вставить ник Quote
conrad Posted June 20, 2014 Author Posted June 20, 2014 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
NiTr0 Posted June 20, 2014 Posted June 20, 2014 На этом же сервере есть еще один физический интерфейс который смотрит в сеть 10.17.0.0/24, как сделать так чтобы эта сеть была доступна во всех контейнерах? Эм... создать veth пары, одним концом - в бридж с физ. ифейсом, вторым - в контейнер? Правда хз прокатит ли один и тот же адрес, или надо будет контейнерам разные назначать... Вставить ник Quote
s.lobanov Posted June 21, 2014 Posted June 21, 2014 На этом же сервере есть еще один физический интерфейс который смотрит в сеть 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
conrad Posted June 21, 2014 Author Posted June 21, 2014 т.е. делаете veth-пары между netns и глобалом и в глобале коммутируете с нужным интерфейсом или маршрутизируете с нужной сетью Под коммутированием Вы подразумеваете bridge? И можно подробнее про macvlan интерефейсы? Или ссылочку... Спасибо. Вставить ник Quote
s.lobanov Posted June 21, 2014 Posted June 21, 2014 да, коммутация это 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
conrad Posted June 21, 2014 Author Posted June 21, 2014 да, коммутация это 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
s.lobanov Posted June 21, 2014 Posted June 21, 2014 что такое индеец? вообще запускать процессы в netns легко: ip netns exec vrfX PROCESS/RUN_SCRIPT, только помните что умолчанию в netns-ах лупбек не поднят, а иногда обмен данными идёт через него, если приложение запускает несколько процессов или даже внутри одного процесса если нужно запускать несколько одинаковых процессов(в каждом netns свой), то с большой долей вероятности придётся создавать несколько скриптов запуска(изменять параметры типа pid-файл, var-dir, tmp-dir и т.п.), чтоб одновременно запущенные процессы не подрались за них а если у вас есть навыки программирования, то можно пропатчить приложения, чтоб они стали netns-capable, но это палка о двух концах, потом проблемы с обновлениями, чтоб их не было(или минимизировать их) надо прохивать свой патч в апстрим, в используемый дистрибутив, патч могут не принять с резолюцией "не нужно" и т.д. Вставить ник Quote
conrad Posted June 21, 2014 Author Posted June 21, 2014 что такое индеец? индеец это apache. Вставить ник Quote
s.lobanov Posted June 21, 2014 Posted June 21, 2014 можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать Вставить ник Quote
vop Posted June 23, 2014 Posted June 23, 2014 (edited) можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать Под дебианом приемлемо сделан запуск изолированых апачей. Там достаточно просто сделать запуск их в своих netns-ах, добавив ip netns exec в инит-скрипт. Ну и многие почему-то забывают, что можно для отладки запустить ip netns exec name /bin/sh в интерактивном режимчике. Edited June 23, 2014 by vop Вставить ник Quote
conrad Posted June 23, 2014 Author Posted June 23, 2014 можно, запускайте, у апача вроде бы только пид-файл надо будет поменять, если 4 копии будете запускать Большое Вам спасибо за советы, все работает). У апача сделал необходимое количество копий главного конфига, в каждой копии указал разные pid`ы и запускаю командой ip netns exec netns_name apache2ctl -f config -k start. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.