Como eu roteio tráfego através de uma interface específica para um processo específico

4

Eu tenho um script que é executado a partir do cron a cada 15 minutos. O script serve para fazer ping no meu servidor DNS para atualizar um IP que muda dinamicamente. Eu quero que este script faça o ping pela interface wlan e não pelo eth0 .

No entanto, outros processos devem usar eth0 como a interface principal para acessar a Internet.

Como faço isso apenas para um processo específico sem perturbar outros processos? Existe uma maneira de direcionar o tráfego pela interface, como direcionar o stdout? como ls -al > /dev/tty2' . O chroot pode me ajudar nisso, dando-me um ambiente de área restrita?

    
por Lord Loh. 26.02.2013 / 21:08

1 resposta

6

A solução é definir a marca do pacote do Netfilter que pode ser usada pelo roteamento avançado. Não há como coincidir com o ID do processo, mas o Netfilter permite combinar no processo UID ou GID. Neste caso, parece ser a solução mais fácil para criar um novo usuário do sistema, especialmente para esta tarefa.

iptables -A OUTPUT -m owner --uid-owner wlanping -j MARK --set-mark 42

Crie uma nova tabela de roteamento (forecewlan) em / etc / iproute2 / rt_tables e escolha o gateway wlan como gateway padrão:

ip route add default via $WLAN_GATEWAY

e forçar o uso desta tabela de roteamento para pacotes com esta marca:

ip rule add fwmark 42 table forcewlan

Talvez você também tenha que copiar esse tipo de entrada da tabela de roteamento principal:

192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.100
    
por 26.02.2013 / 21:37

Tags