LostSoul Опубликовано 15 сентября, 2009 · Жалоба Имеется сервер Linux Centos 5. На сервере прикручено 3 алиаса , IP-адреса из одной подсети. допустим 62.0.0.2 , 62.0.0.3 , 62.0.0.4 На нем запускается некая готовая бинарная программа ( имеется только в скомпилированном виде ). Программа биндит локальный TCP-сокет к локальному адресу 0.0.0.0 и коннектится по TCP к хосту, обслуживающему ее запросы. Задача - запустить 3 экземпляра программы как-то так, чтоб экземпляр 1 осуществлял подключения к удаленному хосту используя IP первого алиаса, второй экземпляр IP второго алиаса, третий - третий IP. Точнее сказать цель чтоб целевой хост ( к которому идут подключения ) видел эти 3 экземляра как-бы запущенными на 3 разных серверах))) IP целевого хоста ( куда идет подключения ) тоже прибит гвоздями внутри программы.... есть какие-то идеи на тему ip rule чтоб скажем процесс запущенный под одним uid использовал один локальный IP при коннектах, а под другим uid - другой? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Мартен Опубликовано 16 сентября, 2009 · Жалоба распихать экземпляры по openvz виртуалкам Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
m0sia Опубликовано 16 сентября, 2009 · Жалоба В mangle маркировать через iptables match owner --cmd-owner name или --pid-owner processid(если известен пид процесса или строка запуска), и на соотвествующий fwmark весить policy routing табличку с нужным src полем. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
m0sia Опубликовано 16 сентября, 2009 · Жалоба только что посмотрел. match owner processid и cmd-owner выкинули из ядра.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
m0sia Опубликовано 16 сентября, 2009 · Жалоба допустим сервер к которому коннектимся 62.0.0.10 ip route add table client1 62.0.0.10 via 62.0.0.2 ip route add table client2 62.0.0.10 via 62.0.0.3 ip route add table client3 62.0.0.10 via 62.0.0.4 ip rule add fwmark 0x01 table client1 ip rule add fwmark 0x02 table client2 ip rule add fwmark 0x03 table client3 iptables -t mangle -A OUTPUT -m owner --uid-owner client1 -j MARK --set-mark 0x01 iptables -t mangle -A OUTPUT -m owner --uid-owner client2 -j MARK --set-mark 0x02 iptables -t mangle -A OUTPUT -m owner --uid-owner client3 -j MARK --set-mark 0x03 вроде вот так. клиентов запускаем под разными юзерами client1, client2, client3. Вроде бы должно работать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Мартен Опубликовано 16 сентября, 2009 · Жалоба допустим сервер к которому коннектимся 62.0.0.10 ip route add table client1 62.0.0.10 via 62.0.0.2 ip route add table client2 62.0.0.10 via 62.0.0.3 ip route add table client3 62.0.0.10 via 62.0.0.4 ip rule add fwmark 0x01 table client1 ip rule add fwmark 0x02 table client2 ip rule add fwmark 0x03 table client3 iptables -t mangle -A OUTPUT -m owner --uid-owner client1 -j MARK --set-mark 0x01 iptables -t mangle -A OUTPUT -m owner --uid-owner client2 -j MARK --set-mark 0x02 iptables -t mangle -A OUTPUT -m owner --uid-owner client3 -j MARK --set-mark 0x03 вроде вот так. клиентов запускаем под разными юзерами client1, client2, client3. Вроде бы должно работать. не так. ip route add table client1 62.0.0.10 via $gw src 62.0.0.2 ip route add table client2 62.0.0.10 via $gw src 62.0.0.3 ip route add table client3 62.0.0.10 via $gw src 62.0.0.4 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
m0sia Опубликовано 17 сентября, 2009 · Жалоба допустим сервер к которому коннектимся 62.0.0.10 ip route add table client1 62.0.0.10 via 62.0.0.2 ip route add table client2 62.0.0.10 via 62.0.0.3 ip route add table client3 62.0.0.10 via 62.0.0.4 ip rule add fwmark 0x01 table client1 ip rule add fwmark 0x02 table client2 ip rule add fwmark 0x03 table client3 iptables -t mangle -A OUTPUT -m owner --uid-owner client1 -j MARK --set-mark 0x01 iptables -t mangle -A OUTPUT -m owner --uid-owner client2 -j MARK --set-mark 0x02 iptables -t mangle -A OUTPUT -m owner --uid-owner client3 -j MARK --set-mark 0x03 вроде вот так. клиентов запускаем под разными юзерами client1, client2, client3. Вроде бы должно работать. не так. ip route add table client1 62.0.0.10 via $gw src 62.0.0.2 ip route add table client2 62.0.0.10 via $gw src 62.0.0.3 ip route add table client3 62.0.0.10 via $gw src 62.0.0.4 Я тут подумал и провел эксперимент. Не будет такая схема работать. Даже если bind на 0.0.0.0, то при connect на 62.0.0.10 ядро сначала посмотрит в дефолтной таблице и отправит пакет с дефолтного адреса. А уже потом этот пакет промаркируется и завернется в нужную таблицу. Но это ужен не поможет, тк src уже проставлен. Может быть тогда как-нибудь со SNAT поиграть: устанавливать TOS соответсвующего приложения и на внешнем linux роутере SNAT'ить в разные адреса на основе этого TOS. Так точно будет работать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 17 сентября, 2009 · Жалоба Если программа динамически слинкована можно через LD_PRELOAD подсунуть в bind() другие параметры. Если статически - наверняка можно просто пропатчить 4 байта в бинарнике. Иначе - openvz/xen/kvm/vmware по вкусу. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
LostSoul Опубликовано 17 сентября, 2009 · Жалоба Если программа динамически слинкована можно через LD_PRELOAD подсунуть в bind() другие параметры.Если статически - наверняка можно просто пропатчить 4 байта в бинарнике. Иначе - openvz/xen/kvm/vmware по вкусу. вот про LD_PRELOAD можно подробнее?) Интерестно На тему mangle -- первое что попробовал. решение о маршрутизации принимается ДО прохода пакетом этой цепочки. Спасибо нашел сам http://www.ryde.net/code/bind.c.txt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...