Results 1 to 15 of 15

Thread: Изменять virtual-server, не перезагружая роутер?

  1. #1

    Изменять virtual-server, не перезагружая роутер?

    Доброго времени суток.

    У меня обычно 21 порт проброшен на десктопный компьютер (т.е. в настройках включено Virtual Server). Но когда десктоп выключается, я выключаю Virtual Server, и соответственно в качестве FTP выступает уже не десктоп, а сам роутер. Единственный минус - приходится каждый раз перезагружать роутер.

    Вопрос: нельзя-ли какими-либо манипуляциями с iptables делать тоже-самое, не перезагружаясь? Если вам не сложно, напишите пожалуйста полностью эти команды. Сам пытался разобраться, но тщетно (

    И еще, я вообщем-то этот вопрос уже задавал, но конкретного ответа так и не последовало: Возможно-ли как-то отслеживать, есть-ли линк на LAN порте или его нету? В идеале с помощью скрипта, который выполнялся бы по crontab'у скажем каждые 5 минут.

    В идеале хочется автоматизировать процесс: тоесть если есть линк на первом LAN порте, то FTP у нас на десктопе. Если линк пропал - то FTP переводим на роутер...

    Заранее огромное спасибо за ответы.

    P.S. wl500gP + Oleg's pre7 firmware.
    ----
    With best reagards,
    Sergey.

  2. #2
    Вариант один.
    в post-firewall в конец добавляем
    Code:
    iptables -t nat -I PREROUTING -p tcp --dport 21 -j DNAT --to-destination $VServerIP
    iptables -I INPUT -p tcp --dport 21 -j ACCEPT
    выключаем комп, делаем
    Code:
    iptables -t nat -D PREROUTING 1
    включаем комп - снова делаем.
    Code:
    iptables -t nat -I PREROUTING -p tcp --dport 21 -j DNAT --to-destination $VServerIP
    Алгоритм таков - при включенном компе входящий на 21-й порт траффик натится на комп, при выключенном - начинает работать второе правило и роутер сам принимает пакеты.

    Вариант 2.
    Пробросить сдрогог опорта на ФТП компа, врезультате оба ФТП могут работать одновременно

    Code:
    iptables -t nat -I PREROUTING -p tcp --dport 2121 -j DNAT --to-destination $VServerIP:21
    iptables -I INPUT -p tcp --dport 21 -j ACCEPT
    Здесь по 21-му порту доступен ФТП роутера, по 2121 - компа.

  3. #3
    чтобы автоматически выполнять команды по ssh-протоколу, есть замечательная тулза в комплекте с putty.
    называется pslink, вроде.
    ставь в шедулер ) при включении-выключении

  4. #4
    Duke: спасибо большое, сегодня вечером попробую. Вариант с двумя портами для меня не подходит, необходимо чтобы фтп был на стандартном порту. По результатам отпишусь.

    Lesnix: спасибо за подсказку, посмотрю в этом направлении.

    2All: Вот еще подумалось: ведь можно отслеживать включен десктоп или выключен по простому пингу с роутера на десктоп. Только не знаю, выдает ли команда ping какой-либо errorlevel, и можно ли его обработать в скрипте... Полез читать доки.
    ----
    With best reagards,
    Sergey.

  5. #5
    можно простой баш-скрипт написать типа
    Code:
    #!/bin/sh
           reply_count=`ping -c 2 <ип компа> | grep "bytes from" | wc -l`
            if [ $reply_count -gt 0 ]; then
                    <здесь необходимые тебе команды>
            fi
    Хотя я бы на твоем месте все-таки сделал всё это со стороны компа...
    Last edited by Lesnix; 10-10-2006 at 12:28.

  6. #6
    Quote Originally Posted by Lesnix View Post
    можно простой баш-скрипт написать типа
    Code:
    #!/bin/sh
           reply_count=`ping -c 2 <ип компа> | grep "bytes from" | wc -l`
            if [ $reply_count -gt 0 ]; then
                    <здесь необходимые тебе команды>
            fi
    Оооо, спасибо, то, что нужно. Вечером попробую.
    ----
    With best reagards,
    Sergey.

  7. #7
    можно проще

    if ! ping -c 2 $host1 > /dev/null 2>&1 ; then
    <здесь необходимые тебе команды>
    fi

  8. #8
    ...пошел учить матчасть

  9. #9
    Большое спасибо всем ответившим. В результате получилось примерно такое:
    Code:
    #!/bin/sh
    
    PIDFILE=/opt/var/run/ping.pid
    
        if ping -c 2 192.168.1.2 > /dev/null 2>&1 ; then
            if ! [ -f $PIDFILE ]; then
                echo "Desktop online" > $PIDFILE
                iptables -t nat -I PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2
            fi
        else
            if [ -f $PIDFILE ]; then
                rm -f $PIDFILE
                iptables -t nat -D PREROUTING 1
            fi
        fi
    Засунул это в /opt/etc/cron.5mins . Пока вроде полет нормальный. Посмотрим. Прошу модераторов тему пока не закрывать, есть еще некоторые вопросы с iptables, но попробую пока сам разобраться. Еще раз огромное спасибо всем.
    ----
    With best reagards,
    Sergey.

  10. #10
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    Я бы для удаления правила использовал

    iptables -t nat -D PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2

  11. #11
    Quote Originally Posted by Oleg View Post
    Я бы для удаления правила использовал

    iptables -t nat -D PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2
    Спасибо, пофикшено.
    ----
    With best reagards,
    Sergey.

  12. #12
    Все бы хорошо, но когда с десктопной машины пытаюсь зайти на любой фтп, попадаю на свой собственный. Подскажите, пожалуйста, что не так?
    /tmp/filter_rules
    Code:
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :MACS - [0:0]
    :SECURITY - [0:0]
    :logaccept - [0:0]
    :logdrop - [0:0]
    -A SECURITY -p tcp --syn -m limit --limit 1/s -j RETURN
    -A SECURITY -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j RETURN
    -A SECURITY -p udp -m limit --limit 5/s -j RETURN
    -A SECURITY -p icmp -m limit --limit 5/s -j RETURN
    -A SECURITY -j DROP
    -A INPUT -m state --state INVALID -j DROP
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -i lo -m state --state NEW -j ACCEPT
    -A INPUT -i br0 -m state --state NEW -j ACCEPT
    -A INPUT -i vlan1 -m state --state NEW -j SECURITY
    -A INPUT -p udp --sport 67 --dport 68 -j ACCEPT
    -A INPUT -j DROP
    -A FORWARD -i br0 -o br0 -j ACCEPT
    -A FORWARD -m state --state INVALID -j DROP
    -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A FORWARD -i vlan1 -m state --state NEW -j SECURITY
    -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
    -A logaccept -m state --state NEW -j LOG --log-prefix "ACCEPT " --log-tcp-sequence --log-tcp-options --log-ip-options
    -A logaccept -j ACCEPT
    -A logdrop -m state --state NEW -j LOG --log-prefix "DROP " --log-tcp-sequence --log-tcp-options --log-ip-options
    -A logdrop -j DROP
    COMMIT
    /tmp/nat_rules
    Code:
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :VSERVER - [0:0]
    -A PREROUTING -d 10.37.160.254 -j VSERVER
    -A VSERVER -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.2:8080
    -A VSERVER -p tcp -m tcp --dport 24939 -j DNAT --to-destination 192.168.1.2:24939
    -A VSERVER -p udp -m udp --dport 24939 -j DNAT --to-destination 192.168.1.2:24939
    -A PREROUTING -p udp -d 10.37.160.254 --sport 6112 -j NETMAP --to 192.168.1.0/24
    -A POSTROUTING -p udp -s 192.168.1.0/24 --dport 6112 -j NETMAP --to 10.37.160.254
    -A POSTROUTING -o vlan1 ! -s 10.37.160.254 -j MASQUERADE
    -A POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE
    COMMIT
    post-firewall:
    Code:
    #!/bin/sh
    iptables -D INPUT -j DROP
    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -t nat -A PREROUTING -i $1 -p tcp --dport 80 -j DNAT --to-destination $4:8080
    iptables -A INPUT -j DROP
    
    iptables -t nat -I PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2
    iptables -I INPUT -p tcp --dport 21 -j ACCEPT
    Если нужна еще какая-то информация, я ее предоставлю. Совсем я запутался в iptables ( Чувствую что что-то перемудрил... Буду благодарен за ответ, заранее спасибо.
    Last edited by Tronix; 10-10-2006 at 19:37. Reason: п
    ----
    With best reagards,
    Sergey.

  13. #13
    Добавь "-d 10.37.160.254" в скриптах в строки с PREROUTING (на сколько я понимаю именно на этот адрес ломятся на ФТП снаружи?)

  14. #14
    Duke: да, спасибо большое. Теперь все работает как надо (тьфу-тьфу-тьфу). Если бы еще thttpd запускался всегда, а не в зависимости от фазы луны; и php не вываливался бы с Segmentation fault, было бы вообще супер

    Если кому-то надо, то в окончательном варианте скрипт выглядит так:
    Code:
    #!/bin/sh
    
    PIDFILE=/opt/var/run/ping.pid
    
        if ping -c 2 192.168.1.2 > /dev/null 2>&1 ; then
            if ! [ -f $PIDFILE ]; then
                echo "Desktop online" > $PIDFILE
                iptables -t nat -I PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2 -d 10.37.160.254
            fi
        else
            if [ -f $PIDFILE ]; then
                rm -f $PIDFILE
                iptables -t nat -D PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.2 -d 10.37.160.254
            fi
        fi
    Здесь 192.168.1.2 - адрес десктопа, 10.37.160.254 - адрес роутера во внешнем мире (WAN).

    В /tmp/local/sbin/post-firewall всего одно правило:
    Code:
    iptables -I INPUT -p tcp --dport 21 -j ACCEPT
    Спасибо всем за помощь в разрешении проблеммы.
    ----
    With best reagards,
    Sergey.

  15. #15
    вместо
    Code:
    -d 10.37.160.254
    можно прописать
    Code:
    -d "$(nvram get wan_ipaddr)"
    Надеюсь ненадо объяснять почему с такими настройками ФТП будет доступен только из локалки но не через нет?
    Last edited by Duke; 13-10-2006 at 20:12.

Similar Threads

  1. Gameserver
    By blingbling in forum WL-500gP Q&A
    Replies: 2
    Last Post: 17-07-2006, 15:37
  2. filtering virtual server port with mac address
    By dwienie in forum WL-500g Q&A
    Replies: 0
    Last Post: 19-03-2006, 16:46
  3. ipkg.sh, Zeit, MAC-Cloning, Samba, Virtual Server
    By spooky0815 in forum German Discussion - Deutsch (DE)
    Replies: 4
    Last Post: 20-12-2005, 12:55

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •