Editando IPTABLES nat rule no cron job

0

Estou sentado aqui com um problema: eu preciso mudar a interface de origem para a regra NAT do iptables em um determinado momento. Eu quero basicamente fazer algo assim - cuidado: código conceitual:

#!/bin/bash
if [ it is 11.30pm ]; then
    iptables CHANGE FIRST RULE IN FORWARD CHAIN AND MAKE ORIGINAL -o wlan0 INTO -o ppp0
fi

Um mesmo script precisa ser executado às 8h para mudar isso de volta - wlan0 para ppp0. Estou configurando meu nat atual com um script init.d:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          subnet
# Required-Start:    ifplugd
# Required-Stop:     $ifplugd
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Brings up the NAT system
# Description:       Initializes the NAT routing (SUBnet)
### END INIT INFO

# This is rather simple, as we have the script already...
[ "$1" != "" || "$1" != "start" ] && exit 0;

echo -n .
/sbin/iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.200.0/24 -m conntrack --ctstate  NEW -j ACCEPT

echo -n .
/sbin/iptables -A FORWARD -m conntrack -ctstate ESTABLISHED,RELATED -j ACCEPT

echo -n .
/sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

echo
echo "[ OK! ] NAT is now initialized with wlan0->eth0."

Isso funciona muito bem durante a inicialização, mas eu quero que a interface de origem mude, então eu tenho uma internet contínua.

Em algum ponto, o dispositivo ppp0 pode não estar presente, portanto, o script também precisará verificar sua presença e, em seguida, alternar. Eu usarei uma regra do udev - muito provavelmente - para executar o sakis3g --connect quando o dispositivo estiver conectado.

Alguém tem alguma ideia de como perceber isso? Eu sou novo no cronjobs, e eu não consigo enrolar minha cabeça realmente em torno de IPTABLES, estou feliz por ter conseguido colocar esse script init.d juntos:)

    
por Ingwie Phoenix 20.03.2014 / 22:08

1 resposta

0

iptables não controla em qual interface o pacote está saindo. Ele simplesmente permite que o pacote saia dessa interface e altere seu endereço de origem.

Adicionar regras para ambas as interfaces deve ser suficiente para que o NAT funcione em ambas as interfaces.

    
por 21.03.2014 / 09:54