рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ
рдЬрд┐рд╕ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╣рд╛рдВ рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕реНрдерд┐рд░ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдлреНрд░реАрдмреАрдПрд╕рдбреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдирдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирд╡реАрдп рдХрд╛рд░рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕рд░реНрд╡рд░ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ FreeBSD рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕рд░реНрд╡рд░ рд╣реИрдВ, рдФрд░ рдЬрдм рдПрдХ рдирдпрд╛ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рдирдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛), рдпрд╣ рдЗрди рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ рд╣реИ, рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдпрд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ )ред
рдЙрджрд╛рд╣рд░рдг рд╕рд░реНрд╡рд░ рд╕реВрдЪреА рдлрд╝рд╛рдЗрд▓:
192.168.0.1
192.168.1.1
mainserver.yourdomain.ru
рдЖрдЧреЗ рдХрд╛ рдХрд╛рдо рджреЛ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдПрдХ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
1)
checkroute.sh [-c] рдЧрдВрддрд╡реНрдп рдЧреЗрдЯрд╡реЗ , рдЬрд╣рд╛рдВ
-рд╕реА - рдЪреЗрдХ-рдУрдирд▓реА рдСрдкреНрд╢рди (рдХреЗрд╡рд▓ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ),
рдЧрдВрддрд╡реНрдп - IP рдкрддрд╛ рдпрд╛ рдЧрдВрддрд╡реНрдп рдиреЗрдЯрд╡рд░реНрдХ,
рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ - рдЧрдВрддрд╡реНрдп рдХреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ред
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд░реНрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ рдФрд░, рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рдХрд░, рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рдЙрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред
2)
checker.sh рдЧрдВрддрд╡реНрдп рдЧреЗрдЯрд╡реЗ ifcheckрдмрджрд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рд░реВрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рд╕реНрдХреИрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ -c рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЧрдВрддрд╡реНрдп / рдЧреЗрдЯрд╡реЗ рдЬреЛрдбрд╝реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд▓рд╛рддрд╛ рд╣реИред
checkroute.sh
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд▓рд╣рд╛рд▓, рдХреЗрд╡рд▓ -c рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ifcheck = "рдирд╣реАрдВ"
рдЬрдмрдХрд┐ "рдЧ" рдСрдкреНрдЯреЛрдкреЛрдЯ рдорд┐рд▓рддрд╛ рд╣реИ
рдХреЗрд╕ "$ OPTname" рдореЗрдВ рдХрд░реЗрдВ
"c") ifcheck = "check" ;;
*) рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ "рдЙрдкрдпреЛрдЧ: $ 0 [рд╡рд┐рдХрд▓реНрдк] DESTINATION рдЧреЗрдЯрд╡реЗ
\ tc \ tcheck рдорд╛рд░реНрдЧ, рдЗрд╕реЗ рдареАрдХ рди рдХрд░реЗрдВ
"
рдирд┐рдХрд╛рд╕
;;
esac
рдХрд┐рдпрд╛
рд╢рд┐рдлреНрдЯ $ (($ OPT -1))
рдЕрдЧрд▓рд╛ рдХрджрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП DESTINATION рдФрд░ GATEWAY рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ IP рдкрддрд╛ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ DESTINATION рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ GATEWAY рдХреЗ рд░реВрдк рдореЗрдВ IP рдкрддрд╛ред
validipregexp = "(25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9]?) \ (25 [0-5]] 2 | [0-4] [0-9] | [режрез] [реж- реп] [реж- реп]?] \? (реирел [реж-рел] | реи [режрез] [реж-реп] | [ 01]; [0-9] [0-9]?} (25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9 | ]?) "
рдЪреЗрдХрдк () {
CHECK = $ (рдЧреВрдВрдЬ $ 1 | grep -E "^ $ validIPregexp $ 2")
рдЕрдЧрд░ [! "$?" -рдПрдХ реж]
рддреЛ
рдЗрдХреЛ "рдЧрд▓рдд $ 3: $ 1, рдХреГрдкрдпрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред"
рдирд┐рдХрд╛рд╕
рдлрд╛рдИ
}
рдЪреЗрдХрдк $ 1 "(/ ([0-2]? [0-9] | 3 [0-2])); $" "рдЧрдВрддрд╡реНрдп рдЖрдИрдкреА рдкрддрд╛ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ"
рдЪреЗрдХрдк $ 2 "$" "рдЧреЗрдЯрд╡реЗ"
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд▓рд╛рдЗрди рд╕реЗ $ рд╕рд░реНрд╡рд░рд▓рд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЗрди рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪреЗрдХрд░.рд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВред $ Dir рд╡реИрд░рд┐рдПрдмрд▓ рдЙрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ $ serverlist рдФрд░ checker.sh рдлрд╛рдЗрд▓реЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ
serverlist = 'server.lst'
dir = '/ usr / рд▓реЛрдХрд▓ / etc / your_dir'
рдХреИрдЯ "$ {dir} / $ рд╕рд░реНрд╡рд░ рд╕реВрдЪреА" | рдЬрдмрдХрд┐ рд╕рд░реНрд╡рд░ рдкрдврд╝рд╛
рдХрд░рдирд╛
рдЗрдХреЛ "$ рд╕рд░реНрд╡рд░:"
cat "$ {dir} / $ checker.sh | ssh -q $ server" rm -f /var/tmp/checker.sh; cat - >> /var/tmp/checker.sh; sh /var/tmp/checker.sh $ 1 $ 2 $ ifcheck "
рдХрд┐рдпрд╛
checker.sh
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЪреЗрдХрд░.рд╢ рд▓рд┐рдкрд┐ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ рдЬрдм рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддреА рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯред S рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ -c рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
ifcheck = $ 3
рдкреНрд░рддрд┐рдмрджреНрдз () {
рдЕрдЧрд░ [$ ifcheck! = "check"]
рддреЛ
eval "$ 1" 2> / рджреЗрд╡ / рдЕрд╢рдХреНрдд
рдЕрдЧрд░ [! $? -рдПрдХ реж]
рддреЛ
рдЧреВрдВрдЬ "рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛:
$ 1 "
рдФрд░ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ "$ 2"
рдлрд╛рдИ
рдФрд░ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ "рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд┐рдирд╛ рдЪрд▓рд╛рдП" - c \ "рд╡рд┐рдХрд▓реНрдк рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ:
$ 1
"
рдлрд╛рдИ
}
рд╣рдо рд╡рд░реНрддрдорд╛рди рд░реВрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ (netstat -rnW рдЖрдЙрдЯрдкреБрдЯ) рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ $ CurrentGW рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк:
1) рдЧрдВрддрд╡реНрдп рдХрд╛ рдкрддрд╛ рд╕реНрдерд╛рдиреАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ($ CurrentGW = "LOCAL")
2) рдЧрдВрддрд╡реНрдп рдХрд╛ рдкрддрд╛ рдХрд╣реАрдВ рдФрд░ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ $ CurrentGW рдХреЛ рдЗрд╕ рдкрддреЗ рдкрд░ рд╡рд░реНрддрдорд╛рди рдЧреЗрдЯрд╡реЗ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛
3) рдЧрдВрддрд╡реНрдп рдХрд╛ рдкрддрд╛ рдХрд╣реАрдВ рдФрд░ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, $ CurrentGW рдЦрд╛рд▓реА рд░рд╣реЗрдЧрд╛ред
CurrentGW = `netstat -rnW | awk -v gw = "$ 2" -v src = "$ 1" {рдЕрдЧрд░ ($ 1 ~ src) {рдЕрдЧрд░ ($ 2 ~ / '$ validIPregexp' /) {if ($ 2! ~ gw} {$ $ 2} рдмрд╛рдХреА {рдкреНрд░рд┐рдВрдЯ! "рдареАрдХ"}} рдФрд░ {{"LOCAL"}}} рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ ''
рдЕрдЧрд░ [-Z $ рдХрд░рдВрдЯрдЧреНрд╡]
рддреЛ
рдЧреВрдВрдЬ "$ 1 рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред"
рдкреНрд░рддрд┐рдмрджреНрдз "рд╕реВрдбреЛ рдорд╛рд░реНрдЧ $ 1 $ 2 рдЬреЛрдбрд╝реЗрдВ" "рдорд╛рд░реНрдЧ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред"
рдЕрдиреНрдпрдерд╛
рдорд╛рдорд▓рд╛ $ CurrentGW рдореЗрдВ
рдареАрдХ рд╣реИ) рдЧреВрдВрдЬ "$ 1 рдХрд╛ рд╡рд░реНрддрдорд╛рди рдорд╛рд░реНрдЧ $ 2 рд╣реИ: рдареАрдХ рд╣реИ" ;;
LOCAL) рдЧреВрдВрдЬ "рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╣реИ" ;;
*) рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ "$ 1 рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЧрдВрддрд╡реНрдп рдЧрд▓рдд рд╣реИ: $ 2 рдХреЗ рдмрдЬрд╛рдп $ рдХрд░рдВрдЯреАрдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВ"; "sudo рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди $ 1 $ 2" "рдЗрд╕реЗ рдмрджрд▓рдирд╛ред" ;;
esac
рдлрд╛рдИ
рдЕрдЧрд▓рд╛, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдкреВрд░реНрдг рдкрде рдЬрд┐рд╕рдореЗрдВ рдЪрд░ $ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд┐рд╣рд┐рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рдЬреЛрдбрд╝ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЧрдВрддрд╡реНрдп рдкрддреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдиреЗрдЯрд╕реНрдЯреИрдЯ -rnW рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрдВрдбрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо = '/ usr / рд╕реНрдерд╛рдиреАрдп / рдЖрджрд┐ / rc.d / rc.script.for.adding.rout.it'
рдмрд┐рд▓реНрд▓реА "$ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо" | grep -v '^ #' | sed '/ ^ $ / d' | sed 's / [\ t] + / / g' | grep -E 'рдорд╛рд░реНрдЧред + рдЬреЛрдбрд╝реЗрдВ'> /var/tmp/routes_temp.lst
FileGW = `cat /var/tmp/routes_temp.lst | grep $ 1 | awk -v gw = "$ 2" '{if ($ NF ~ gw) {рдкреНрд░рд┐рдВрдЯ "YES"} рдФрд░ {{$ $ NF}}' '
рдЕрдЧрд░ [$ CurrentGW = "рд╕реНрдерд╛рдиреАрдп"]
рдЕрдЧрд░ [! -z $ filegw]
рддреЛ
рдЗрдХреЛ "рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди $ 1 рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ $ рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред"
"sudo sed -Ei '' '\ _: рдорд╛рд░реНрдЧ [^ \ n] + рдЬреЛрдбрд╝реЗрдВ [^ \ n] + $ 1:' $ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо" "рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИред"
рдлрд╛рдИ
рдЕрдиреНрдпрдерд╛
рдЕрдЧрд░ [-z $ FileGW]
рддреЛ
рдЗрдХреЛ "рдЪреЗрдХ $ рдлрд╝рд╛рдЗрд▓рдирд╛рдо: рдХреЛрдИ рдореЗрд▓ рдирд╣реАрдВред"
t1 = `рдкреВрдБрдЫ -1/var/tmp/routes_temp.lst | awk '{рдкреНрд░рд┐рдВрдЯ $ (NF-1)}' '
t2 = `рдкреВрдБрдЫ -1/var/tmp/routes_temp.lst | awk '{$ $ NF}' '
IFS = ''
regex = "\\: рдорд╛рд░реНрдЧ [^ \\ n] + рдЬреЛрдбрд╝ [^ \\ n] + $ t1 [\\ t] + $ t2: a \\
/ sbin / path -nq $ 1 $ 2 рдЬреЛрдбрд╝реЗрдВ
"
"sudo sed -Ei '' '$ regex2' $ рдлрд╝рд╛рдЗрд▓рдирд╛рдо" "рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛"
рдЕрдиреНрдпрдерд╛
рдЕрдЧрд░ [$ FileGW! = "YES"]
рддреЛ
рдЧреВрдВрдЬ "$ 1 рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдЧрд▓рдд рд╣реИ: $ FileGWред"
regex = "s | $ 1 [\ t] + $ FileGW | $ 1 $ 2 | g |
"sudo sed -Ei '' '$ regex2' $ рдлрд╝рд╛рдЗрд▓рдирд╛рдо" "рдЧреЗрдЯрд╡реЗ рдХреЛ $ 2 рдореЗрдВ рдмрджрд▓рдирд╛"
рдФрд░ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ "рд╕рд╣реА рдорд╛рд░реНрдЧ $ рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛: рдареАрдХ рд╣реИ"
рдлрд╛рдИ
рдлрд╛рдИ
рдлрд╛рдИ
рдореИрдВ рдХреЛрдб рдХреЗ рдЕрдВрддрд┐рдо рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рд╡реИрд░рд┐рдПрдмрд▓ $ рд░реЗрдЧреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдПрдлрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗрдб рджреНрд╡рд╛рд░рд╛ рддрдп рдХреА рдЬрд╛рддреА рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ $ рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдлреЙрд░реНрдо рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
"sudo echo '/ sbin / рдорд╛рд░реНрдЧ -nq рдЬреЛрдбрд╝ $ 1 $ 2' >> $ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо"
рдирд┐рд╖реНрдХрд░реНрд╖
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп * рдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рд╕рд┐рдб рдХреАрдЬрд╝ (рдбреЗрдмрд┐рдпрди рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -рдИ рдХреЗ рдмрдЬрд╛рдп -ri "") рдФрд░ рд░реВрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд╣реИ (рдореИрди рд░реВрдЯ рджреЗрдЦреЗрдВ)ред рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪреЗрдХ рд╣реЛрддреЗ рд╣реИрдВ ("рдПрдХ рдореВрд░реНрдЦ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛"), рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╣реА рдЧрдВрддрд╡реНрдп / рдЧреЗрдЯрд╡реЗ рдЬреЛрдбрд╝реА рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЙрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рдкрд╛рд╕ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рд╕рддрд░реНрдХ рд░рд╣реЛ!
рджреЛрдиреЛрдВ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдкреВрд░реНрдг рдЧреНрд░рдВрде рд╕рдВрд▓рдЧреНрди рд╣реИрдВ:
checkroute.sh ,
checker.sh