Shërbimi juaj punon në makinë, tuneli është ngritur, dhe megjithatë shfletuesi në tavolinën tuaj ende pret një përgjigje. Asgjë nuk është prishur në kuptimin e zakonshëm: aplikacioni dëgjon brenda një hapësire emrash rrjeti, dhe ai stiv është i padukshëm për LAN-in. Loopback-u i tij i përket hapësirës së emrave, kështu që një klient në një makinë tjetër nuk ka asnjë adresë që arrin portin. Një kërcim i qëllimshëm, ose një çift veth, e rregullon këtë pa lëvizur pjesën tjetër të hostit.

Pse asgjë nuk përgjigjet në adresën e LAN-it

Një hapësirë emrash është një stiv i plotë rrjeti: ndërfaqe, rrugë, rregulla të murit të zjarrit dhe një loopback privat. Një proces i nisur përmes ip netns exec sheh vetëm atë stiv dhe asgjë tjetër, kështu që adresa ku lidhet zgjidhet vetëm brenda hapësirës së emrave. 127.0.0.1 e vetë hostit është një loopback krejt tjetër.

Prandaj curl në host dështon, ndërsa e njëjta komandë brenda hapësirës së emrave ka sukses. Aplikacioni është i shëndetshëm; adresa thjesht nuk ekziston në stivin e hostit.

Publikoni një port me një kërcim socat

socat u bën urë dy stivëve në hapësirën e përdoruesit, çka mjafton kur duhet të kalojë një port i vetëm TCP. Ana e hostit dëgjon në LAN dhe, për çdo lidhje të pranuar, nis një socat të dytë brenda hapësirës së emrave që lidhet me loopback-un e aplikacionit. Procesi i brendshëm e arrin aplikacionin saktësisht siç do të bënte një klient lokal. Asgjë në rrugëzimin e hapësirës së emrave nuk ndryshon, kështu që aplikacioni vazhdon të përdorë tunelin si daljen e tij të vetme.

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

Procesi i jashtëm ka nevojë për root ose për aftësinë për të hyrë në hapësirën e emrave. Nëse VPN bie, aplikacioni humbet rrugën dhe porti i publikuar dështon i mbyllur, dhe ky është sjellja që dëshironi nga një burg.

Përdorni një çift veth kur kalon më shumë se një port

Një çift veth është përgjigjja e saktë kur duhet të kalojnë disa porta ose protokolle, ose kur hoste të tjerë duhet të nisin lidhje. Njëri skaj mbetet në host, tjetri kalon në hapësirën e emrave, dhe një /30 i vogël u jep të dyja palëve një adresë të qëndrueshme. Pastaj një rrugë hosti dërgon adresën e hapësirës së emrave përmes çiftit.

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

Mos shtoni një rrugë të parazgjedhur përmes hostit, përveç nëse keni ndërmend të thyeni burgun. Tuneli duhet të mbetet dalja, kështu që përmes çiftit arrihet vetëm adresa e shërbimit të publikuar. Jepini hapësirës së emrave edhe skedarin e vet të zgjidhjes, sepse ip netns exec lexon /etc/netns/vpn/resolv.conf dhe pa të zgjidhja e emrave brenda burgut është bosh.

Testojeni nga një makinë tjetër, jo nga hosti

Kryeni provën nga një makinë e dytë, sepse hosti mund të arrijë një dëgjues lokal nëpër rrugë që nuk thonë asgjë për LAN-in. Së pari kontrolloni me çfarë aplikacioni u lidh vërtet brenda hapësirës së emrave, pastaj lidhuni nga jashtë me adresën e publikuar. Lidhja me çdo adresë atje nuk e zgjeron burgun, sepse wildcard-i ende i përket hapësirës së emrave dhe LAN-i nuk mund ta shohë.

ip netns exec vpn ss -lntp

Nëse lidhja nga hosti funksionon dhe ajo nga LAN-i jo, pjesa që mungon është kërcimi ose rruga, jo adresa e lidhjes. Nisni OpenVPN brenda hapësirës së emrave në vend që të zhvendosni atje një pajisje tun aktive, sepse zhvendosja e ndërfaqes e fik atë dhe mund të fshijë rrugë që më pas nuk mund t'i riparoni nga jashtë. Mbani komandat e rikuperimit në konsolë, jo brenda burgut.

Artikuj të ngjashëm