VPN క్లయింట్ సేవను చేరుకోవడం: రివర్స్ టన్నెల్ లేదా DNAT
పోర్ట్ ఫార్వర్డింగ్ లేకుండా OpenVPN క్లయింట్ సేవను చేరుకోవడం: రివర్స్ SSH టన్నెల్ను సర్వర్ వైపు DNAT మరియు ఎంపికను నిర్ణయించే మూడు షరతులతో పోల్చండి.
క్యారియర్ NAT వెనుక ఉన్న ల్యాప్టాప్ కూడా సహోద్యోగికి సేవ చేయగలదు, VPN సర్వర్ కలుసుకునే స్థలంగా ఉంటే. అక్కడికి రెండు మార్గాలు ఉన్నాయి: క్లయింట్ బయటకు కనెక్ట్ అయి సర్వర్ను వినడానికి ఒక పోర్ట్ ఉంచమని అడుగుతుంది, లేదా సర్వర్ ఒక పోర్ట్ను ప్రచురించి దాన్ని టన్నెల్లోకి అనువదిస్తుంది. రెండూ ఒకే చేరిక సమస్యను పరిష్కరిస్తాయి, వైఫల్యం, పర్యవేక్షణ మరియు లాగింగ్లో వేరుగా ప్రవర్తిస్తాయి. మీ సెటప్కు ఏది సరిపోతుందో మూడు షరతులు నిర్ణయిస్తాయి.
రెండు ఆకారాలు, ఒక కలుసుకునే స్థలం
మొదటి ఆకారంలో క్లయింట్ బయటకు SSH సెషన్ తెరిచి, ఎంచుకున్న పోర్ట్లో వినమని సర్వర్ను అడుగుతుంది, ప్రతి కనెక్షన్ను ఆ సెషన్ ద్వారా తిరిగి పంపుతుంది. సర్వర్లో ఏదీ ఫార్వర్డ్ కాదు, ప్యాకెట్ అనువాదం జరగదు, కాబట్టి ఏకైక అవసరాలు SSH ఖాతా, అనుమతించిన ఫార్వర్డింగ్ మరియు పోర్ట్ కోసం ఫైర్వాల్ నియమం. సేవ క్లయింట్లోని లూప్బ్యాక్కు కట్టుబడి ఉంటుంది, ఇది సాధారణంగా మీరు కోరుకునేది.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
రెండో ఆకారంలో పబ్లిక్ పోర్ట్ సర్వర్ సొంతం మరియు ప్రతి కనెక్షన్ను క్లయింట్ టన్నెల్ చిరునామా వైపు తిరిగి రాస్తుంది. దానికి IP ఫార్వర్డింగ్ ప్రారంభించబడాలి, లోపలికి వచ్చేటప్పుడు గమ్యస్థాన అనువాదం మరియు బయటకు పోయేటప్పుడు మూల అనువాదం అవసరం, SSH సెషన్ లేనప్పుడు కూడా ఇది పని చేస్తూనే ఉంటుంది. పోర్ట్ సెషన్కు కాదు, సర్వర్కు చెందుతుంది, ఆ లక్షణమే చాలా వాస్తవ సందర్భాలను నిర్ణయిస్తుంది.
రెండు ఆకారాలూ సహజంగా ఎక్కువ సురక్షితం కావు. రెండూ ఒక సేవా పోర్ట్ను సర్వర్ పబ్లిక్ చిరునామాను చేరుకోగల ప్రతివారికీ బహిర్గతం చేస్తాయి, రెండూ ఇప్పటికీ సేవ యొక్క స్వంత ప్రామాణీకరణపై ఆధారపడతాయి.
షరతు ఒకటి: పోర్ట్ సెషన్ కంటే ఎక్కువ కాలం జీవించాలా
రివర్స్ ఫార్వర్డింగ్ దాన్ని సృష్టించిన SSH సెషన్ ఎంత కాలం ఉంటుందో అంత కాలమే ఉంటుంది. లింక్ పడిపోయినప్పుడు వినేవాడు కనుమరుగవుతాడు, సహోద్యోగి నెమ్మదిగా మార్గానికి బదులు తిరస్కరించిన కనెక్షన్ను చూస్తాడు. systemd యూనిట్ మరియు పునఃప్రారంభ విధానంతో ఆదేశాన్ని పర్యవేక్షించడం దీన్ని పరిష్కరిస్తుంది, ExitOnForwardFailure=yes విఫలమైన బైండ్ను వెంటనే కనిపించేలా చేస్తుంది, ఫార్వర్డింగ్ లేకుండా నడుస్తున్న సెషన్ను వదిలేయడం బదులు.
అనువదించిన పోర్ట్ నియమాలు సేవ్ చేయబడితే పునఃప్రారంభాలను తట్టుకుంటుంది, కానీ క్లయింట్ అదే టన్నెల్ చిరునామాను ఉంచుకోవడంపై ఆధారపడి ఉంటుంది. తిరిగి కనెక్ట్ అయిన తర్వాత ల్యాప్టాప్కు వేరే చిరునామా ఇచ్చే డైనమిక్ పూల్ నియమాన్ని నిశ్శబ్దంగా ఎక్కడికీ చేర్చదు. మొదట టన్నెల్ చిరునామాను కేటాయించండి, ఆ తర్వాత నియమాన్ని రాయండి, రెండింటినీ ఒకే మార్పుగా పరిగణించండి.
సేవ రాత్రి మూడు గంటలకు ఎవరూ చూడకుండా సమాధానం ఇవ్వాల్సి ఉంటే, సర్వర్ ప్రచురించిన పోర్ట్ ఉన్న ఆకారంలో కదిలే భాగాలు తక్కువ, ఎందుకంటే నడుస్తూ ఉండాల్సిన ఏకైక ప్రక్రియ టన్నెల్ మాత్రమే.
షరతు రెండు: ఫైర్వాల్ మరియు లాగ్లు ఎవరివి
రివర్స్ ఆకారం మొత్తం విధానాన్ని రెండు చోట్ల ఉంచుతుంది. sshd AllowTcpForwarding ద్వారా రిమోట్ ఫార్వర్డింగ్ అసలు అనుమతించబడుతుందో లేదో నిర్ణయిస్తుంది, GatewayPorts వినేవాడు లూప్బ్యాక్కు లేదా ప్రతి చిరునామాకు కట్టుబడతాడో నిర్ణయిస్తుంది. డిఫాల్ట్ no తో సర్వర్ వెలుపలి సహోద్యోగి ఫార్వర్డింగ్ విజయవంతమైనా పోర్ట్ను చేరుకోలేడు, అది విరిగిన టన్నెల్లా కనిపిస్తుంది, నిజానికి అది బైండ్ చిరునామా.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
అనువదించిన ఆకారానికి ఫార్వర్డింగ్ ప్రారంభించబడి రెండు నియమాలు అవసరం, రెండో నియమమే చాలా పద్ధతులు తప్పు చేసే చోటు. మూల అనువాదాన్ని conntrack యొక్క DNAT స్థితికి పరిమితం చేయడం అంటే గమ్యస్థాన నియమం సృష్టించిన కనెక్షన్లు మాత్రమే తిరిగి రాయబడతాయి, సర్వర్ టన్నెల్లోకి పంపే ప్రతి ప్యాకెట్ కాదు.
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
ఆ మళ్లీ రాయడం ఆపాదనను కూడా నాశనం చేస్తుంది. ఆ తర్వాత క్లయింట్ ప్రతి కాలర్ను సర్వర్ టన్నెల్ చిరునామాగా చూస్తుంది, ఇది ప్రతి చిరునామాకు ఉన్న వేగ పరిమితిని ఒకే బకెట్లో కలిపి ఎవరు ఏమి పంపారో దాస్తుంది. ఆపాదన ముఖ్యమైతే కనెక్షన్ను సర్వర్లో ముగించండి లేదా అనుమతి నిర్ణయాన్ని అక్కడే ఉంచి సేవ నమ్మే హెడర్లో గుర్తింపును పంపండి. ఈ రెండు సవరణల్లో ఏది ఎంచుకోవాలో సేవ ప్రాక్సీ హెడర్ను చదువుతుందో లేదో దానిపై ఆధారపడి ఉంటుంది.
షరతు మూడు: ఒక పోర్ట్ లేదా అనేకం, మరియు పేరు ఎవరిది
ఒక పోర్ట్పై ఒక సేవ అనేది ప్రయత్నంలో రివర్స్ ఫార్వర్డింగ్ గెలిచే సందర్భం. ఒక ఆదేశం, ఒక ఖాతా మరియు ఒక ఫైర్వాల్ నియమం అవసరం, శుభ్రపరచడం అంటే సెషన్ను చంపడం. ఒకే పబ్లిక్ చిరునామాపై అనేక సేవలు మిమ్మల్ని సర్వర్ ప్రచురించిన ఆకారం వైపు నెట్టుతాయి, ఎందుకంటే ప్రతి రివర్స్ ఫార్వర్డింగ్కు దాని సొంత సర్వర్ పోర్ట్ కావాలి మరియు ప్రతి సేవతో సమితి పెరుగుతుంది.
పేర్లు దీన్ని మరింత క్లిష్టతరం చేస్తాయి. రివర్స్ ఫార్వర్డింగ్ SNI ఆధారంగా రూట్ చేసే TCP ప్రాక్సీ వెనుక ఉండవచ్చు, అయితే అనువదించిన పోర్ట్ సాధారణంగా ప్రతి సేవకు ఒక పోర్ట్. సేవ తానే TLS ముగించి అసలు హోస్ట్ పేరు కావాలంటే, ప్రాక్సీ విధానం దాన్ని కాపాడుతుంది, DNAT విధానం సేవ ఆ పోర్ట్పై ఆ పేరును అంగీకరిస్తే మాత్రమే కాపాడుతుంది.
మూడు షరతుల్లో ఏది ఆకారాన్ని నిర్ణయించిందో రాయండి. లేకపోతే రెండో సేవను జోడించే తదుపరి వ్యక్తి తక్కువ సందర్భంతో అదే పోలికను మళ్లీ తెరుస్తాడు.
నిర్ణయించండి, ఆ తర్వాత బయట నుండి పరీక్షించండి
ల్యాప్టాప్కు ఏ మార్గమూ లేని నెట్వర్క్ నుండి మార్గాన్ని పరీక్షించండి, అభ్యర్థన నడుస్తున్నప్పుడు సర్వర్లోని కౌంటర్లను గమనించండి. సర్వర్ నుండి దాని స్వంత పబ్లిక్ చిరునామా వైపు పరీక్షించడం ఇక్కడ ఏదీ నిరూపించదు, ఎందుకంటే ప్యాకెట్ స్థానికంగా సృష్టించబడుతుంది మరియు లోపలికి వచ్చే అనువాద హుక్ను ఎప్పటికీ చేరుకోదు, కాబట్టి నిజమైన మార్గం విరిగినా పరీక్ష ఉత్తీర్ణం కావచ్చు.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
స్థిరంగా ఉండే కౌంటర్లు అంటే ప్యాకెట్ ఎప్పటికీ నియమాన్ని చేరుకోలేదు, ఇది ప్రొవైడర్ లేదా హోస్ట్ ఫైర్వాల్ వైపు సూచిస్తుంది. సేవ నిరాకరిస్తున్నప్పుడు కదిలే కౌంటర్లు క్లయింట్ స్వంత ఫైర్వాల్ లేదా సేవ వినే చిరునామా వైపు సూచిస్తాయి. ప్యాకెట్ను మోసుకెళ్లి ఏదీ తిరిగి ఇవ్వని టన్నెల్ మార్గం లేదా రివర్స్-పాత్ సమస్య, మరియు ఈ మూడు ఫలితాల్లో దేన్నీ క్లయింట్ అడాప్టర్ను సవరించి డీబగ్ చేయకూడదు. ఏదైనా మార్చే ముందు ఏ కౌంటర్ కదిలిందో రాయండి, ఎందుకంటే తదుపరి పరీక్షకు ఆ ఆధార రేఖ కావాలి.
ఆకారం పని చేసిన తర్వాత పోర్ట్, యజమాని మరియు పర్యవేక్షణ పద్ధతిని టన్నెల్ కాన్ఫిగరేషన్ పక్కన నమోదు చేయండి. ఒకరి షెల్ చరిత్రలో మాత్రమే ఉన్న చేరిక సవరణ ఒక పునఃప్రారంభం దూరంలో పునరావృత సంఘటన.