Провера порта каже отворен? Зашто играчи Minecraft-а и даље не могу да се прикључе
Успешна TCP веза доказује само да је један сокет прихваћен са једног места. Пријава, пријем у свет и пут изнутра ка споља су одвојени тестови.
Неко покрене проверу порта, види реч отворен и сматра да је сервер решен. Шта тај резултат заиста значи је уско: са места проверавача, у том тренутку, прихваћена је TCP веза ка тој адреси и том порту. Не говори ништа о руковању протокола Minecraft, провери налога или о томе да ли је сервер пустио играча у свет.
То су четири различита слоја, и неуспех на било ком од њих даје играчу исту реченицу: није радило.
Сонда тестира само оно што види
TCP веза се завршава када обе стране заврше тростепено руковање, које лежи испод свега што игра зна. Сонда извештава да је постојао слушалац и да је одговорио са своје мрежне локације. Не може ти рећи да је слушалац игра, јер сваки процес може да заузме порт и прихвата везе.
Локација је једнако важна као резултат. Провера на јавном интернету тестира један пут из једне мреже. Провера коју оператер покрене изнутра исте мреже тестира сасвим други пут, и позитиван резултат тамо не говори готово ништа о ономе што доживљава удаљени играч. Две различите провере код два различита провајдера могу чак и да се не сложе из разлога који немају никакве везе са твојим сервером.
И време је важно. Резултат сонде описује тренутак када је покренута, а кућна веза са динамичком адресом или измењеним правилом прослеђивања може да помери прави одговор неколико минута касније. Запиши јавну адресу, порт, фамилију адреса и време заједно са пресудом, иначе запажање није поновљиво. Понови проверу из стварно друге мреже, а не са телефона на истој вези.
Четири слоја између сокета и играча
Замисли редослед који клијент који се прикључује стварно извршава. Прво разрешава адресу, затим отвара TCP везу ка објављеном порту, затим говори сопственим протоколом игре да би преговарао и потврдио идентитет, и на крају сервер одлучује да ли је тај идентитет дозвољен у свету. Сваки слој има свој потпис неуспеха, и само је први видљив провери порта.
Подразумевани порт за Java Edition је 25565, али оператер може да објави други спољашњи порт и проследи га унутра, тако да број који играч унесе није нужно број који сервер види. Провера усмерена на погрешан спољашњи порт извештава затворено док је сервер потпуно здрав, и то је најчешћа лажна узбуна у целој овој области.
Имена додају још један корак изнад порта. Ако играч унесе име хоста, разрешавање мора да врати објављену адресу, а на машини унутар мреже може да врати приватну уместо ње. То није отказ заштитног зида и никаква количина прослеђивања портова то неће променити.
Зашто играч изнутра иде другим путем
Играч на истом LAN-у, или на VPN-у који достиже тај LAN, покушава да достигне јавну адресу изнутра. Захтев иде ка спољашњој адреси рутера и рутер мора да га преведе назад унутра, што је поставка која се обично назива hairpinning или NAT одраз. И превод напред и повратни пут морају да се поклопе да би то радило, а многи кућни рутери то уопште не имплементирају.
Зато се гост споља прикључује, а особа која седи поред сервера не може. Спољашњи пут је заиста у реду; неуспех је унутрашњи заобилазни пут, и он изгледа са екрана играча као проблем сервера. Сам дневник сервера одлучује шта се догодило, јер веза која никада није преведена никада не стиже до њега.
Постоје две поштене поправке и једна лоша навика. Добре опције су да се унутрашњим играчима дозволи да користе приватну адресу или име split-DNS које се изнутра разрешава на приватну адресу, или да се укључи одраз на рутеру ако функција постоји и понаша се исправно. Лоша навика је отварање више портова или искључивање заштитног зида хоста, што не може да утиче на превод који рутер никада није извршио.
Netgate документација о NAT одразу детаљније описује разлику између спољашњег и унутрашњег и алтернативу split-DNS. Читај је као опис механизма, а не као обећање да било који конкретан VPN провајдер или рутер подржава сваку loopback варијанту.
Прикупљај доказе са сваког становишта
За сваки тест запиши ко га је покренуо, одакле, у које време, против које адресе и порта, и шта је сервер забележио. Одбијање игре са јасним разлогом у конзоли сервера је другачији налаз од везе која никада није стигла, и обоје воде у супротним смеровима.
Ако се дозвољени удаљени играчи прикључују, а један локални играч не може, локални пут је преостало питање и заслужује сопствену истрагу: коју адресу је клијент користио, шта је рутер урадио са преводом и да ли је сервер уопште забележио било какав покушај везе. Предај та три факта ономе ко поседује мрежу, уместо да насумично отвараш портове.