Para Linux, isso já foi respondido no Superusuário - Como usar diferentes interfaces de rede para diferentes processos? .
A resposta mais popular usa um truque LD_PRELOAD
para alterar a ligação de rede para um programa, mas os kernels modernos suportam um recurso muito mais flexível chamado 'namespaces de rede' que é exposto através do programa ip
. Esta resposta mostra como usar isso. De minhas próprias experiências, fiz o seguinte (como root):
# Add a new namespace called test_ns
ip netns add test_ns
# Set test to use eth0, after this point eth0 is not usable by programs
# outside the namespace
ip link set eth0 netns test_ns
# Bring up eth0 inside test_ns
ip netns exec test_ns ip link set eth0 up
# Use dhcp to get an ipv4 address for eth0
ip netns exec test_ns dhclient eth0
# Ping google from inside the namespace
ip netns exec test_ns ping www.google.co.uk
Também é possível gerenciar namespaces de rede com os comandos unshare
e nsenter
. Isso permite também criar espaços separados para PIDs, usuários e pontos de montagem. Para mais informações, consulte: