Ижил серверийн IP, хоёр зам: OpenVPN-ий гадаад урсгалыг тэмдэглэх
VPN серверийг чөлөөлдөг хост маршрут түүн рүү хийх HTTPS-ийг ч чөлөөлдөг. Үүний оронд шифрлэсэн бүрхүүлийг тэмдэглээд, дараа нь тэмдэглээгүй трафикт туннелийг өгнө үү.
Ердийн давталтын хамгаалалт бол хост маршрут: VPN серверийн нийтийн хаяг руу трафикийг uplink-ээр илгээж, шифрлэсэн сесс өөрийн туннельд хэзээ ч орохгүй болгоно. Энэ нь мөн тэр сервер дээрх вэб үйлчилгээг туннелээр хүрэхийг хүссэн хүртэл ажиллана, учир нь үл хамаарах зүйл очих газраас хамаардаг бөгөөд очих газар нь ижил байна. Гарах зам нь очих газраар ангилахаа болиод пакетыг аль сокет илгээсэнээр ангилж эхлэх юм.
Тусгаарлахыг хүссэн хоёр урсгалаас эхэл
Нэг урсгал бол шифрлэсэн OpenVPN тээвэр өөрөө бөгөөд uplink-ээр гарах ёстой, эс бөгөөс туннель өөрийн гадаад холболтыг зөөнө. Нөгөө нь мөнөөх нийтийн хаяг руу чиглэсэн энгийн HTTPS хүсэлт бөгөөд түүнийг туннель дотор байлгахыг хүснэ, ингэснээр үйлчилгээнд туннелийн эх сурвалжаас хүрнэ. Ижил очих газар, олон тохиолдолд ижил портын дугаар, өөр шаардлагатай зам.
Энэхүү тоймд 10.90.0.10 дээрх клиентийг tun1-ээр, серверийн нийтийн 198.51.100.25 хаяг, мөн анхдагч маршрут нь ердийн uplink рүү заасан хүрээгүй үндсэн хүснэгтийг тооцъё. Серверийн тал вэб үйлчилгээг дотоод замаар хүлээн авч, трафикийг туннелийн эх сурвалж руу буцаах ёстой; нийтийн хаяг руу пакет илгээх нь серверийн listener эсвэл firewall бодлогыг хүчингүй болгохгүй.
Ямар нэг зүйлийг өөрчлөхөөс өмнө хост-ын одоогийн дүрмийг бичиж аваад, өөр хэн ч ашигладаггүй утгуудыг сонго: тэмдэг, хүснэгтийн дугаар, гурван дүрмийн эрэмбэ. Машин руу энэ холболтоор орохгүй буцах замыг хадгал, учир нь энд гарсан алдаа нь хөтчийн табыг эвдэхээс илүү өөрийн алсын хандалтыг тасална.
Бүрхүүлийг зөөдөг сокетыг тэмдэглэ
Клиентийн тохиргоо шифрлэсэн гарах пакетуудад тэмдэг авч, маршрутыг өөрөө суулгахаа болино, ингэснээр орлуулах бодлого замыг тодорхойлдог цорын ганц зүйл болно:
mark 42
route-noexec
disable-dco
Аравтын 42 бол арван зургаатын 0x2a бөгөөд маршрутын дүрмүүд тааруулах нь яг энэ арван зургаатын хэлбэр юм. link-options-ын лавлагаа нь mark-ыг Linux дээр шифрлэсэн гарах пакетуудад хамаарах зүйл гэж тайлбарладаг бөгөөд энэ нь замыг нь хянах шаардлагатай сокет яг тэр юм. Өгөгдлийн сувгийн разгрузкийг унтраах нь энэ жишээг хэрэглэгчийн орон зайн зам дээр байлгах бөгөөд тэнд тэмдгийн зан төлөв нь тайлбарласан хэлбэрээрээ байна.
route-noexec нь OpenVPN-ийн маршрутыг автоматаар нэмэх, устгах үйлдлийг дардаг. Тэдний оронд юу ч суулгадаггүй тул энэ мөчөөс эхлэн маршрутын эзэн туннельд хэрэгтэй маршрут бүрийг хадгалах ёстой. Хэрэв өөрчлөлтийн дараа хувийн очих газар алга болвол энэ нь дутуу орлуулах бодлого, тэмдгийн гэмтэл биш.
Үүнийг хийж байхдаа 198.51.100.25-ын үндсэн хүснэгтэд хост маршрут бүү хадгал. Ийм маршрут нь төсөл нарийсгахыг оролдож буй яг тэр үл хамаарах зүйлийг дахин оруулж, доорх бодлогын аль нэгийг асуухаас өмнө HTTPS урсгалд ялна.
Бусад бүгдийг туннелийн хүснэгт рүү илгээ
Туннелийн интерфейс үүсч, өөрийн хаягийг барьсны дараа бодлого ингэж харагдана:
ip -4 route add default dev tun1 src 10.90.0.10 table 47100
ip -4 rule add priority 20000 lookup main suppress_prefixlength 0
ip -4 rule add priority 20001 not fwmark 0x2a lookup 47100
ip -4 rule add priority 20002 not fwmark 0x2a unreachable
Эхний дүрэм хостын тодорхой маршрутуудыг харагдахуйц байлгаж, үүний дотор зөвшөөрөгдсөн локал сүлжээг, харин үндсэн хүснэгтийн анхдагч маршрутыг энэ хайлтад үл харагдахуйц болгоно. Энэ ялгаа чухал: анхдагч маршрутыг дарах нь хүснэгтийг үл тоомсорлохтой ижил биш бөгөөд танд одоо ч хэрэгтэй локал үл хамаарах зүйлс яг үүний ачаар хадгалагдана. Тэдгээр үл хамаарах зүйлсийг нэг нэгээр нь унш, үр дүн нь түгээмэл ослын унтраалга гэж битгий бод.
Тэмдэглээгүй трафик дараа нь туннелийн хүснэгтэд унаж, туннелийн эх сурвалжийг авч, VPN-ээр гарна. Тэмдэглэсэн трафик дараагийн хоёр дүрэм дээр fwmark шалгалтад унаж, жагсаалтын доогуур байгаа ердийн үндсэн хайлт руу үргэлжилнэ, тэнд uplink-ийн анхдагч маршрут одоо ч байна. Эцсийн unreachable дүрэм нь туннелийн маршрут дутагдсан үед тэмдэглээгүй урсгал uplink руу чимээгүй буцаж унахаас сэргийлдэг зүйл юм. Сонгогч нь эхнээс эцэс хүртэл тэмдэг бөгөөд очих газрын хаяг шийдвэрт хэзээ ч ордоггүй.
Тэр хамгаалалтыг дахин холбогдолын хооронд байранд нь барьж, бодлогын үлдсэн хэсэгтэй хамт суулга, гараар биш. Интерфейстэй хамт алга болдог дүрэм бол бодлого биш, тохиолдол юм. Туннель унах үед бодлогыг устгах нь алдааны горимыг «блоклогдсон»-оос «алдагдсан» болгож өөрчилдөг бөгөөд дараа нь хугацаа нь дуусах хуучирсан туннелийн маршрутыг тайлбарлах нь буруу интерфейсээр гарсан трафикийг тайлбарлахаас хамаагүй хялбар.
Буцах зам мөнөөх тэмдгийг харцгаа
Гарах тэмдгүүд нь механизмын хагас нь бөгөөд энэ бол ихэнх дахин бүтээл орхидог хэсэг юм. Шифрлэсэн сесс рүү чиглэсэн хариултууд uplink-ээр ирж, буцах замын баталгаажуулалтад ордог бөгөөд эх сурвалж ирсэн замаараа буцаж маршрутлагдах эсэхийг асуудаг. Тусламжгүйгээр тэр хайлт таны тэмдэглээгүй туннелийн бодлогыг хэрэглэж, пакет буруу интерфейс дээр байна гэж дүгнэдэг.
Засвар нь firewall-ийн эзэнд хамаарна: тэмдгийг гарах холболт дээр хадгалж, тохирох ирж буй пакетуудад сэргээж, холбогдох замын хувьд эх сурвалжаар баталгаажсан тэмдэг боловсруулалтыг идэвхжүүл. OpenVPN сокет тэмдэг тавих нь эдгээр гурвын алийг ч хийдэггүй бөгөөд зөвхөн клиентийн сонголтуудыг жагсаасан жор дутуу юм. Тэр интеграцийг бичгээр хүс, учир нь энэ нь төслийн хамгийн үл харагдах хэсэг бөгөөд дахин бүтээхэд хамгийн амархан алдагддаг хэсэг юм.
Буцах замын сул шалгалт ч орлуулагч биш. Сул горим эх сурвалжид ямар нэг маршрут байхыг шаарддаг хэвээр бөгөөд таны нэмсэн unreachable хамгаалалт тэмдэглээгүй хайлтад зориудыг нэгийг арилгадаг. Энэ төсөлд найдахаасаа өмнө холболтын тэмдгийн интеграцийг дуусгаж, хянаж, хост шүүлтүүрийг тусдаа асуудал гэж үз: тэмдэг бол маршрутын дохио, зөвшөөрөл биш. Интеграци байхгүй бол шинж тэмдэг нь холбогдож, хариултууд ирж эхлэнгүүт чимээгүй болдог сесс юм.
Үүнийг хоёр маршрутын хайлтаар нотол
Цөм хоёр контекстэд юу шийдэхийг харьцуулж, гарах төлөв биш dev ба src талбарыг унш:
ip -4 route get 198.51.100.25
ip -4 route get 198.51.100.25 mark 0x2a
Эхний хайлт туннелийн эх сурвалжтай tun1 рүү, хоёр дахь нь uplink рүү шийдэгдэх ёстой. Эдгээр нь синтетик хайлт тул бодлогыг нотолдог, ажиллаж буй процессыг биш: ажиллаж буй клиентийн бодит тээврийн замыг тусад нь баталж, дараа нь сертификатын шалгалт асаалттай бодит HTTPS хүсэлт гарга.
Бэлэн гэж зарлахаасаа өмнө төсөл юуг хамардаггүйг бичиж үлдээ. DNS, IPv6 болон дүрмүүдийн амьдралын мөчлөг тус бүр өөрийн шийдвэрийг шаарддаг бөгөөд энэ нь IPv4 маршрутын жишээ, бүрэн нууцлалын тохиргоо биш. Үүний үнэ цэнэ нь сонгогч: бүрхүүл uplink-ийн үл хамаарах зүйлийг авдаг бөгөөд мөнөөх хаяг дээрх энгийн үйлчилгээ үүнийг өвлөх шаардлагагүй.