Бүтэн туннель эсвэл төгсгөлийн цэгийн маршрут: VPN серверийг хүртээмжтэй байлгах
Туннель нь өөрийн орлуулж буй сүлжээгээр явдаг. Хост маршрутын үл хамаарах тохиолдлыг програмын түвшний сокетын тэмдэгтэй харьцуулж, аль нь хэзээ бүтэлгүйтдэгийг мэдээрэй.
Туннелиар дамжуулан анхдагч маршрут нэмбэл туннелийн өөрийн багцууд ч мөн түүнийг дагана. Дараа нь хүснэгтэд өөрийгөө ялдаг дүрэм оршино. Серверт хийх шифрлэгдсэн холболт нь өөрөө тогтоох гэж буй холболтын дотор явж үзнэ.
Энэ давталтыг хоёр механизм сэргийлдэг. Нэг нь маршрутын хүснэгтэд харагдана, нөгөө нь програмын дотор амьдардаг.
Дотоод болон гадаад урсгал нь ялгаатай шийдвэр юм
Програмын багц виртуал интерфэйс рүү орж, инкапсуллагдана. Үр дүн нь серверийн нийтийн хаяг руу хаяглагдсан шинэ багц юм. Тэр багцад физик сүлжээнд маршрут хэрэгтэй, учир нь түүний юу ч туннельд орж болохгүй.
Хоёулаа маршрутын шийдвэр бөгөөд зөвхөн эхнийх нь туннельд хамаарна. Клиент серверийг ч хамарсан анхдагч маршрут суулгахад гадаад багц ч баригдана.
Шинж тэмдгүүд нь агшин зуурын бөгөөд бүрэн. Гар барилт дуусч, дараа нь юу ч урсахгүй, эсвэл маршрут суулгасан тэр мөчид холболт тасарна. Аль ч тохиолдолд keepalive цаашид гарч чадахгүй.
Эхний хувилбар: төгсгөлийн цэгт хост маршрут
Шууд арга нь анхны гарцын дамжуулан серверийн хаягт маршрут нэмдэг. Энэ нь нэг мөр авна. Хүснэгтийг уншсан хэн бүхэнд харагдана. Өөрчлөлтийн бүртгэлд тайлбарлахад ч хялбар.
Түүний сул тал нь доод зам өөрчлөгдөх үед илэрдэг. Хадгалсан маршрут нь хуучин сүлжээний гарц ба интерфэйсийг нэрлэнэ. Wi-Fi солигдсоны дараа тэр гарц байхгүй байж болох бөгөөд маршрут нь үлдэж, зөв харагдана, юу ч хийдэггүй.
# before the tunnel: which path reaches the endpoint?
ip route get 198.51.100.7
# pin it through the current gateway
ip route add 198.51.100.7/32 via 192.168.1.1 dev wlan0
# after the tunnel is up, confirm the pin survived
ip route get 198.51.100.7
Хостын нэр үүнийг хэцүү болгодог. Хэрэв төгсгөлийн цэг нь хэд хэдэн хаяг руу шийдэгддэг нэр бол, үл хамаарах тохиолдол нь бодитоор ашиглагдаж буй хаягийг хамах ёстой. Дараагийн хайлт нь маршрут хэзээ ч хамраагүй зүйлийг буцааж болно.
Хоёр дахь хувилбар: сокетыг хамгаалах
Нөгөө арга нь маршрутын хүснэгтэд хэзээ ч хүрэхгүй. Клиент туннелийг зөөж буй сокетыг тэмдэглэх эсвэл хамгаалдаг тул үйлдлийн систем бодлогын дагуу тэр сокетын урсгалыг туннелиас гадна илгээдэг. Android энэ механизмыг VPN програмуудад шууд өгдөг. Ширээний клиентүүд галт хананы тэмдэг эсвэл төхөөрөмжид холбох дуудлагаар ижил төстэйг хэрэгжүүлдэг.
Давуу тал нь үл хамаарах тохиолдол нь хадгалсан гарцыг биш харин холболтыг дагадаг. Сүлжээний өөрчлөлт доод замыг дахин бичих ба хамгаалагдсан сокет нь хаягт хэзээ ч бэхлэгдээгүй тул түүнтэй хамт шилждэг. Маршрутын хүснэгт цэвэр хэвээр байна.
Үнэ нь харагдах байдал. Маршрутын хүснэгтэд үл хамаарах тохиолдлыг юу ч харуулахгүй тул хост маршрут хайж буй хянагч юу ч олохгүй, дизайныг аюулгүй бус гэж дүгнэж болно. Хамгаалалт нь клиентийн код болон тэр код суулгадаг бодлогын дүрмүүдэд амьдардаг.
Хоёрын хооронд сонгох
Клиент дэмжвэл сокетын түвшний механизмыг сонгоорой, учир нь энэ нь бэхлэгдсэн маршрутыг эвддэг сүлжээний өөрчлөлтийг даван туулдаг. Үл хамаарах тохиолдол бусад хэрэгсэлд харагдах ёстой бол, эсвэл клиент илүү сайн зүйл санал болгохгүй бол хост маршрутыг сонгоорой.
Аль ч механизм серверийн хаяг ер нь хүртээмжтэй байх шаардлагыг арилгахгүй. Хувийн гарц нь нийтийн сонсох хаягтай бөгөөд туннелиас гадна үлдэх ёстой нь яг тэр хаяг юм. Түүний цаанаах дотоод сүлжээнүүд туннель үүссэний дараа л хүртээмжтэй болно.
Юуг ч сонгосон, туннелийг эзэмшдэг бүрэлдэхүүн хэсгийн дэргэд байлгаарай. Гараар нэмсэн тэнүүчлэх хост маршрут дараагийн сүлжээ хүртэл ажиллаад, дараа нь маргаашийн нууцлаг тасалдал болно.