Я сижу здесь с проблемой: мне нужно переключить исходный интерфейс для правила NAT iptables в данный момент времени. Я хочу сделать что-то вроде этого - осторожно: concept code:

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

Тот же сценарий должен быть запущен в 8 утра, чтобы изменить его в обратном направлении - с wlan0 на ppp0. Я устанавливаю свой текущий nat с помощью скрипта 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."

Это хорошо работает во время загрузки, но я хочу, чтобы исходный интерфейс изменился, поэтому у меня постоянный интернет.

В какой-то момент устройство ppp0 может отсутствовать, поэтому сценарию также необходимо проверить его наличие, а затем переключиться. Я буду использовать правило udev - скорее всего - для запуска sakis3g --connect после подключения устройства.

У кого-нибудь есть идеи, как это реализовать? Я новичок в cronjobs, и я не могу обернуть голову действительно aorund IPTABLES, я рад, что мне удалось собрать этот сценарий init.d вместе :)

1 ответ1

0

iptables не контролирует, через какой интерфейс выходит пакет. Он просто позволяет пакету выходить из этого интерфейса и меняет адрес источника.

Добавление правил для обоих интерфейсов должно быть достаточным для работы NAT на обоих интерфейсах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .