IPsec доторх IPsec: гадаад туннель ямар хаягуудыг зөөх ёстой
Гадаад туннельд дотоод гарцуудын хаягыг өг, програмын дэд сүлжээг биш. Дараа нь үүнийг оруулгат гэж нэрлэхийн өмнө давхарга бүр дээр дамжуулалт, орчуулга, MTU-г батал.
Оруулгат IPsec-ийн талаар бодох нь хоёр давхарга өөр машинд дуусах үед хялбар байдаг. Дөрвөн гарц, хоёр туннель, дизайн ажиллах эсэхийг шийдэх нэг асуулт: дотоод туннель багцтайгаа дууссаны дараа гадаад туннель үнэхээр юу хардаг вэ? Түүнд хариулбал селекторууд, маршрутууд болон алдааг олж засах дараалал өөрөө ирнэ. Алдвал техникийн хувьд өргөгдсөн туннелийг засахад нэг өдөр зарцуулна.
Дөрвөн гарцын загвар
Гадаад A ба B гарцууд хоёр талбайн хооронд эхний туннелийг барьдаг. A-гийн ард дамжуулалтын хаягтай 10.60.0.2 дотоод C гарц, B-гийн ард дамжуулалтын хаягтай 10.70.0.2 дотоод D гарц байрладаг. Програмын сүлжээнүүд C ба D-гийн ард амьдардаг бөгөөд жишээн дэх хаяг бүр санаатайгаар давхцахгүй.
application net -> C -> A == outer IPsec == B -> D -> application net
\---------- inner IPsec ----------/
C transit: 10.60.0.2 D transit: 10.70.0.2
A and B: underlay addresses only
Давхаргуудыг дөрвөн хостод хуваах нь машин бүр нэг хил хязгаарыг хэрэгжүүлдэг гэсэн үг. Хоёр давхаргыг нэг хост дээр ажиллуулах үед нэг машин дээр хоёр багц бодлого, хоёр маршрутын хүснэгт, хоёр эвдрэлийн горимыг зохицуулах шаардлагатай бөгөөд энэ нь боломжтой боловч ажиглахад хамаагүй хэцүү.
Давхарга бүр зөвхөн өөрийн хамгаалалтыг арилгана
C нь D-д зориулж програмын багцыг шифрлэдэг. Үр дүн нь C-ээс D рүү хаяглагдаж, яг тэр нь A-д хүрдэг. Дараах бүхэн тэр дахин бичилтээс хамаарна.
A үүнийг B-д зориулж дахин шифрлэдэг. B нь гадаад давхаргыг тайлж, C-ээс D рүү багц харж, түүнийг шифрлэгдсэн хэвээр нь дамжуулна. D нь дотоод хамгаалалтыг арилгаж, програмын багцыг хүргэдэг.
Тиймээс A ба B нь дотоод төгсгөлийн цэгүүд болон тэдгээрийн мета өгөгдлийг хардаг боловч програмын ачааллыг тайлдаг тал нь биш. Энэ нь дизайны бодит шинж чанар бөгөөд C, D эсвэл програмын хостнууд итгэмжлэгдсэн гэсэн мэдэгдэл биш.
Гадаад селекторууд дотоод гарцуудыг нэрлэдэг
Энд ийм бүтээцийн ихэнх нь бүтэлгүйтдэг. Бодлогод суурилсан гадаад туннелийн хувьд таны тохиролцох селекторууд A ба B үнэхээр ажилладаг хаягуудыг агуулсан байх ёстой: 10.60.0.2/32 ба 10.70.0.2/32, зөв орон нутгийн болон алсын дарааллаар.
Эцсийн програмын дэд сүлжээг гадаад селекторуудад тавих нь ажиллахгүй, учир нь багц A-д хүрэхэд дотоод инкапсуляци A-гийн хамгаалах ёстой зүйлийг аль хэдийн дахин бичсэн байна. Тэгвэл гадаад бодлого юутай ч таарахгүй, туннель өгөгдөл зөөхгүйгээр өргөгдөнө.
Гадаад зөвшөөрлийг UDP 500 хүртэл нарийсгах хэрэггүй. Дотоод холболт өөрийн өгөгдлийн замтай бөгөөд тохиролцсоны дагуу ESP эсвэл UDP инкапсуляци ашигладаг тул гадаад бодлого тэр протоколыг зөвшөөрөх ёстой.
Гарц бүр дээр swanctl --list-sas ашиглан үр дүнг шалгаж, хүүхэд аюулгүй байдлын холбоо таны зорьсон хаягуудыг мэдээлж байгаа, таамагласан хаягуудыг биш гэдгийг батал. Хэрэв жагсаалт програмын дэд сүлжээг харуулж байвал гадаад бодлого буруу давхаргад зориулж бичигдсэн байна. Маршрутжуулалтыг засахаас өмнө селекторуудыг зас, учир нь маршрутжуулалт зөв харагдана, тоолуурууд хөдлөхгүй.
Дамжуулалт ба рекурсийн урхи
Селекторууд маршрутжуулалтыг орлохгүй. A ба B нь C ба D-гийн хооронд хөдөлгөөнийг хоёр чиглэлд дамжуулах ёстой, өөрөөр хэлбэл IP дамжуулалт идэвхтэй, туннель рүү чиглэсэн маршрутууд, нөгөө талд байгаа буцах зам.
Хэрэв гадаад туннель XFRM интерфейс ашигладаг бол маршрутууд интерфейсийг сонгодог бол тохиролцсон бодлогууд түүний зөөж буй зүйлийг хязгаарлас хэвээр байна. Интерфейс хамгаалагдсан хүрээг тэлэхгүй; зөвхөн цөм багцыг хэрхэн авч байгааг өөрчилдөг.
Урхи нь рекурси юм. A-гийн B-гийн гадаад төгсгөлийн цэг рүү хүрэх маршрут нь A барьж буй туннель биш, доод сүлжээг дагах ёстой, эс бөгөөс инкапсуляци өөрийн дотор аялахыг оролдож, холболт хэзээ ч дуусахгүй.
Давхарга нэмэхийн өмнө орчуулгыг шалга
Өөр зүйлийг тохируулахын өмнө A ба B дээрх аливаа эх NAT-ыг хар. IPsec бодлого хэрэгжихээс өмнө C-гийн хаягыг дахин бичдэг дүрэм тохиролцсон селекторуудыг эвдэж болзошгүй, мөн D нөгөө талд юу хүлээж байгааг өөрчилж болно.
Өргөн маскировка хоёр давхаргатай болсноор илүү аюулгүй болохгүй. Энэ нь алсын тал ямар хаяг хардагийг нуудаг бөгөөд туннель идэвхтэй, програм ажиллахгүй үед яг тэр мэдээлэл хэрэгтэй.
Хэрэв NAT дүрэм үнэхээр шаардлагатай бол тал бүр ямар хаягтай ярьж байна гэж боддогоо бич. Тэр нэг мөр нь туннель эсвэл орчуулга буруутай гэсэн маргааны ихэнхийг шийднэ. Мөн жилийн дараа дүрмийг хасах үед дараагийн инженерт хаана харахыг хэлнэ. Ping эдгээрийн аль нэгийг ч хийхгүй.
fail-closed-ыг баталж, MTU-г шалга
Маршрут алга болох нь өөрөө fail-closed бодлого биш. Өөр хүснэгт, анхдагч маршрут эсвэл бодлогын дүрэм чимээгүй нөөц зам өгч болох бөгөөд үүнийг мэдэх цорын ганц арга бол гадаад туннелийг буулгаж, програмын хөдөлгөөн юу хийж байгааг ажиглах юм. Санамсаргүй илрүүлэхийн оронд цонхонд санаатайгаар хий.
Гурван төлөвийг туршиж үз: гадаад туннель доош, дотоод туннель доош, хоёулаа буцаж ирсний дараах сэргэлт. Гарц бүр дээр бодлогын тоолуур ашигла, учир нь хоёр тогтсон IKE сесс нь удирдлагын хавтгайн хэлэлцээр амжилттай болсныг л батална.
Хоёр инкапсуляцийг хоёуланг нь тооц. Ажиллаж буй IKE нь жижиг багцын үр дүн бөгөөд бүрэн хэмжээтэй програмын багцууд хоёр толгой нэмэгдсэний дараа ч бүтэлгүйтэж болно; тоонууд нийлнэ гэж таамаглахын оронд бодит зам дээр мэдэгдэх ачааллын хэмжээгээр турш. Арифметик хялбар, зам тийм биш.