Cyrraedd gwasanaeth cleient VPN: twnnel gwrthdro neu DNAT
Cyrraedd gwasanaeth ar gleient OpenVPN heb anfon porth ymlaen: cymharwch dwnnel SSH gwrthdro â DNAT ar y gweinydd a'r tri amod sy'n dewis un.
Gall hyd yn oed gliniadur y tu ôl i NAT y cludwr wasanaethu cydweithiwr, cyhyd â bod y gweinydd VPN yn gweithredu fel y man cyfarfod. Dau fecanwaith sy'n cyrraedd yno: mae'r cleient yn deialu allan ac yn gofyn i'r gweinydd ddal porth wrando, neu mae'r gweinydd yn cyhoeddi porth ac yn ei chyfieithu i'r twnnel. Mae'r ddau yn datrys yr un broblem cyrhaeddedd ac yn ymddwyn yn wahanol o dan fethiant, goruchwyliaeth a logio. Tri amod sy'n penderfynu pa un sy'n perthyn i'ch gosodiad.
Dau siâp, un man cyfarfod
Yn y siâp cyntaf mae'r cleient yn agor sesiwn SSH allan ac yn gofyn i'r gweinydd wrando ar borth a ddewiswyd, gan anfon pob cysylltiad yn ôl drwy'r sesiwn honno. Nid oes dim yn cael ei anfon ymlaen ar y gweinydd ac nid oes cyfieithu pecynnau yn digwydd, felly'r unig ofynion yw cyfrif SSH, anfoniad a ganiateir a rheol wal dân ar gyfer y porth. Mae'r gwasanaeth yn aros yn rhwym i loopback ar y cleient, sef fel arfer yr hyn yr ydych ei eisiau.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Yn yr ail siâp y gweinydd sy'n berchen ar y porth cyhoeddus ac mae'n ailysgrifennu pob cysylltiad tuag at gyfeiriad twnnel y cleient. Mae hynny angen anfon IP ymlaen wedi'i alluogi, cyfieithu cyrchfan ar y ffordd i mewn a chyfieithu ffynhonnell ar y ffordd allan, ac mae'n parhau i weithio pan nad oes sesiwn SSH. I'r gweinydd y mae'r porth yn perthyn, nid i sesiwn, a'r nodwedd honno sy'n penderfynu'r rhan fwyaf o achosion real.
Nid yw'r naill siâp na'r llall yn fwy diogel o'i chynllun. Mae'r ddau yn y pen draw yn datgelu un porth gwasanaeth i unrhyw un a all gyrraedd cyfeiriad cyhoeddus y gweinydd, ac mae'r ddau yn dal i ddibynnu ar ddilysu'r gwasanaeth ei hun.
Amod un: a oes rhaid i'r porth oroesi'r sesiwn
Mae anfoniad gwrthdro yn byw yn union cyhyd â'r sesiwn SSH a'i creodd. Pan fo'r cyswllt yn syrthio, mae'r gwrandawr yn diflannu ac mae'r cydweithiwr yn gweld cysylltiad wedi'i wrthod yn lle llwybr araf. Mae goruchwylio'r gorchymyn gydag uned systemd a pholisi ailgychwyn yn trwsio hynny, ac mae ExitOnForwardFailure=yes yn gwneud rhwymiad methiedig yn weladwy ar unwaith yn lle gadael sesiwn sy'n rhedeg heb anfoniad.
Mae porth wedi'i chyfieithu yn goroesi ailgychwyniadau os yw'r rheolau'n cael eu cadw, ond mae'n dibynnu ar y cleient yn cadw'r un cyfeiriad twnnel. Mae cronfa ddynamig sy'n rhoi cyfeiriad gwahanol i'r cliniadur ar ôl ailgysylltu yn pwyntio'r rheol at ddim yn ddistaw. Cadwch gyfeiriad y twnnel yn gyntaf, yna ysgrifennwch y rheol, a thriniwch y ddau fel un newid.
Os oes rhaid i'r gwasanaeth ateb am dri yn y bore heb neb yn gwylio, y siâp gyda phorth a gyhoeddir gan y gweinydd sydd â'r lleiaf o rannau symudol, oherwydd y twnnel ei hun yw'r unig broses y mae'n rhaid iddi aros i fyny.
Amod dau: pwy sy'n berchen ar y wal dân a'r logiau
Mae'r siâp gwrthdro yn cadw'r holl bolisi mewn dau le. Mae sshd yn penderfynu a yw anfoniadau o bell yn cael eu caniatáu o gwbl drwy AllowTcpForwarding, ac mae GatewayPorts yn penderfynu a yw'r gwrandawr yn rhwymo i loopback neu i bob cyfeiriad. Gyda'r rhagosodiad no ni all cydweithiwr y tu allan i'r gweinydd gyrraedd y porth er bod yr anfoniad wedi llwyddo, ac mae hynny'n edrych fel twnnel wedi torri pan mai cyfeiriad rhwymo sydd ynddo mewn gwirionedd.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Mae'r siâp wedi'i gyfieithu angen anfon ymlaen wedi'i alluogi a dwy reol, a'r ail reol yw lle mae'r rhan fwyaf o ryseitiau yn mynd o'i le. Mae cwmpasu cyfieithu'r ffynhonnell gyda chyflwr conntrack DNAT yn golygu mai dim ond y cysylltiadau a grëwyd gan reol y cyrchfan sy'n cael eu hailysgrifennu, yn lle pob pecyn y mae'r gweinydd yn ei anfon i'r twnnel.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Mae'r ailysgrifennu hwnnw hefyd yn dinistrio priodoliad. Ar ôl hynny mae'r cleient yn gweld pob galwr fel cyfeiriad twnnel y gweinydd, sy'n cwympo unrhyw derfyn cyfradd fesul cyfeiriad i un bwced ac yn cuddio pwy anfonodd beth. Os yw priodoliad yn bwysig, terfynwch y cysylltiad ar y gweinydd neu cadwch y penderfyniad caniatâd yno a throsglwyddwch hunaniaeth mewn pennawd y mae'r gwasanaeth yn ymddiried ynddo. Mae dewis rhwng y ddau drwsiad hynny yn dibynnu a yw'r gwasanaeth yn darllen pennawd procsi o gwbl.
Amod tri: un porth neu lawer, a phwy sy'n berchen ar yr enw
Un gwasanaeth ar un porth yw'r achos lle mae'r anfoniad gwrthdro yn ennill ar ymdrech. Mae angen un gorchymyn, un cyfrif ac un rheol wal dân, a glanhau yw lladd y sesiwn. Mae nifer o wasanaethau ar yr un cyfeiriad cyhoeddus yn eich gwthio tuag at y siâp a gyhoeddir gan y gweinydd, oherwydd mae angen ei borth gweinydd ei hun ar bob anfoniad gwrthdro ac mae'r set yn tyfu gyda phob gwasanaeth.
Mae enwau yn ei gwneud hi'n fwy cymhleth. Gall anfoniad gwrthdro fod y tu ôl i brocsi TCP sy'n llwybro yn ôl SNI, tra bo porth wedi'i chyfieithu fel arfer yn un porth y gwasanaeth. Os yw'r gwasanaeth yn terfynu TLS ei hun ac angen yr enw gwesteiwr gwreiddiol, mae'r dull procsi yn ei gadw ac mae'r dull DNAT yn ei gadw dim ond os yw'r gwasanaeth yn derbyn yr enw hwnnw ar y porth hwnnw.
Nodwch pa un o'r tri amod a benderfynodd y siâp. Fel arall bydd y person nesaf sy'n ychwanegu ail wasanaeth yn ailagor yr un gymhariaeth gyda llai o gyd-destun.
Penderfynwch, yna profwch o'r tu allan
Profwch y llwybr o rwydwaith nad oes ganddi unrhyw lwybr at y cliniadur, a gwyliwch y cownteri ar y gweinydd tra bo'r cais yn rhedeg. Nid yw profi o'r gweinydd tuag at ei gyfeiriad cyhoeddus ei hun yn profi dim yma, oherwydd crëir y pecyn yn lleol ac ni fydd byth yn cyrraedd bachyn cyfieithu'r mewnlifiad, felly gall y prawf basio tra bo'r llwybr go iawn wedi torri.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Mae cownteri sy'n aros yn wastad yn golygu na chyrhaeddodd y pecyn y rheol erioed, sy'n cyfeirio at y darparwr neu wal dân y gwesteiwr. Mae cownteri sy'n symud tra bo'r gwasanaeth yn gwrthod yn cyfeirio at wal dân y cleient ei hun neu'r cyfeiriad y mae'r gwasanaeth yn gwrando arno. Mae twnnel sy'n cario'r pecyn ond yn dychwelyd dim yn broblem llwybr neu lwybr gwrthdro, ac ni ddylid dadfygio unrhyw un o'r tri chanlyniad hyn drwy olygu addasydd y cleient. Nodwch pa gowntwr a symudodd cyn i chi newid unrhyw beth, oherwydd mae ar y prawf nesaf angen y llinell sylfaen honno.
Unwaith y bydd y siâp yn gweithio, cofnodwch y porth, y perchennog a'r dull goruchwylio wrth ymyl cyfluniad y twnnel. Mae trwsiad cyrhaeddedd sy'n bodoli yn hanes cragen rhywun yn un ailgychwyn oddi wrth ddigwyddiad a ailadroddir.