Mae ap y tu mewn i ofod enw VPN yn anghyrraeddadwy o'r LAN
Mae gofod enw rhwydwaith yn rhoi tunel a loopback ei hun i un rhaglen. Cyhoeddwch ei borth yn unig gyda naid socat neu bâr veth yn lle'r gwesteiwr.
Mae eich gwasanaeth yn gweithio ar y blwch, mae'r tunel i fyny, ac mae'r porwr ar eich desg yn dal i aros am ateb. Nid oes dim wedi torri yn yr ystyr arferol: mae'r ap yn gwrando y tu mewn i ofod enw rhwydwaith, ac mae'r stack hwnnw'n anweladwy i'r LAN. Mae ei loopback yn perthyn i'r gofod enw, felly nid oes gan gleient ar beiriant arall unrhyw gyfeiriad sy'n cyrraedd y porth. Mae un naid fwriadol, neu un pâr veth, yn trwsio hyn heb symud gweddill y gwesteiwr.
Pam nad oes dim yn ateb ar gyfeiriad y LAN
Mae gofod enw yn stack rhwydwaith cyflawn: rhyngwynebau, llwybrau, rheolau wal dân a loopback preifat. Mae proses a lansir drwy ip netns exec yn gweld y stack hwnnw a dim arall, felly mae'r cyfeiriad y mae'n ei rwymo yn datrys y tu mewn i'r gofod enw yn unig. Mae 127.0.0.1 y gwesteiwr ei hun yn loopback hollol wahanol.
Dyna pam mae curl ar y gwesteiwr yn methu tra bod yr un gorchymyn y tu mewn i'r gofod enw yn llwyddo. Mae'r ap yn iach; nid yw'r cyfeiriad yn bodoli yn stack y gwesteiwr, dyna i gyd.
Cyhoeddwch un porth gyda naid socat
Mae socat yn pontio'r ddau stack yn y gofod defnyddiwr, sy'n ddigon pan fo un porth TCP yn gorfod croesi. Mae ochr y gwesteiwr yn gwrando ar y LAN ac, ar gyfer pob cysylltiad a dderbyniwyd, yn cychwyn ail socat y tu mewn i'r gofod enw sy'n cysylltu â loopback yr ap. Mae'r broses fewnol yn cyrraedd yr ap yn union fel y byddai cleient lleol. Nid oes dim yn newid yn llwybro'r gofod enw, felly mae'r ap yn dal i ddefnyddio'r tunel fel ei unig allanfa.
socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork
Mae'r broses allanol angen root neu'r gallu i fynd i mewn i'r gofod enw. Os bydd y VPN yn cwympo, mae'r ap yn colli ei lwybr ac mae'r porth cyhoeddedig yn methu ar gau, sef yr ymddygiad rydych ei eisiau gan garchar.
Defnyddiwch bâr veth pan fydd mwy nag un porth yn croesi
Pâr veth yw'r ateb cywir pan fydd sawl porth neu brotocol yn gorfod croesi, neu pan fydd gwesteiwyr eraill angen cychwyn cysylltiadau. Mae un pen yn aros yn y gwesteiwr, mae'r llall yn symud i'r gofod enw, ac mae /30 bach yn rhoi cyfeiriad sefydlog i'r ddwy ochr. Yna mae llwybr gwesteiwr yn anfon cyfeiriad y gofod enw dros y pâr.
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
Peidiwch ag ychwanegu llwybr diofyn drwy'r gwesteiwr oni bai eich bod yn bwriadu torri'r carchar. Dylai'r tunel aros yn allanfa, felly dim ond cyfeiriad y gwasanaeth cyhoeddedig sy'n gyrraeddadwy dros y pâr. Rhowch ffeil datrys ei hun i'r gofod enw hefyd, oherwydd mae ip netns exec yn darllen /etc/netns/vpn/resolv.conf a hebddi mae datrys enwau y tu mewn i'r carchar yn wag.
Profwch o beiriant arall, nid o'r gwesteiwr
Rhedwch y prawf o ail beiriant, oherwydd gall y gwesteiwr gyrraedd gwrandäwr lleol drwy lwybrau nad ydynt yn dweud dim am y LAN. Gwiriwch gyntaf wrth beth y rhwymodd yr ap mewn gwirionedd y tu mewn i'r gofod enw, yna cysylltwch â'r cyfeiriad cyhoeddedig o'r tu allan. Nid yw rhwymo i bob cyfeiriad yno yn ehangu'r carchar, oherwydd mae'r wildcard yn dal i berthyn i'r gofod enw ac ni all y LAN ei weld.
ip netns exec vpn ss -lntp
Os yw cysylltiad y gwesteiwr yn gweithio ac nid yw cysylltiad y LAN, y darn coll yw'r naid neu'r llwybr, nid y cyfeiriad rhwymo. Cychwynnwch OpenVPN y tu mewn i'r gofod enw yn hytrach na symud dyfais tun fyw iddo, gan fod symud y rhyngwyneb yn ei ddiffodd a gall glirio llwybrau na allwch eu trwsio wedyn o'r tu allan. Cadwch y gorchmynion adfer ar y consol, nid y tu mewn i'r carchar.