Selecione o gateway usado para determinados comandos no Linux

1

Eu tenho várias interfaces de rede que fornecem uma conexão com a internet. Eu posso mudar a interface usada para acesso à Internet via route add default gw ... a qualquer momento.

No entanto, é possível selecionar o gateway apenas para um determinado comando? Por exemplo, um processo usa um link de modem GSM, enquanto o sistema usa o link Ethernet para todas as outras solicitações da Internet.

    
por dronus 29.05.2015 / 11:14

1 resposta

1

Você pode fazer isso com iptables e um usuário diferente. Supondo que o endereço IP da interface que você quer que o comando use, é 1.2.3.4 e o nome eth1 e o gateway 1.2.3.1 .

1) Crie um novo usuário:

adduser user2

2) Marque os pacotes provenientes desse usuário:

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

3) Aplique o endereço IP nesses pacotes:

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

4) Roteie os pacotes marcados através do gateway de eth1 :

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

5) Execute o comando como o novo usuário:

sudo -u user2 ping example.com

ping example.com agora seria roteado pelo gateway 1.2.3.1 , e não pelo gateway padrão do sistema.

    
por 29.05.2015 / 11:31