Оператордун 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 тарыхында гана бар жеткиликтүүлүк оңдоосу бир кайра жүктөө аралыгындагы кайталанма окуя.

Тектеш макалалар