1

У меня есть несколько сетевых интерфейсов, обеспечивающих подключение к Интернету. Я могу изменить интерфейс, используемый для доступа в интернет через route add default gw ... в любое время.

Однако возможно ли выбрать шлюз только для определенной команды? Например, один процесс использует канал модема GSM, в то время как система использует канал Ethernet для всех других интернет-запросов.

1 ответ1

1

Вы можете сделать это с помощью iptables и другого пользователя. Предполагая, что IP-адрес интерфейса, который вы хотите использовать в команде, это 1.2.3.4 а также имя eth1 и шлюз 1.2.3.1 .

1) Создайте нового пользователя:

adduser user2

2) Отметить пакеты, приходящие от этого пользователя:

iptables -t mangle -A OUTPUT -m owner --uid-owner user2 -j MARK --set-mark 42

3) Примените IP-адрес к этим пакетам:

iptables -t nat -A POSTROUTING -o eth1 -m mark --mark 42 -j SNAT --to-source 1.2.3.4

4) Маршрутизировать помеченные пакеты через шлюз eth1 :

ip rule add fwmark 42 table 42
ip route add default via 1.2.3.1 dev eth1 table 42

5) Выполните команду как новый пользователь:

sudo -u user2 ping example.com

Теперь ping example.com будет маршрутизироваться через шлюз 1.2.3.1 не через системный шлюз по умолчанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .