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:).