Нэг OpenVPN хэрэглэгч SSH-ээр нөгөөд нь сангийг нээхгүйгээр хүрэх боломж олгох
client-to-client-ийг унтраалттай орхиж, цөмд нэг урсгалыг дамжуулахыг зөвшөөрч, сангийн бусад хэсгийг хаалттай орхи. Сервер дээр хоёр дүрэм, очих газар дээр нэг дүрэм.
Нэг хэрэглэгч нөгөө хэрэглэгчийн SSH үйлчилгээнд хүрэх шаардлагатай бөгөөд сангийн бусад хэсэг өнөөдрийнх шиг тусгаарлагдсан хэвээр байх ёстой. Сонирхол татдаг шилжүүлэгч нь client-to-client бөгөөд энэ нь тэгш хэрэглэгчдийн хоорондын хандалтыг бүгдэд нэгэн зэрэг нээж, шийдвэрийг цөмийн оронд OpenVPN-д өгдөг. Илүү нарийн хариулт нь энэ шилжүүлэгчийг унтраалттай байлгаж, серверийн өөрийн чиглүүлэлт болон галт ханыг яг нэг урсгал дамжуулахыг зөвшөөрдөг.
Механизм нь дүрмийн текстээс илүү чухал, учир нь хоёр арга багцыг өөр өөр газарт байрлуулдаг. Аль нэгийг сонгосноо мэдэх нь юу ч хийдэггүй мэт санагдах дүрэм болон түүнгүйгээр холбогддог тэгш хэрэглэгчийг хоёуланг нь тайлбарладаг.
client-to-client багцыг хааша зөөдөг
client-to-client асаалттай үед сервер тэгш хэрэглэгчийн багцыг туннелийн төхөөрөмжөөр дахин гаргахын оронд дотоодоор дамжуулдаг тул багц цөмийн дамжуулах замд хэзээ ч хүрдэггүй. Энэ нь тохиромжтой бөгөөд галт хана тань хянах ёстой урсгалыг хэзээ ч хардаггүй гэсэн үг юм. Сонголтыг унтраалттай орхиход сервер багцыг мөн адил интерфейсээр дахин гадагш чиглүүлэх бөгөөд энэ нь түүнийг netfilter-ийн өмнө тавьдаг. Ижил интерфейс орж, ижил гарч, FORWARD хэлхээ нь дуу хоолойтой байдаг.
Солилцоо тодорхой: нэг бодлогын цэг олж, богино зам таны өмнөөс хийж байсан чиглүүлэлт болон дамжуулалтыг өөр дээрээ авна. Энэ ажил нэг урсгалд бага бөгөөд нэмсэн алдаа бүртэй өсдөг. Алдаануудыг одоо тоол, учир нь тэгш хэрэглэгчдийн хоорондын бодлого үнэндээ дүрмийн багцад амьдардаг.
Тэгш хэрэглэгчийн багц үнэндээ явдаг зам
Linux Community OpenVPN 2.6 үйлчилгээ, DCO-ийн оронд хэрэглэгчийн орон зайд TUN боловсруулалт, subnet топологи, tun0 болон A хэрэглэгч 10.44.0.21 дээр, B хэрэглэгч 10.44.0.37 дээр байгаа 10.44.0.0/24 сан гэж үзье. Subnet топологид A-гийн авсан хаяг болон маск санг аль хэдийн бүрхдэг тул A багцыг нэмэлт түлхэгдсэн маршрутгүйгээр туннелийн төхөөрөмж рүү илгээдэг. A дээрх бодит маршрутыг таамаглахын оронд шалга.
Сервер дээр багц B-д хаягласан ирдэг бөгөөд энэ нь локал хаяг биш тул дамжуулагдана. Энэ нь огт болохын тулд IPv4 дамжуулалт асаалттай байх ёстой бөгөөд маршрутын хайлт багцыг tun0-ээр дахин гадагш илгээх ёстой. Тиймээс галт хана хоёр талд ижил интерфейстэй дамжуулагдсан урсгалыг хардаг бөгөөд энэ нь ихэнх дүрмийн багц алддаг нарийн ширийн зүйл юм. Энд эх сурвалжийн орчуулга шаардлагагүй бөгөөд A-гийн хаягийг бүрэн бүтэн байлгах нь B-д өөрийн эх сурвалжид суурилсан дүрмийг хэрэглэх боломж олгодог.
Сервер дээр хоёр дүрэм, энэ дарааллаар
Гурван дүрэм бүх зөвшөөрлийг даадаг: дамжуулалт, хосын үл хамаарах байдал болон туннелийн хосын анхдагч хаялт. Хүлээн авах дүрэм хос болон үйлчилгээг нэрлэдэг тул зөвшөөрөл өсөж буй санд тэсдэг. Үүнийг туннель-туннель хөдөлгөөний аливаа ерөнхий хоригоос өмнө тавь, учир нь эхний тохирол ялдаг:
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROPЭдгээр команд нь жишээ бөгөөд таны хост дүрмийг хадгалахад ашигладаг механизмд хамаарна; ажиллах үеийн оруулга дараагийн ачаалалтад алга болдог. Төлөвтэй дүрэм нь B-гийн хариулт болон TCP гар барилтыг хоёр дахь, толин тусгал хүлээн авалтгүйгээр буцаах боломж олгодог.
Дараа нь дүрмийн жагсаалтыг биш, тоолууруудыг шалга, учир нь хэзээ ч тохирохгүй дүрэм ажиллаж байгаатай адил харагддаг. Хэрэв тоолуур тэг дээр үлдвэл багц таны бодож байгаа замаар явахгүй байна.
B-д хараахан юуг зөвшөөрөх ёстой вэ
SSH үйлчилгээг B ажиллуулдаг тул туннелийн хаяг дээр ямар нэгэн зүйл сонсож байгаа эсэх, өөрийн хостын галт хана эх сурвалжийг хүлээж авах эсэхийг B шийддэг. Сервер дээрх сүлжээний зөвшөөрөл нь B дээрх ямар ч бүртгэлд зөвшөөрөл болохгүй бөгөөд хостын түлхүүрийн баталгаажуулалт болон хэрэглэгчийн таних баталгаажуулалт бусад газраас ирсэнтэй адил хүчинтэй хэвээр байна.
Эхлээд эерэг тохиолдлыг туршаад үз: A-аас B-гийн туннелийн хаяг руу шинэ SSH холболт, хүлээгдэж буй хостын түлхүүрээр хүлээн авагдсан. Дараа нь өөр тэгш хэрэглэгч эсвэл өөр портыг туршаад татгалзаж байгааг батал, учир нь чимээгүйгээр бүгдийг зөвшөөрдөг зөвшөөрөл нь чухал болох хүртэл ажилладаг зөвшөөрлөөс ялгагдахгүй. Тэр туршилтын хоёр хагас нь шаардлагатай бөгөөд хоёр дахь нь хүмүүсийн алгасдаг хагас юм.
Олгогдсон хаягууд, хоёр хэрэглэгч дээрх бодит маршрутууд болон сервер болон B дээрх яг дүрмүүдийг бич. Гарц руу амжилттай ping эсвэл сервер дээрх нээлттэй порт эдгээрийн аль нэгийг ч нотлохгүй, учир нь тэгш хэрэглэгчдийн хоорондын дамжуулалт хараахан хаалттай байхад хоёулаа үнэн байж болно. Эдгээр тоог туннель босоо байхад бич, учир нь хэрэглэгч дахин холбогдсоны дараа авдаг хаяг өөр байж болно.