Оператордың NAT-ының артындағы ноутбук та әріптеске қызмет көрсете алады, тек VPN сервері кездесу орны болса болғаны. Онда екі механизм жеткізеді: клиент сыртқа қосылып, серверден тыңдау портын ұстауды сұрайды, немесе сервер портты жариялап, оны туннельге аударады. Екеуі де бірдей қолжетімділік мәселесін шешеді және ақау, қадағалау мен журналдау кезінде әртүрлі әрекет етеді. Қайсысы сіздің конфигурацияңызға сай екенін үш шарт анықтайды.

Екі пішін, бір кездесу орны

Бірінші пішінде клиент сыртқа SSH сессиясын ашады және серверден таңдалған портта тыңдауды сұрайды, әр қосылымды сол сессия арқылы кері жібереді. Серверде ештеңе қайта бағытталмайды және пакет аудармасы болмайды, сондықтан жалғыз талаптар SSH тіркелгісі, рұқсат етілген қайта бағыттау және порт үшін firewall ережесі. Қызмет клиенттегі loopback-ке байланған күйде қалады, әдетте бұл керек нәрсе.

ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]

Екінші пішінде жария порт серверге тиесілі және әр қосылымды клиент туннелінің мекенжайына қарай қайта жазады. Бұл IP қайта бағыттаудың қосылуын, кіреберісте мақсат аудармасын және шығуда көз аудармасын қажет етеді, және SSH сессиясы жоқ кезде де жұмысын жалғастырады. Порт сессияға емес, серверге тиесілі, және нақ осы қасиет нақты жағдайлардың көбін шешеді.

Екі пішіннің ешқайсысы құрылысы бойынша қауіпсіз емес. Екеуі де бір қызмет портын сервердің жария мекенжайына жете алатындардың бәріне ашады, және екеуі де қызметтің өз аутентификациясына тәуелді.

Бірінші шарт: порт сессиядан ұзақ өмір сүруі керек пе

Кері қайта бағыттау оны жасаған SSH сессиясы қанша өмір сүрсе, сонша өмір сүреді. Байланыс үзілгенде тыңдаушы жоғалады және әріптес баяу жолдың орнына қосылымнан бас тартуды көреді. Команданы systemd бірлігі мен қайта іске қосу саясатымен қадағалау мұны жояды, ал ExitOnForwardFailure=yes сәтсіз байлауды бірден көрінетін етеді, қайта бағыттаусыз жұмыс істеп тұрған сессия қалдырудың орнына.

Аударылған порт ережелер сақталса, қайта жүктеулерге шыдайды, бірақ клиенттің сол туннель мекенжайын сақтауына байланысты. Қайта қосылғаннан кейін ноутбукке басқа мекенжай беретін динамикалық пул ережені үнсіз ешқайда бағыттайды. Алдымен туннель мекенжайын қорғап алыңыз, содан кейін ережені жазыңыз және екеуін бір өзгеріс ретінде қарастырыңыз.

Егер қызмет түнде сағат үште ешкім қарамай жауап беруі керек болса, сервер жариялаған портты пішінде қозғалатын бөлшектер аз, өйткені жұмыс істеп тұруы тиіс жалғыз процесс туннельдің өзі.

Екінші шарт: firewall мен журналдар кімге тиесілі

Кері пішін бүкіл саясатты екі жерде ұстайды. sshd AllowTcpForwarding арқылы қашықтан қайта бағыттауға жалпы рұқсат бар-жоғын шешеді, ал GatewayPorts тыңдаушының loopback-ке немесе барлық мекенжайға байлануын шешеді. Әдепкі 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

Бұл қайта жазу авторлықты да жояды. Одан кейін клиент әр қоңырау шалушыны сервер туннелінің мекенжайы ретінде көреді, бұл әр мекенжайға арналған жылдамдық шегін бір шелекке жинайды және кімнің не жібергенін жасырады. Егер авторлық маңызды болса, қосылымды серверде аяқтаңыз немесе рұқсат шешімін сонда қалдырып, қызмет сенетін тақырыпшада сәйкестікті беріңіз. Осы екі түзетудің қайсысын таңдау қызметтің прокси тақырыпшасын оқитын-оқымайтынына байланысты.

Үшінші шарт: бір порт па әлде көп пе, және атау кімге тиесілі

Бір порттағы бір қызмет — кері қайта бағыттау күш салу жағынан жеңетін жағдай. Бір команда, бір тіркелгі және бір firewall ережесі керек, ал тазалау — сессияны өлтіру. Бір жария мекенжайдағы бірнеше қызмет сізді сервер жариялаған пішінге итермелейді, өйткені әр кері қайта бағыттауға өз сервер порты керек және жиын әр қызметпен өседі.

Атаулар оны одан әрі қиындатады. Кері қайта бағыттау SNI бойынша маршруттайтын TCP проксиінің артында тұруы мүмкін, ал аударылған порт әдетте қызмет сайын бір порт. Егер қызмет TLS-ті өзі аяқтап, бастапқы хост атауын қажет етсе, прокси тәсілі оны сақтайды, ал DNAT тәсілі оны тек қызмет сол атауды сол портта қабылдаса ғана сақтайды.

Үш шарттың қайсысы пішінді анықтағанын жазып қойыңыз. Әйтпесе екінші қызмет қосатын келесі адам сол салыстыруды азырақ контекспен қайта ашады.

Шешім қабылдаңыз, содан кейін сырттан сынаңыз

Жолды ноутбукке дейін маршруты жоқ желіден сынап көріңіз және сұраныс орындалып жатқанда сервердегі есептегіштерді бақылаңыз. Серверден өзінің жария мекенжайына қарай сынау мұнда ештеңені дәлелдемейді, өйткені пакет жергілікті жасалады және кіретін аударма ілгегіне ешқашан жетпейді, сондықтан сынақ өтуі мүмкін, ал нақты жол бүлінген болуы ықтимал.

sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20

Тұрақты қалған есептегіштер пакеттің ережеге ешқашан жетпегенін білдіреді, бұл провайдерге немесе хосттың firewall-ына меңзейді. Қызмет бас тартып жатқанда қозғалатын есептегіштер клиенттің өз firewall-ына немесе қызмет тыңдайтын мекенжайға меңзейді. Пакетті тасымалдап, бірақ ештеңе қайтармайтын туннель — маршрут немесе кері жол мәселесі, және осы үш нәтиженің ешқайсысын клиент адаптерін өңдеу арқылы жөндеуге болмайды. Бірдеңе өзгертудің алдында қай есептегіштің қозғалғанын жазып қойыңыз, өйткені келесі сынаққа сол бастапқы сызық керек.

Пішін жұмыс істей бастағанда портты, иесін және қадағалау әдісін туннель конфигурациясының қасына жазыңыз. Тек біреудің shell тарихында ғана бар қолжетімділік түзетуі бір қайта жүктеу қашықтықтағы қайталанатын оқиға.

Қатысты мақалалар