
Tenho várias interfaces de rede que fornecem conexão à Internet. Posso alterar a interface utilizada para acesso à internet route add default gw ...
a qualquer momento.
Porém, é possível selecionar o gateway apenas para um determinado comando? Por exemplo, faça com que um processo use um link de modem GSM, enquanto o sistema usa o link Ethernet para todas as outras solicitações de Internet.
Responder1
Você pode fazer isso com iptables
um usuário diferente. Supondo que o endereço IP da interface que você deseja que o comando use seja 1.2.3.4
o nome eth1
e o gateway 1.2.3.1
.
1) Crie um novo usuário:
adduser user2
2) Marque os pacotes vindos 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 pacotes marcados através eth1
do gateway de:
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 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.