Привязка IP-адреса к приложению

У меня есть несколько сетевых интерфейсов на одной машине. Мне интересно, как я могу привязать сетевой интерфейс приложения.

пример:
Сетевые интерфейсы: eth0, eth1

применение a использовать dummy0
Применение B используйте dummy1

можно ли привязать приложение к такому интерфейсу?

Случае Использовать :
1 машина с 2 подключениями к интернету;
eth0 - > подключение к интернету 0
eth1 - > подключение к интернету 1

приложения использовать предопределенный интерфейс
Firefox - > eth0 - > подключение к интернету 0
Chrome - > eth1 - > подключение к интернету 1

OS: CentOS 5.9 32bit

23
задан dooffas
09.05.2023 2:27 Количество просмотров материала 2741
Распечатать страницу

5 ответов

выбор конкретного адаптера для приложения-это приложения. Необходимо определить, как это делается в конкретном приложении. Это невозможно сделать на системном уровне.

Windows

Вы можете настроить приоритет адаптеров на глобальном уровне системы. Используйте стрелки вверх и вниз на странице дополнительные свойства сетевых подключений.

http://levynewsnetwork.wordpress.com/2011/12/01/windows-7-default-internet-connection-choice/

Linux

в Linux процесс не так прост. Вы должны сказать Linux, что один адаптер находится дальше, чем другой, используя metric.

чтобы определить приоритеты адаптеров в Linux, вы должны использовать маршрут команда, чтобы добавить маршрут с нужной метрикой и удалить старую запись. Для пример:

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1
sudo route del -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 0

для обеих ОС, один и тот же порядок будет использоваться для каждого приложения, когда это будет сделано.

4
отвечен krowe 2023-05-10 10:15

есть простое решение - Даниэль Райд написал LD_PRELOAD библиотеку" shim" (bind.c), который изменяет поведение привязки для этой цели. Проверить этот учебник:

https://www.x4b.net/kb/BindProcessToIPonLinux

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

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

мой маршрут по умолчанию проходит через VPN-прокси (конечно, довольно распространенный сценарий). Хорошее значение по умолчанию для исходящих соединений, этот туннель не поддерживает входящие соединения из интернета очень хорошо. Поэтому мне нужно заставить серверно-ориентированные программы A, B и C для привязки к какому-то другому IP (основной ISP адрес). И клиент-ориентированная программа D, Я хочу использовать свой публичный интерфейс по разным причинам.

выше библиотеки работает хорошо для этой цели!

решение:

  1. создать нового пользователя
  2. заголовок-mangle все пакеты этого конкретного пользователя
  3. запуск программ от имени этого пользователя, только для "эффективной привязки" к нужному интерфейсу похоже... уродливый взлом, по сравнению.

кроме того:

  1. создать нового пользователя лишним
  2. используйте другую таблицу маршрутизации
  3. запуск A, B, C как пользователь излишним; еще не достаточно хорошо! Я хочу запускать" мои "серверы как" меня " (у меня может даже не быть прав на создание новых пользователей и политик маршрутизации).

LISTEN_TO=$THIS_INTERFACE команда; # < - это должно быть так просто.

2
отвечен Folie Triks 2023-05-10 12:32

на самом деле вопрос немного неточен. Привязка приложения к интерфейсу применяется к приложению, действующему в качестве сервера.

в этом случае правильный термин - "маршрутизация трафика для конкретного приложения определенным образом". В Linux это может быть выполнено с маршрутизацией политики.

фишка в том, что один запускает другой браузер в качестве другого пользователя, и правила маршрутизации, политики делают все пакеты от пользователей использовать другой по умолчанию ворота.

http://blog.sebastien.raveau.name/2009/04/per-process-routing.html имеет полное описание.

1
отвечен Tero Kilkanen 2023-05-10 14:49

Как Кроу уже сказал, что это зависит от приложения. Если ваше приложение не поддерживает привязку к данному интерфейсу / IP, вы можете использовать iptables (Linux) или ipfilter (*BSD).

Ubuntu-Wiki имеет довольно хорошее введение в iptables: https://help.ubuntu.com/community/IptablesHowTo

0
отвечен Denis Witt 2023-05-10 17:06

в то время как приложения могут привязываться к конкретным IP-адресам, это зависит от приложения. Для вашего конкретного примера Chrome и Firefox поддерживают HTTP прокси.

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

acl browser1 localip 127.0.0.2
acl browser2 localip 127.0.0.3
tcp_outgoing_address 192.168.1.99 browser1
tcp_outgoing_address 197.6.0.1 browser2

теперь Firefox будет настроен для подключения к прокси-серверу в 127.0.0.2, который будет использовать 192.168.1.99 в качестве сетевого адаптера для выполнения исходящих запросов TCP.

Chrome будет настроен для использования 127.0.0.3 в качестве прокси-сервера, который будет использовать 197.6.0.1 в качестве исходящего адреса.

0
отвечен Anders J 2023-05-10 19:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх