script3
будет выполняться только в случае успешного выполнения script1
и script2
, а script1
и script2
будут выполняться параллельно:
./script1 &
process1=$!
./script2 &
process2=$!
wait $process1
rc1=$?
wait $process2
rc2=$?
if [[ $rc1 -eq 0 ]] && [[ $rc2 -eq 0 ]];then
./script3
fi
Итак, я не знаю, насколько вы понимаете, как работает маршрутизация, поэтому я попытаюсь объяснить, и мы посмотрим, насколько вы сможете понять мое объяснение. Объяснение не совсем правильное, потому что на самом деле вращается больше колес, но этого должно быть достаточно.
На каждом переходе в сети стек IP просматривает каждый входящий IP-пакет. Он сравнивает IP-адрес назначения с таблицей маршрутизации. Вы можете увидеть эту таблицу маршрутизации с ip route
.
Сначала он проверяет, соответствует ли IP-адрес пакета одному из его собственных интерфейсов. Если это так, то пакет предназначен для самого перехода, и переход «проглатывает» пакет (, толкает его вверх по стеку, например. к стеку TCP ).
Если пакет не предназначался для самого хопа, то хоп проверяет и проходит свою собственную таблицу маршрутизации от наиболее значимого маршрута к наименее значимому. /24
говорит вам, что 24 из 32 бит являются значимыми. Тогда /16
будет менее значимым. В случае ip route
стек IP будет сравнивать IP-адрес пакета с отображаемыми маршрутами снизу вверх. Выигрывает первый маршрут, соответствующий IP-адресу пакета. Таким образом, при обходе таблицы маршрутизации с IP-адресом назначения 192.168.102.10 маршрут 192.168.0.0/16 будет соответствовать пакету. Маршрут 192.0.0.0/16 не будет. Вы можете использовать инструмент sipcalc
для отображения информации о сетевых адресах.
Последний соответствующий маршрут будет маршрутом по умолчанию, который соответствует всем параметрам.
Каждый маршрут содержит следующий переход, на который будет отправлен пакет. Возможно, вы можете лучше увидеть следующий переход в /sbin/route -n
. Это столбец «маршрутизатор» или столбец «интерфейс», в зависимости от того, подключена ли сеть, которую представляет маршрут, напрямую к сетевому интерфейсу, присутствующему на прыжке, или нет.
Когда пакет проходит через VPN-туннель, IP-пакет упаковывается в другой пакет. Так что, насколько вам известно, учитываются только внутренние IP-адреса входа и выхода VPN. Пакет попадает в точку входа и вылетает из точки выхода «волшебным образом».
Итак, теперь вы должны быть в состоянии определить на каждом узле, какой путь должен пройти пакет, включая исходный и конечный прыжки. Если он не идет по тому пути, который вам нравится, вам нужно добавить соответствующий маршрут. Это может быть маршрут с одним хостом, например,192.168.102.79/32
(все значащие биты! Соответствует только одному хосту! ). Найдите несколько примеров для ip route add
.
Кроме того, вы хотите наблюдать за прохождением пакетов через узлы. Вы можете использовать tcpdump -n -i interface
для этого (f.ex.tcpdump -n -i eth0
). Таким образом, если вы видите пакет, проходящий через узел 1, и думаете, что он должен идти к узлу 2, но не видите, как он проходит через узел 2, то маршруты на узле 1, вероятно, неверны и отправляют пакет не в тот пункт назначения.
Таким образом, вы сможете анализировать каждый шаг таблицы маршрутизации от источника к месту назначения, видеть, какой маршрут должен проходить пакет на каждом узле, возможно, добавлять маршруты, чтобы пакет правильный путь и убедитесь, что они действительно соответствуют tcpdump
.
Имейте в виду, что оба маршрута от источника к получателю и обратно должны быть настроены правильно.
Имейте в виду, что неправильный маршрут может сделать машину недоступной по сети. Таким образом, вы можете захотеть иметь способ перезагрузить машину с помощью независимого механизма, а не по сети.
После того, как ваша маршрутизация заработала, убедитесь, что она выдерживает перезагрузку. F.ex. написав новый маршрут в/etc/network/interfaces
(место, где вам нужно зарегистрировать, это зависит от того, как сетевой стек настроен на этой машине. Это сильно различается между различными Unix, дистрибутивами Linux и т. д.)
Надеюсь, это поможет вам в дальнейшем.