Uma ferramenta para alterar a interface de vinculação padrão para um determinado comando?

5

Isso está de alguma forma relacionado a interface de alteração para fazer um whois

A diferença é que eu gostaria de saber se é possível especificar a interface padrão apenas para um programa específico - não para todo o sistema. Por exemplo: digamos que meu servidor tenha vários IPs. Eu quero executar o programa X (digamos wget) e eu quero usar um dos meus IPs como o endereço de origem. Ficaria assim:

theprogram --use-interface=1.2.3.4 wget google.com

e o wget usaria o meu IP 1.2.3.4 para se conectar ao google.com e buscar o html. É possível?

    
por wanson 17.06.2011 / 23:37

3 respostas

2

As pessoas aqui sugeriram algumas alternativas viáveis para o que você deseja fazer. O roteamento e o NAT de origem podem ajudar, mas podem ou não resolver o problema que você está tentando resolver.

Você pode fazer exatamente o que você perguntou se você está disposto a muito sobre um pouco. Você pode usar a mágica da interposição de função via LD_PRELOAD para agrupar a chamada do sistema bind() com código de sua escolha.

As páginas a seguir contêm informações que fornecem mais detalhes sobre essa solução:

Isso funcionará somente enquanto o código que estiver executando não for SUID (por motivos de segurança, os programas SUID / SGID não podem ser modificados usando LD_PRELOAD ).

    
por 18.06.2011 / 01:29
1

Com o wget você pode usar o --bind-address

Caso contrário, acho que você precisa especificar uma rota para o endereço IP de destino ou procurar no programa que está tentando usar se tiver uma maneira de decidir o endereço de vinculação / origem.

    
por 17.06.2011 / 23:43
1

Muitos, mas não todos, os programas têm a opção de vincular a um endereço específico. Alguns, como wget (como apontado por fbh), possuem uma opção de linha de comando para especificar a qual endereço se ligar. Muitos outros programas semelhantes a servidores, como o apache e o squid, controlam isso em seu arquivo de configuração. Sempre será específico do programa.

Para programas que não suportam ligação a um endereço específico, suas opções podem ser mais limitadas, dependendo do tipo de programa que você está lidando.

Para um programa de servidor (que aceita conexões de entrada), você normalmente pode realizar a mesma coisa ouvindo em todos os endereços (que normalmente é o padrão), usando iptables ou seu roteador externo para forfparar os outros endereços. / p>

O mais complicado é para conexões de saída. Aqui você precisará de algo mais como descrito na resposta que você vinculou em sua pergunta. O problema é depender do endereço de destino, não do programa de origem.

Você pode conseguir o que deseja com o iptables e uma regra SNAT.

iptables -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source 1.2.3.4

Esta regra do iptables (que eu tenho não testada), deve alterar o endereço de origem em qualquer tráfego que vá para a porta 80. Se você precisar do mesmo comportamento para ambos o tráfego tcp e udp, você precisaria criar duas regras, substituindo '-p tcp' por '-p udp' no segundo.

    
por 18.06.2011 / 00:06