Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Выполнение скрипта во время переподключения пппое  (Прочитано 729 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн utahrzd

  • Автор темы
  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Есть подлючение к интернет пппое с динамическим ИП адресом и есть скрипт, закидывающий правила иптаблес, в котором есть привязка к ИП адресу, который получен для пппое. Если подключение пппое отваливается, я так понимаю, что оно самостоятельно переподключается и соответсятвенно получает новый ИП адрес, а иптаблес выполняется со старым ИП адресом. Как сделать так, чтобы во время такого переподключения пппое выполнялся сриптик, типа:
/etc/init.d/rc.iptables stop
/etc/init.d/rc.iptables start
или, если это сделать не возможно, то как запустить скрипт, который бы запускался вместе с системой и работал бы в системе постояно и выполнял бы выше написаные строки каждых 10 минут???
« Последнее редактирование: 12 Августа 2009, 16:36:35 от utahrzd »

Оффлайн Sam Stone

  • Старожил
  • *
  • Сообщений: 1131
    • Просмотр профиля
для динамических айпишников вроде бы удобнее использовать маскарад. Хотя не зная что правила делают трудно предполагать что ты там настраиваешь.

Есть такая штука /etc/network/if-up.d, не пробовал?
Jellyfish 6.5.0-45-generic
2690v4 64Gb

Оффлайн utahrzd

  • Автор темы
  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Ну собственно говоря, я не думаю, что для Вас важен текст rc.iptables, но тем не менее вот он:
#!/bin/bash

# Включаем IP форвардинг
    echo "1" > /proc/sys/net/ipv4/ip_forward

# Защита от Syn flood атаки
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies
    IPT="/sbin/iptables"

    LO_IFACE="lo"
    INET="ppp0"         #Модем
    LAN_IFACE="eth0"    #Интерфес который смотрит в общую сеть
    LAN2_IFACE="eth1"   #интерфес к которому подключен ADSL (Bridging)
    EXT_IP=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)       #внешний ип адрес
    INT_IP="192.168.0.1"        #cетевой адресс
    VS="192.168.0.2"    #адресс видеосервера
    PORT_VID="80"       #порты видеосервера
    PORT2_VID="8000"

start_fw()
    {
# стандартные действия
    $IPT -P INPUT ACCEPT
    $IPT -P OUTPUT ACCEPT
    $IPT -P FORWARD ACCEPT
# чистим все правила
    $IPT -t filter -F
    $IPT -t filter -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X

    $IPT -A INPUT -p TCP --dport 53 -j ACCEPT
    $IPT -A INPUT -p TCP --dport 21 -j ACCEPT
    # безлимитный трафик для lo интерфейса(для себя)
    $IPT -t filter -A INPUT -i $LO_IFACE -j ACCEPT
    $IPT -t filter -A OUTPUT -o $LO_IFACE -j ACCEPT

######################### VIDEO ###################################
$IPT -t nat -I PREROUTING -d $EXT_IP -p tcp --dport $PORT_VID -j DNAT --to-destination $VS:$PORT_VID
$IPT -t nat -I POSTROUTING -d $VS -p tcp --dport $PORT_VID -j SNAT --to-source $INT_IP
$IPT -t filter -I FORWARD -d $VS -p tcp --dport $PORT_VID -j ACCEPT

$IPT -t nat -I PREROUTING -d $EXT_IP -p tcp --dport $PORT2_VID -j DNAT --to-destination $VS:$PORT2_VID
$IPT -t nat -I POSTROUTING -d $VS -p tcp --dport $PORT2_VID -j SNAT --to-source $INT_IP
$IPT -t filter -I FORWARD -d $VS -p tcp --dport $PORT2_VID -j ACCEPT
}

case "$1" in
start)  echo -n "Starting firewall: iptables"
        start_fw
        echo "."
        ;;
stop)   echo -n "Stopping firewall: iptables"
        iptables -F
        iptables -X
        echo "."
        ;;
save)   echo -n "Saving firewall: iptables"
        iptables-save > /etc/rules-save
        echo "."
        ;;
restart) echo -n "Restarting firewall: iptables"
        iptables -F
        iptables -X
        cat /etc/rules-save | iptables-restore
        echo "."
        ;;
reload|force-reload) echo -n "Reloading configuration files for firewall: iptables"
        echo "."
        ;;
*)      echo "Usage: /etc/init.d/rc.iptables start|stop|restart|reload|force-reload"
        exit 1
        ;;
esac
exit 0


Он прокидывает все обращения на 80 и 8000 порты с этого сервера на видеосервер и обратно.
Тут есть строка:
EXT_IP=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
которая присваивает EXT_IP внешний ип адрес пппое поключения

 

Страница сгенерирована за 0.015 секунд. Запросов: 20.