Профайл тус бүрийн шалгалтаар хэд хэдэн vpnc туннелийг асаалттай байлга
Багцад байгаа дахин холболтын скрипт нэг туннель гэж үздэг. vpnc профайл бүрт өөрийн порт өгч, бодит үйлчилгээг шалгаад, шалгалтуудыг нэг тогтмол дарааллаар холбоно уу.
Нэг vpnc профайл роумингийн дараа цэвэрхэн дахин холбогддог; гурав нь ээлжлэн бие биенийхээ сокет, маршрут, шийдэгчийн төлөвийг эвддэг. Багцад байгаа дахин холболтын скрипт нэг туннельд зориулагдсан тул аль нэг нь унасан үед бүх профайлыг дахин эхлүүлдэг. Үүнийг засахын тулд гурван зүйл хэрэгтэй: тусдаа локал портууд, профайл бүрт бодит үйлчилгээг шалгадаг шалгалт, хоёр холболтыг хэзээ ч зэрэг ажиллуулдаггүй нэг эрэмбэлэгдсэн гинжин хэлхээ.
Профайл бүрт өөрийн локал порт өгнө үү
Өгөгдмөл локал порт дээр үлдээсэн vpnc профайл аль хэдийн ажиллаж байгаа профайлтай өрсөлддөг. Эхнийх нь портыг эзэмшиж байхад хоёр дахь холболт бүтэлгүйтдэг бөгөөд лог мөр нь локал зөрчил биш харин гарцын асуудал мэт харагддаг. Оронд нь профайл файл бүрт нэг мөр бичээрэй:
Local Port 0Тэг нь цөмд түр зуурын порт сонгох боломж олгодог тул хоёр профайлыг нэгэн зэрэг байгуулж болно. Файл бүрийг үйлчилдэг гарц, бүлгийн нэрээр нэрлэж, зөвхөн root-д унших боломжтой байлгаж, хуваалцсан өгөгдмөл биш харин тохирох профайлаар үргэлж холбогдоорой. Хуваалцсан өгөгдмөл файл бол хэн нэгэн профайлын нэрийг өөрчилсний дараа скрипт буруу туннельд дахин холбогддог зам юм.
Профайл файлууд нэвтрэх мэдээлэл агуулдаг тул эрх нь дизайны хэсэг бөгөөд гэрийн ажил биш. /etc/vpnc доор бүгд унших боломжтой файл бүлгийн нууцыг локал хэрэглэгч бүрт өгдөг. Горимыг 0600 болгож, эзэмшигчийг root байлгаж, скриптүүд нууцыг аргумент руу хуулахын оронд файлыг root байдлаар уншиг. Тиймээс шалгалтын скрипт файлын агуулгыг хэзээ ч лог руу бичих ёсгүй.
Профайл бүрт нэг үйлчилгээг шалга, туннелийн хаягийг биш
Туннелийн өөрийн хаяг руу явуулсан цуурайн хүсэлт нь ихэвчлэн интерфейс байгааг л баталдаг. Энэ нь ард байгаа хост туннелийг зөвтгөдөг аппликейшнд хүрч байгаа эсэхийг хэлэхгүй. Интерфейс асаалттай байхад түүний цаанаах маршрут аль хэдийн алга болсон байж болно.
Профайл бүрт нэг үйлчилгээг богино TCP хугацаатай шалгаад, шалгалт нь бүтэлгүйтсэн профайлыг л дахин холбоорой. Хоёр секунд нь үхсэн замыг удаан замаас ялгадаг бөгөөд TCP шалгалт зам дагуу ICMP зөвшөөрөгдсөн эсэхээс хамаарахгүй. Профайлуудын хооронд зөвхөн зорилго болон тохиргооны нэрийг сольж байгаарай:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiҮүнийг /usr/local/bin/ensure-vpn-ops.sh болгон хадгалж, гүйцэтгэх боломжтой болгож, шалгалтын зорилго болон тохиргооны нэрийг л өөрчлөн профайл бүрт давтаарай. Протоколын асуултад хариулдаг шалгалт нь цуурайг хаядаг ч хэрэглэгчдэд чухал үйлчилгээг дамжуулсаар байдаг гарцуудыг даван туулдаг.
Шалгалтуудыг хэзээ ч өрсөлдөхгүйн тулд гинжлээрэй
Багцын дахин холболтын скрипт таны шалгалтуудыг дараалан дуудаж чаддаг бөгөөд дараалал нь бүх асуудал юм. Хамт ажиллаж буй хоёр vpnc-connect дуудлага нь чиглүүлэлтийн хүснэгтийг хэн ч хянадаггүй дарааллаар дахин бичих бөгөөд эрүүл профайл маршрутаа яг ингэж алддаг.
Дуудлагуудыг урд талд байлгаж, доод интерфейст богино тогтворжуулах саатал нэмж, гинжийг root-ийн cron хүснэгтээс төлөвлөөрэй, учир нь туннелийн маршрутыг зөвхөн root дахин бичиж чадна:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shАчаалах скрипт болон cron бичлэгийн хооронд дарааллыг ижил байлгаарай, учир нь ачаалах үед өөр дарааллаар ажилладаг гинж нь үндсэндээ өөр програм юм. Нэг профайл нөгөөгийн маршрутаас хамааралтай бол хамаарлыг эхэнд тавьж, өмнөх туннель мандаж байх хооронд дараагийн шалгалт хор хөнөөлгүйгээр бүтэлгүйтэх болтугай.
Логыг ажиглаад, дараа нь нэгийг санаатайгаар эвдээрэй
Гүйлт бүрт нэг мөр бүртгээрэй: профайл, шалгалтын зорилго, үр дүн, авсан арга хэмжээ. Үгүй бол минут тутам хөдөлдөг туннель хэзээ ч унасангүй туннель шиг харагдана, шалгалтын алдааг гарцын тасалдалаас ялгах боломжгүй. Лог нь гинж зөвхөн бүтэлгүйтсэн профайлд хүрснийг ч баталдаг. Дахин ачаалалтыг даван туулах газарт бичээрэй, эс бөгөөс нотолгоо процессын хамт явна.
Дараа нь туннелийг санаатайгаар эвдээд юу болохыг хараарай. Нэг профайлыг зогсоож, ямар процесс, маршрут үлдсэнийг баталгаажуулаарай:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logЗөвхөн зогсоосон профайл дахин холбогдох ёстой бөгөөд бусад сессүүд процесс болон маршрутаа хоёуланг нь хадгалах ёстой. Хоёр профайл дахин эхэлбэл таны гинж таны хүлээгээгүй газар зэрэгцэн ажиллаж байна.
Хамгаалагч юу хийх ёсгүй вэ
Ямар нэгэн зүйл бүтэлгүйтэх бүрт бүгдийг дахин эхлүүлдэг хамгаалагч туршилтын үед эрүүл харагдаж, засвар үйлчилгээний цонхонд тасалдал үүсгэдэг. Профайлаар дахин эхлүүлээрэй, хэзээ ч глобал байдлаар биш.
Гарц ижил протоколд засвартай клиент санал болговол түүнийг сонгож, скриптэд нууц үгийг хэзээ ч хатуу бичихгүй, тушаалын мөрөнд дамжуулахгүй байгаарай, учир нь профайл файл нууцыг аль хэдийн хадгалдаг. Туннель мандсаны дараа ажил энгийн хэрэглэгчээр ажиллах ёстой бол бүх гинжийг тэр бүртгэлээр ажиллуулахын оронд скриптийн дотроос эрхийг бууруулаарай. Эцэст нь, дахин холбогдсоны дараа маршрутуудыг дахин уншаарай, учир нь профайл өөр оноосон хаягтай буцаж ирж, туннелийн хаяг руу чиглэсэн ямар ч шалгалт анзаарахгүй хуучин маршрут үлдээж болно.