Выберите шлюз, используемый для определенных команд в Linux

Выберите шлюз, используемый для определенных команд в Linux

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

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

решение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а не через шлюз системы по умолчанию.

Связанный контент