Usando o IP secundário em um script bash

1

Eu tenho um IP primário definido para todas as tarefas relacionadas ao sistema. Às vezes eu tenho que usar meu sistema para realizar testes diferentes e na maioria das vezes eu tenho que lidar com scripts bash / shell. Eu quero que os testes / largura de banda sejam completamente separados do IP Primário, então eu quero realizar as operações usando o IP Secundário. Como posso conseguir isso?

    
por Asad Moeen 14.10.2013 / 19:32

1 resposta

2

Isso não é muito sobre o bash e nem tanto sobre os comandos que você usa no script. Normalmente, o IP de origem é escolhido de acordo com o IP de destino. Algumas ferramentas podem permitir que você especifique o IP de origem ou, possivelmente, reescreva o IP de origem usando iptables , se puder corresponder ao script, por exemplo, por uid / gid.

AFAIK, não há como anexar um endereço IP de origem a um processo (e você também precisaria dos subprocessos para herdá-lo). Se você está bem com a regravação do IP de origem, você pode mudar o processo de script para um id de grupo especial:

Como root:

ip4_address=... # fill in your ipv4 address
group=secondaryip # or any other name

groupadd $group
usermod your-user -aG $group # not needed for the root user

iptables -t nat -A POSTROUTING \
    -m owner --gid-owner $group \
    -j SNAT --to-source $ip4_address

Execute o script usando:

sg secondaryip "/path/to/your/script arg1 arg2"

Como alternativa, você pode invocar comandos individuais em seus scripts usando sg . Leia sua página de manual para mais detalhes. Além disso, há truques para fazer seu script rodar com o comando sg , mas você não precisa tanto assim. Você pode usar o comando clássico newgrp e passar um script de shell via stdin , mas isso não funcionará para o perl (mencionado pelo seu comentário).

Observação: os comandos usados no script não saberão sobre o IP de origem modificado, mas isso geralmente não deve ser um problema.

Por uma questão de completude, ainda há outro caminho. Você pode usar a variável de ambiente LD_PRELOAD para substituir alguns símbolos libc, por exemplo connect() com sua própria versão que executaria ações adicionais, como vinculação a um endereço de origem específico. Mas é uma programação C um pouco avançada e é melhor ficar com os waepons convencionais:).

    
por 15.10.2013 / 04:08