Первый вопрос здесь, так что не торопитесь:
У меня есть сервер debian linux 5.0 с двумя общедоступными интерфейсами. Я хотел бы направить исходящий трафик от одного экземпляра приложения через один интерфейс, а второго экземпляра через второй интерфейс. Есть несколько проблем:
Возможно, я мог бы запустить два виртуализированных сервера на коробке и привязать каждый из них к другому интерфейсу, но я ищу более простое решение, возможно, используя iproute или iptables?
Есть идеи для меня? Заранее спасибо - и я буду рад ответить на любые вопросы.
Вы смотрели на owner
модуль в iptables, возможно, в сочетании с исходным правилом NAT?
Это позволяет вам настроить OUTPUT
правила цепочки на основе UID, GID, PID, SID и имени команды.
Я считаю, что лучший вариант - привязать каждое приложение к другому IP-адресу и использовать маршрутизацию на основе источника, чтобы изменить, через какие интерфейсные пакеты с этого IP-адреса отправляются.
Общая идея состоит в том, что вы можете создать несколько параллельных таблиц маршрутизации (ip route имеет необязательный параметр table). Затем вы добавляете правило: «если он с IP [x.x.x.x], то используйте table [foo]».
Так:
Я не тестировал эти примеры специально, но в прошлом успешно использовал похожие.
В Linux есть поддержка привязки приложения к определенному IP (например, используемому Apache). Если ваше приложение не поддерживает это, вам не повезло.
Мне неизвестны какие-либо модули ядра Linux (потому что это то, что вам может понадобиться) для привязки конкретного приложения к интерфейсу, даже когда оно пытается привязаться к *. Одна из возможностей - использование виртуальной машины.
Самое близкое, что я могу придумать для ваших требований, если нет поддержки приложений, - это связывание интерфейса Ethernet (http://www.cyberciti.biz/howto/question/static/linux-ethernet-bonding-driver-howto.php). Но тогда вы будете запускать только один экземпляр приложения на нескольких интерфейсах с одним и тем же IP.