Есть простое решение - Даниэль Райд написал для этой цели библиотеку LD_PRELOAD « shim » (bind.c), которая изменяет поведение привязки. Проверьте этот учебник:
https://www.x4b.net/kb/BindProcessToIPonLinux
Учитывая , есть эффективен адрес привязки по умолчанию для приложений (смотрите таблицу маршрутизации), это по - моему великолепно странно , что , как правило , не существует стандартный способ (как в "распределении коды пакета") , чтобы переопределить этот интерфейс по умолчанию, да; на системном уровне, для определенного набора приложений.
Некоторые программы имеют параметры командной строки для прослушивания интерфейса по вашему выбору, что все хорошо и хорошо.
Мой маршрут по умолчанию идет через VPN-прокси (конечно, довольно распространенный сценарий). Хорошее значение по умолчанию для исходящих соединений, этот туннель не очень хорошо поддерживает входящие соединения из Интернета. Поэтому мне нужно заставить серверно-ориентированные программы A, B и C связываться с каким-либо другим IP-адресом (основным адресом, предоставленным провайдером). И клиент-ориентированная программа D, я хочу использовать свой публичный интерфейс по разным причинам.
Приведенная выше библиотека работает хорошо, для этой цели!
Решение:
- Создать нового пользователя
- Заголовок-mangle ВСЕ пакеты этого конкретного пользователя
- Запускать программы от имени этого пользователя ТОЛЬКО для "эффективного связывания" с желаемым интерфейсом, по сравнению с этим, кажется уродливым хаком.
В качестве альтернативы:
- Создать нового пользователя SuperFluous
- Сделать SuperFluous использовать другую таблицу маршрутизации
- Запустите A, B, C как пользователь SuperFluous; Все еще недостаточно хорош! Я хочу запускать "мои" серверы как "я" (у меня может даже не быть привилегий для создания новых пользователей и политик маршрутизации).
LISTEN_TO = $ THIS_INTERFACE Command; # <- Это должно быть так просто.