Құрылғыңыз оператордың NAT-ының артында, ол шығыс қосылымдарын аша алады және ешкім жете алмайтын SSH серверін іске қосады. Келетін сұраныс әдетте "оған VPN бер" деп тұжырымдалады, бұл бірнеше жауаптың бірі. Оны қабылдамас бұрын бір әкімшілік TCP порты керек пе, әлде бүкіл қосалқы желіге маршрутталған жол керек пе, соны шешіңіз, өйткені бұлар әртүрлі әсері бар әртүрлі жобалар.

Кері туннель тар нұсқаға жақсы жауап береді. Құрылғы сіздің хабқа қосылады, хабтан loopback портында тыңдауды сұрайды және сол портты өзінің SSH қызметіне қайта жібереді. Содан кейін әкімшілер тыңдаушыға хаб арқылы жетеді, ашық интернет арқылы емес.

Таңдауды шешетін үш шарт

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

ConditionReverse tunnel fitsSomething else is needed
How many services must be reachable?One, or a small fixed set on loopbackAnything that needs many ports or dynamic discovery
Who connects, and how are they authenticated?Named administrators with their own hub accountsThird parties, or anything needing per-flow audit you do not control
Does the device's own LAN need to be reachable?NoYes, so a routed VPN or a managed platform is the honest answer

Үшінші жол — адамдар таласатын жол. Құрылғының SSH портына туннель оның көршілерін сіздің желіңізге қоспайды және одан әрі жіберулер тізбегі арқылы солай көрсетуге болмайды. Егер талап шынымен LAN болса, соны айтыңыз және оның орнына соны жобалаңыз.

Хаб жағы: шектелген релелік тіркелгі

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

Match User relay-dev-7
    AuthenticationMethods publickey
    PubkeyAuthentication yes
    AllowTcpForwarding remote
    PermitListen 127.0.0.1:21022
    GatewayPorts no
    MaxSessions 0
    PermitTTY no
    X11Forwarding no
    AllowAgentForwarding no

MaxSessions 0 қызықты жол. Ол shell және ішкі жүйе сессияларынан бас тартады, бірақ құрылғыға қажет қайта жіберуге рұқсат береді, сондықтан ұрланған кілтті интерактивті кіруге айналдыруға болмайды. PermitListen хаб жағындағы тыңдаушының мекенжайы мен портын бекітеді, және GatewayPorts no оны хаб орналасқан желіге ашудың орнына loopback-та ұстайды.

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

Құрылғы жағы: қатты сәтсіздікке ұшырайтын қайта жіберу

Құрылғы қосылымды ашады және тыңдаушыны сұрайды. Аргументтегі екі мекенжай -R әртүрлі мағына береді, ал оларды солдан оңға оқу қайсысы қайсысы екенін есте сақтаудың ең жылдам жолы.

ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=30 \
    -o ServerAliveCountMax=3 \
    -R 127.0.0.1:21022:127.0.0.1:22 \
    [email protected]

Сол жақ жұп — хаб тыңдауы тиіс орын. Оң жақ жұп — сұраныс келгенде құрылғы қосылатын нәрсе, ол құрылғының өз жағынан шешіледі. Оларды ауыстыру таза көтерілетін және қате жерге жіберетін туннель жасайды, бұл сәтсіздіктен де нашар.

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

Қосымша секірістен құтылу үшін loopback тыңдау мекенжайын ешқашан жабайы картамен алмастырмаңыз. Сол бір өзгеріс басқару жолы мен қоғамдық қолжетімді порт арасындағы айырмашылық, және ол әдетте жөндеу кезінде болады да, содан кейін қалады. Егер әріптес портқа хаб арқылы жете алмаса, байланысты кеңейтудің орнына секіріс конфигурациясын түзетіңіз. Loopback — бұл дизайнның бүкіл қауіпсіздік дәлелі.

Хаб арқылы әкімші қатынасы

Хабта қарапайым тіркелгісі бар әкімші ол арқылы қайта жіберілген портқа секіре алады. Релелік тіркелгі бұған пайдаланылмайды, және оларды бөлек ұстаудың мәні де осында.

ssh -J [email protected] -o HostKeyAlias=device-7 \
    -p 21022 [email protected]

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

Өмірлік циклды өз қолыңызға алыңыз

Құрылғы командасын процесс менеджерінің астында дәл бір белсенді данамен және әдейі таңдаған қайта іске қосу саясатымен іске қосыңыз. Keepalive параметрлері өлі серіктесті анықтайды; олар шыққан процесті тірілтпейді.

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

Соңында loopback сізге не беретінін есте сақтаңыз. Ол желілік әсерді шектейді және ортақ хабтағы басқа жергілікті пайдаланушыларға қатысты ештеңе жасамайды, сондықтан хабтың өз қатынас саясаты әлі де дұрыс болуы керек. sshd_config анықтамасы жоғарыда қолданылған параметрлердің әрқайсысын құжаттайды, және олардың кез келгенін кеңейтпес бұрын қайта жіберу бөлімдерін толық оқыған жөн.

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