Праверка порта кажа «адкрыты»? Чаму гульцы Minecraft усё роўна не могуць далучыцца
Паспяховае TCP-злучэнне даказвае, што адзін сокет быў прыняты з аднаго месца. Уваход, допуск у свет і шлях знутры вонку — гэта асобныя праверкі.
Нехта запускае праверку порта, бачыць слова «адкрыты» і лічыць, што сервер вырашаны. Што насамрэч значыць гэты вынік — вузка: з месца праверкі, у той момант, было прынята TCP-злучэнне да гэтага адрасу і порта. Ён нічога не кажа пра рукапацісканне пратакола Minecraft, аўтэнтыфікацыю ўліковага запісу або пра тое, ці пусціў сервер гульца ў свет.
Гэта чатыры розныя ўзроўні, і збой на любым з іх дае ад гульца аднолькавы сказ: не спрацавала.
Праверка тэстуе толькі тое, што бачыць
TCP-злучэнне завяршаецца, калі абодва бакі скончваюць трохбакавое рукапацісканне, якое ляжыць ніжэй за ўсё, што ведае гульня. Праверка паведамляе, што слухач існаваў і адказаў са свайго сеткавага месца. Яна не можа сказаць табе, што слухач — гэта гульня, бо любы працэс можа заняць порт і прымаць злучэнні.
Месца мае такое ж значэнне, як і вынік. Праверка ў публічным інтэрнэце тэстуе адзін шлях з адной сеткі. Праверка, якую аператар запускае знутры той жа сеткі, тэстуе зусім іншы шлях, і станоўчы вынік там не гаворыць амаль нічога пра тое, што адчувае аддалены гулец. Дзве розныя праверкі ў двух розных пастаўшчыкоў могуць нават разыходзіцца з прычын, якія не маюць ніякага дачынення да твайго сервера.
Час таксама мае значэнне. Вынік праверкі апісвае момант, калі яна выконвалася, а хатняе злучэнне з дынамічным адрасам або змененым правілам перанакіравання можа зрушыць сапраўдны адказ на некалькі хвілін пазней. Запішы публічны адрас, порт, сямейства адрасоў і час разам з вердыктам, інакш назіранне нельга паўтарыць. Паўтары праверку з сапраўды іншай сеткі, а не з тэлефона на тым жа злучэнні.
Чатыры ўзроўні паміж сокетам і гульцом
Уяві сабе паслядоўнасць, якую кліент, што далучаецца, фактычна выконвае. Спачатку ён разрозвае адрас, потым адкрывае TCP-злучэнне да апублікаванага порта, потым гаворыць уласным пратаколам гульні для ўзгаднення і аўтэнтыфікацыі, і нарэшце сервер вырашае, ці можна гэтаму ідэнтыфікатару ўвайсці ў свет. Кожны ўзровень мае свой подпіс збою, і толькі першы бачны праверцы порта.
Порт па змаўчанні для Java Edition — 25565, але аператар можа апублікаваць іншы знешні порт і перанакіраваць яго ўнутр, таму лік, які ўводзіць гулец, не абавязкова той лік, які бачыць сервер. Праверка, накіраваная на няправільны знешні порт, паведамляе «зачынены», пакуль сервер цалкам здаровы, і гэта самая частая ілжывая трывога ва ўсёй гэтай галіне.
Імёны дадаюць яшчэ адзін крок над портам. Калі гулец уводзіць імя хоста, разрозванне павінна вярнуць апублікаваны адрас, а на машыне ўнутры сеткі яно можа вярнуць замест яго прыватны. Гэта не збой брандмаўэра, і ніякая колькасць перанакіраванняў портаў гэтага не зменіць.
Чаму гулец знутры ідзе іншым шляхам
Гулец у той жа LAN або ў VPN, які дасягае гэтай LAN, спрабуе дасягнуць публічнага адрасу знутры. Запыт ідзе на знешні адрас маршрутызатара, і маршрутызатар павінен перавесці яго назад унутр — гэта схема, якую звычайна называюць hairpinning або адлюстраваннем NAT. Каб гэта працавала, павінны супасці і прамое пераўтварэнне, і зваротны шлях, а многія спажывецкія маршрутызатары зусім гэтага не рэалізуюць.
Вось чаму знешні госць далучаецца, а чалавек, які сядзіць побач з серверам, не можа. Знешні шлях сапраўды ў парадку; збой дае ўнутраны аб'езд, і ён выглядае з экрана гульца як праблема сервера. Уласны журнал сервера вырашае, што менавіта адбылося, бо злучэнне, якое ніколі не пераўтваралася, да яго не даходзіць.
Ёсць два сумленныя рашэнні і адна дрэнная звычка. Добрыя варыянты — дазволіць унутраным гульцам карыстацца прыватным адрасам або імем split-DNS, якое разрозваецца ўнутры ў прыватны адрас, або ўключыць адлюстраванне на маршрутызатары, калі такая функцыя ёсць і працуе. Дрэнная звычка — адкрываць больш портаў або адключаць брандмаўэр хоста, што не можа паўплываць на пераўтварэнне, якое маршрутызатар ніколі не выконваў.
Дакументацыя Netgate пра адлюстраванне NAT падрабязней апісвае розніцу паміж знешнім і ўнутраным і альтэрнатыву split-DNS. Чытай яе як апісанне механізма, а не як абяцанне, што пэўны пастаўшчык VPN або маршрутызатар падтрымлівае ўсе варыянты loopback.
Збірай доказы з кожнага пункту гледжання
Для кожнай праверкі запішы, хто яе запускаў, адкуль, у які час, супраць якога адрасу і порта, і што сервер занёс у журнал. Адмова гульні з яснай прычынай у кансолі сервера — гэта іншая выснова, чым злучэнне, якое так і не прыйшло, і яны вядуць у процілеглыя бакі.
Калі дазволеныя аддаленыя гульцы далучаюцца, а адзін мясцовы гулец не можа, пытаннем застаецца мясцовы шлях, і ён заслугоўвае асобнага расследавання: які адрас выкарыстаў кліент, што зрабіў маршрутызатар з пераўтварэннем і ці зафіксаваў сервер хоць якую спробу злучэння. Перадай гэтыя тры факты таму, хто валодае сеткай, замест таго каб наўздагад адкрываць порты.