FreeBSD рд╕рд░реНрд╡рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕реНрдерд┐рд░ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ


рдЬрд┐рд╕ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╣рд╛рдВ рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕реНрдерд┐рд░ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдлреНрд░реАрдмреАрдПрд╕рдбреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдирдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирд╡реАрдп рдХрд╛рд░рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕рд░реНрд╡рд░ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 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

Source: https://habr.com/ru/post/In116956/


All Articles