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

LAN хаяг дээр юу ч хариулахгүй байгаа шалтгаан

Нэрийн орон зай бол бүрэн сүлжээний стек: интерфейс, маршрут, галт ханын дүрэм, хувийн loopback. ip netns exec-ээр эхлүүлсэн процесс зөвхөн тэр стекийг хардаг тул холбогдсон хаяг нь зөвхөн нэрийн орон зайн дотор шийдэгддэг. Хостын өөрийн 127.0.0.1 нь огт өөр loopback юм.

Тиймээс хост дээр curl амжилтгүй болох бөгөөд нэрийн орон зайн дотор мөн тэр команд амжилттай болдог. Апп эрүүл; хаяг нь хостын стек дотор байхгүй, тэгээд л болоо.

socat үсрэлтээр нэг портыг нийтлэх

socat хоёр стекийг хэрэглэгчийн орон зайд холбодог бөгөөд нэг TCP порт дамжих шаардлагатай үед энэ хангалттай. Хостын тал LAN дээр сонсож, хүлээн авсан холболт бүрд нэрийн орон зайн дотор аппын loopback руу холбогддог хоёр дахь socat-ыг эхлүүлдэг. Дотоод процесс апп руу яг локал клиент шиг хүрдэг. Нэрийн орон зайн маршрутжуулалтад юу ч өөрчлөгдөхгүй тул апп туннелийг цорын ганц гарах зам болгон ашигласаар байна.

socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork

Гаднах процесс root эсвэл нэрийн орон зайд орох чадвар шаарддаг. VPN унавал апп замаа алдаж, нийтэлсэн порт хаалттайгаар бүтэлгүйтнэ, шоронгоос хүлээх ёстой зан төлөв нь энэ.

Нэгээс олон порт дамжих үед veth хос ашиглах

Хэд хэдэн порт эсвэл протокол дамжих шаардлагатай бол, эсвэл бусад хост холболт эхлүүлэх шаардлагатай бол veth хос нь зөв хариулт. Нэг үзүүр хост дотор үлдэж, нөгөө нь нэрийн орон зайд шилжинэ, жижиг /30 хоёр талд тогтвортой хаяг өгнө. Дараа нь хостын маршрут нэрийн орон зайн хаягийг хосоор дамжуулан илгээнэ.

ip link add veth0 type veth peer name veth1
ip link set veth1 netns vpn
ip addr add 10.77.0.1/30 dev veth0
ip link set veth0 up
ip netns exec vpn ip addr add 10.77.0.2/30 dev veth1
ip netns exec vpn ip link set veth1 up

Шоронг эвдэх санаа байхгүй бол хост дамжуулан анхдагч маршрут нэмэх хэрэггүй. Туннель гарах зам хэвээр байх ёстой тул хосоор зөвхөн нийтэлсэн үйлчилгээний хаягт хүрэх боломжтой. Нэрийн орон зайд өөрийн resolver файлыг ч өгөөрэй, учир нь ip netns exec нь /etc/netns/vpn/resolv.conf файлыг уншдаг бөгөөд үүнгүйгээр шорон доторх нэрийн шийдэл хоосон байна.

Хост биш, өөр машин дээрээс туршина уу

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

ip netns exec vpn ss -lntp

Хостоос холболт ажиллаж, LAN-аас ажиллахгүй бол дутуу хэсэг нь холболтын хаяг биш, үсрэлт эсвэл маршрут юм. Ажиллаж буй tun төхөөрөмжийг дотогш зөөхийн оронд нэрийн орон зайн дотор OpenVPN-ыг эхлүүлээрэй, учир нь интерфейсийг зөөх нь түүнийг унтрааж, дараа нь гаднаас засах боломжгүй маршрутуудыг устгаж болно. Сэргээх командуудыг шорон дотор биш, консол дээр барь.

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