Таны OpenVPN сервер дээр нэг хэрэглэгч LAN-ийн хандалтаа алдах ёстой бөгөөд бусад бүх туннель ажиллаж байх ёстой. Үүнийг хайвал хамгийн сайн хариулт ихэвчлэн демон үүнийг чадахгүй гэж хэлдэг бөгөөд энэ нь зөвхөн хагас үнэн: OpenVPN-д хэрэглэгч тус бүрийн галт хана байхгүй, гэхдээ туннелийг дуусгадаг хост пакетуудыг аль хэдийн шүүж байдаг. Чухал хоёр шийдвэр бол таны хааж буй хэн болох ба дүрмийн байрлал юм. Эдгээрийг зөв хийвэл өөрчлөлт нь туршиж, устгаж болох нэг мөр болно.

Дүрэм бичихээс өмнө хэрэглэгчийг бэхлээрэй

OpenVPN туннелийн хаягуудыг сангаас түрээслүүлдэг тул 10.8.0.6 нь хүн биш, суудал юм. Сесс дуусахад түрээс буцаж ирэх ба дараагийн холболтод өгч болно, энэ нь тухайн хаягийн эсрэг бичсэн дүрэм суудлыг дагадаг, хэрэглэгчийг биш гэсэн үг. Тиймээс эхлээд та юу хаах гэж байгаагаа шийдээрэй: богино туршилтын хаяг уу, эсвэл гадаа байлгах хүний сертификат уу.

Хаягийг сертификаттай холбохын тулд client-config-dir-ээр нэрлэсэн хавтаст файл үүсгэж, файлд сертификатын common name-г яг таг өгнө үү. Дотор нь нэг заавар бичнэ үү, ifconfig-push 10.8.0.6 255.255.255.0, тэгвэл тэр хэрэглэгч дахин холбогдоход ч ижил туннелийн хаягийг хадгална. Үүнийг хүчин төгөлдөр болгоход хоёр тохиргоо байх ёстой: client-config-dir серверийн тохиргоонд зарлагдсан байх, мөн илгээсэн хаяг сервер чиглүүлж чадах дэд сүлжээнд байх ёстой. Нэг нь дутуу бол файлыг алдаагүйгээр үл тоомсорлож, дараагийн галт хананы туршилтыг төөрөгдүүлнэ.

Түр хаалт нь сангийн хаяг ашиглаж болно, зөвхөн тасалбарт тухайн үед аль сесс түүнийг эзэмшиж байсныг тэмдэглэсэн бол.

Хаях үйлдэл ажиллах эсэхийг дараалал шийднэ

Туннель ба LAN-ийн хооронд дамжуулдаг Linux гарц дээр пакетууд FORWARD гинжийг дайрна. Доорх командыг өгүүлбэр мэт уншина уу: FORWARD-ийн эхэнд оруулж, tun0-ээс орж ирэх, зөвхөн тэр нэг хостод хамаарах, LAN дэд сүлжээ рүү чиглэсэн урсгалыг тааруулж, хая.

iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP

-I нь дүрмийг ажиллуулдаг. -A-аар нэмбэл туннелийн дэд сүлжээнд зориулсан аливаа өргөн зөвшөөрлийн доор орж, хэзээ ч пакет харахгүй. Байрлалыг iptables -vnL FORWARD --line-numbers-ээр шалгаж, тоолуурыг ч уншина уу: дээрх хаялт юу ч тоолохгүй бол урсгал өөр замаар ирж байна.

Гарцын өөрийн LAN хаяг нь өөр зам юм. Хайрцаг руу өөрт нь илгээсэн пакетууд INPUT руу явдаг, FORWARD руу биш, тиймээс хэрэглэгч LAN хост алдаж, гэхдээ чиглүүлэгчийн админ хуудсыг нээж чадна. Энэ чухал үед тохирох INPUT дүрмийг нэмнэ үү.

Шүүлтүүрийн харж чадахгүй зүйл

Шүүлт нь пакетыг үнэлэх үед явагддаг тул тогтоогдсон TCP сесс хаагдах эсвэл дахин тохируулагдах хүртэл үргэлжилж болно. Хаалт тэр даруй үйлчлэх ёстой бол дүрэм орсны дараа тухайн эх үүсвэрийн хянагдсан урсгалыг conntrack -D -s 10.8.0.6-ээр цэвэрлэнэ үү. Хэдэн секундын давхцал хүлээн зөвшөөрөгдөх бол тэр сонголтыг далд орхихын оронд бичиж тэмдэглээрэй. Ямар ч тохиолдолд дараагийн хүн энэ дүрэм амьд урсгалыг зогсоох уу, эсвэл зөвхөн шинэ холболтыг хаах уу гэдгийг мэдэх ёстой.

