Назад | Перейти на главную страницу

Выбор шлюза на уровне приложения в Linux

Я хочу решить на уровне приложения, какой шлюз использовать для подключения к Интернету.

Это невозможно сделать с помощью простых правил подсети, потому что именно приложение должно иметь возможность решать, какой шлюз использовать.

Например. Я хочу использовать curl для загрузки чего-либо и хочу каким-то образом указать, какой шлюз использовать.

Это Linux-бокс с одной сетевой картой и IP-адресом 10.0.0.1. Есть два или более шлюза (разные интернет-провайдеры): например, 10.0.0.100 и 10.0.0.101.

Можно ли настроить правила маршрутизации с помощью iptables и iproute2 для управления этим? Как сообщить приложению, какой маршрут использовать?

Я пробовал это:
Я добавил в / etc / iproute2 / rt_tables: 100 out2
ip rule add prio 200 из поиска 10.0.0.2 out2
ip route добавить 10.0.0.0/24 dev eth0 src 10.0.0.2 table out2
ip route добавить по умолчанию через 10.0.0.100 dev eth0 src 10.0.0.2 table out2
По-прежнему "telnet -b 10.0.0.2 www.google.com 80" возвращает "сеть недоступна"

Я могу придумать один способ сделать это, а именно:

  1. Определите два IP-адреса на вашей сетевой карте, например 10.0.0.1 и 10.0.0.2. Это должно быть легко и просто. Это можно сделать с помощью ifconfig.
  2. Настройте маршрутизацию на основе источника так, чтобы каждый IP-адрес источника направлялся на один из шлюзов по умолчанию. Эта ссылка могу помочь тебе.
  3. Наконец, вы можете указать своему приложению использовать bind один из адресов 10.0.0.1 или 10.0.0.2. Таким образом, вы можете выбрать один из шлюзов в зависимости от выбранного IP-адреса источника. Чтобы проверить это, вы можете использовать telnet с участием -b source_ip вариант.

Вот команды, которые я использовал ранее для включения маршрутизации на основе источника:

$ sudo ip rule add from 10.0.0.2 tab 1 priority 500
$ sudo ip route add default via 10.0.0.101 dev eth0 tab 1
$ sudo ip route flush cache

Если у вас установлен шлюз по умолчанию 10.0.0.100, это должно сработать для вас. Пакеты, отправленные с 10.0.0.1, должны быть отправлены на шлюз по умолчанию, а пакеты, отправленные с 10.0.0.2, должны быть отправлены на второй шлюз 10.0.0.101, как указано выше.

Другой вариант. Многие утилиты CLI используют переменные среды для этого типа конфигурации, http_proxy может иметь отношение к вашей ситуации, http://www.cyberciti.biz/faq/linux-unix-set-proxy-environment-variable/