LinuxForum.Fans
Тема

Резервный канал с openVPN

Автор: u__________12 31 сообщений 8380 просмотров
#232170

Кажется нашёл причину.

Я для проверки просто ронял интерфейс подключённый к пчелайну, но шлюз пингуется (хоть и через другого прова), у него внешний ip. Короче буду дальше думать.

#232178
Сергей В. написал:
В результате тестирования выявлен существенный недостаток.

1. приведите в порядок отступы - ВСЁ, что после if и до fi должно быть на один отступ правее. Я не понял логику вашего скрипта.
2.

Сергей В. написал:
return; # Выходим

А где fi? Да и вообще - зачем так делать-то?

Вы можете писать как угодно(это не пайтон), просто без отступов вам самим сложнее.

Сергей В. написал:
И кстати.. простите за тупой вопрос, но как скрипт остановить??

послать сигнал остановки.

Сергей В. написал:
kill check_gateways не прокатил

kill принимает номер сигнала и номер процесса.

#232179
Сергей В. написал:
Я для проверки просто ронял интерфейс подключённый к пчелайну, но шлюз пингуется (хоть и через другого прова), у него внешний ip

использовать ping для проверки работы шлюзов - вообще плохая идея.

#232187
Сергей В. написал:
Кажется нашёл причину.

Я для проверки просто ронял интерфейс подключённый к пчелайну, но шлюз пингуется (хоть и через другого прова), у него внешний ip. Короче буду дальше думать.

У меня была проблема такого рода ток смотрите:
Пакет шол так 62.33.188.11x -> 62.33.188.20x -> 192.168.200.1 -> 192.168.4.1 -> 192.168.4.100 -> Служба видит что у клиента 62.33.188.11x
Отправлял обратно так.
192.168.4.100 -> 192.168.4.1 -> 62.33.188.11x потому что на шлюзе был инет тоже то есть пакеты возвращались через другой канал.
Выход:
Создал таблицу через iproute2
настроил маршруты в данной таблицы.
Через iptables в PREROUTING ставил MARK 2 с ип 192.168.4.100 и уже после чего пакеты шли как мне надо.
В вашем случае если хотите использовать ping можете использовать таблицы iproute2.

#232190

И ещё раз пишите daemon так возьмите за основу skeleton

text
user@router:/etc/init.d$ cat skeleton 
#! /bin/sh
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

# Author: Foo Bar <foobar@baz.org> # # Please remove the "Author" lines above and replace them # with your own name if you copy and modify this script.

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Description of the service" NAME=daemonexecutablename DAEMON=/usr/sbin/$NAME DAEMON_ARGS="--options args" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed [ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh

# Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions

# # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. }

# # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" }

# # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 }

case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac

#232212
Kettler написал:
И ещё раз пишите daemon так возьмите за основу skeleton

это инит-скрипт, а не демон.

#232672
drBatty написал:
послать сигнал остановки

Каким образом?

#232673
drBatty написал:
А где fi?

3 if, 3 fi вроде как..

Вообщем скрипт пашет, и пока устраивает.. кое-что поменяю, но это позже

drBatty написал:
использовать ping для проверки работы шлюзов - вообще плохая идея.

А что ещё можно?

#232696
Сергей В. написал:
послать сигнал остановки
Каким образом?

сигналы посылает у нас команда kill
вот так можно посмотреть список (у вас он может быть другой)

text
# kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    

сигнал - это сообщение одного процесса к другому. Передаёт их ядро. Это касается всех сигналов, кроме SIGKILL, этот сигнал не доходит до получателя, потому как ядро его насильно убивает (если у отправителя есть таие права конечно). вот ещё здесь доделали вроде: http://ru.wikipedia.org/wiki/SIGINT
Приложение-реципиент может игнорить сигналы (кроме конечно SIGKILL) (help trap), а может выполнять действие по умолчанию.

Сергей В. написал:
3 if, 3 fi вроде как..

мне без отступов не видно.

Сергей В. написал:
А что ещё можно?

ну раз вам маршрут нужен, то очевидно route или более прогрессивная утилита ip r
А вообще говоря, почему-бы вам не прописать 2 gateway'я? Тогда и переписывать ничего не надо...

#232925
drBatty написал:
почему-бы вам не прописать 2 gateway'я?

Пока не очень представляю как это будет выглядеть.. пока оставлю так.. пока.. а там видно будет.

#232928
Сергей В. написал:
Пока не очень представляю как это будет выглядеть..

это дистрозависимо. я тоже не знаю.

Войдите или зарегистрируйтесь, чтобы ответить.