Хосуудын хоорондын урсгал хостын галт ханыг хэзээ ч хүрэхгүй. client-to-client идэвхтэй үед OpenVPN тэдгээр пакетыг демоны дотор дамжуулдаг тул FORWARD ч, INPUT ч тэднийг хардаггүй. Цорын ганц шийдэл нь client-to-client-ийг унтраах эсвэл хосууд бие биедээ хүрч чадна гэдгийг хүлээн зөвшөөрөх; iptables дүрэм тэр урсгалыг харахгүй.

IPv6, firmware болон дахин ачаалсны дараах тогтвортой байдал

IPv4 дүрэм IPv6-ийн талаар юу ч хэлэхгүй. Туннель ба LAN хоёр гэр бүлийг зөөвөрлөж байгаа бол тэнцүү дүрэм ip6tables дотор, эсвэл тухайн хост дээр бодлого эзэмшдэг nftables дүрмийн багцад байх ёстой. Чиглүүлэгчийн firmware нь netfilter-ийг ихэвчлэн өөрийн хийсвэрлэлийн ард нуудаг тул форумаас хуулсан синтакс болон хүснэгтийн нэрс хамаарахгүй байж болно.

OpenWrt дээр баримтжуулсан зам нь галт хананы тохиргооны бичлэг бөгөөд гараар бичсэн iptables мөр биш, гараар бичсэн мөр галт хана дахин ачаалагдах үед алга болж болно. Бусад түгээлтүүд дүрмийг netfilter-persistent, ачаалах нэгж эсвэл нийлүүлэгчийн сангаар сэргээдэг бөгөөд эдгээр механизмууд хоорондоо солигддоггүй. Сонгосон аргаа дахин ачааллаар батал, учир нь дахин ачаалах нь өөр замыг дасгалжуулдаг.

Зам тус бүрээр шалгаад, дараа нь цэвэрхэн буцаа

Зам бүрийг тус тусад нь турш, учир нь нэг амжилттай шалгалт бусдыг нуудаг. Хаагдсан хэрэглэгч туннелээр интернетэд хүрэх ёстой боловч LAN хостод бүтэлгүйтэх ёстой, хоёр дахь хэрэглэгч мөн тэр хостод хүрэх ёстой, гарцын хаяг болон хосын зам тус бүр өөрийн ажиглалт хэрэгтэй. Үр дүнг дүрмийн хажууд бичээрэй, дараагийн өөрчлөлтөд суурь болно. Доорх хүснэгт нь тасалбарт үлдээх үнэ цэнэтэй багц юм.

ЗамДүрэмтэй хүлээгдэхБүтэлгүйтэх үед
Хаагдсан хэрэглэгчээс LAN хост рууХариу байхгүйДүрэм зөвшөөрлийн доор байна, эсвэл эх үүсвэр тохирохгүй
Хаагдсан хэрэглэгчээс интернет рүүtun0-ээр ажилладагДүрэм хэт өргөн, очих газар тохирохгүй
Хоёр дахь хэрэглэгч ижил LAN хост рууАжилладагДүрэм зорьсон хостоос илүүд тохирсон
Хаагдсан хэрэглэгчээс гарцын LAN хаяг рууЗөвхөн тохирох INPUT дүрэмтэй хаагданаINPUT дүрэм байхгүй
Хаагдсан хэрэглэгчээс хосын туннелийн хаяг рууОдоо ч ажилладагclient-to-client идэвхтэй бөгөөд галт хананы хүрээнээс гадуур

Буцаах нь тодорхойлолтоор устгах бөгөөд flush биш: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP яг тэр бичлэгийг устгаж, гинжийн үлдсэнийг хөндөхгүй үлдээнэ. Ачаалах үед дүрмийг сэргээдэг аль ч файлаас мөн тэр мөрийг устгаж, дахин ачаалж, хэрэглэгч LAN хостод дахин хүрч байгааг батал. FORWARD-ийг flush хийвэл таны бичээгүй дүрмүүд ч хүчингүй болж, буцаалт хоёр дахь осол болно.

Тасалбарыг хаахаас өмнө гурван зүйлийг батал: бэхэлсэн хаяг сертификаттай тохирч байна, дүрэм зөвшөөрлүүдийн дээр байна ба тоолуур тэг биш, мөн тэсвэрлэх файлд таны туршсан ижил дүрэм байна. Эдгээрийн аль нэг нь дутуу бол хаалт нь shell сессийн хуурамч дүрс юм.

Холбоотой нийтлэлүүд