Я настроил сервер Apache HTTP на своем Macbook, чтобы иметь доступ ко всем функциям PHP, пока я изучаю язык. У меня нет зарегистрированного доменного имени или постоянного доступа к сети, поэтому идея размещения настоящего веб-сайта на этом сервере невозможна; я делаю это только в учебных целях.
В любом случае, мне было интересно кое-что. Я заметил, что когда я ввожу свой частный IP-адрес в веб-браузер (не адрес обратной связи, а фактический адрес, назначенный DHCP), я могу получить доступ к веб-страницам, размещенным на моем сервере, что, как я думаю, означает, что я могу получить к нему доступ извне моего компьютера. Однако, когда я ввожу свой публичный IP-адрес, я получаю сетевой тайм-аут, что, как я предполагаю, означает, что я не могу получить доступ к своему веб-серверу извне локальной сети (если только соединение не очень медленное).
Мне интересно, почему так. Есть ли уровень безопасности, который не позволяет людям получать доступ к компьютерам внутри локальной сети извне?
решение1
На линии может быть три блокирующих перехода, начиная с вашего компьютера:
Ваша ОС может иметь настроенный брандмауэр, блокирующий входящие запросы. Вы можете проверить это, используя другую машину в той же подсети/другой подсети, но все еще за вашим домашним маршрутизатором. Я не знаком с MAC OS, поэтому не могу сказать вам, как настроить брандмауэр.
Ваш домашний маршрутизатор (или большинство маршрутизаторов Wi-Fi), к которым вы подключаетесь, используетНАТчтобы «скрыть» подсеть за ней и позволить вашим многочисленным устройствам общаться по одному глобальному IP-адресу, который вы получаете от интернет-провайдера. Если вы делаете запрос на удаленный сервер из локальной сети, с любого устройства, удаленное устройство увидит, что запрос был инициирован вашим маршрутизатором.Если вы делаете запрос извне на свой публичный IP-адрес, вы фактически обращаетесь к своему маршрутизатору.Если вы хотите, чтобы все HTTP-запросы, адресованные вашему маршрутизатору, обслуживались вашим ноутбуком, подключенным к нему, вам необходимо добавитьпорт-форвардв меню маршрутизатора укажите IP-адрес ноутбука и порт 80 (стандартный порт HTTP) или порт 443 для HTTPS.
В настоящее время все чаще и чаще бывает так, что интернет-провайдеры даже не дают вам публичный (глобально маршрутизируемый) IP-адрес. Интернет-провайдер также использует NAT (для сохранения глобальных IPv4-адресов), внешний IP-адрес вашего маршрутизатора исходит из частной подсети вашего интернет-провайдера. Для этого потребуется зарегистрировать правило переадресации портов в маршрутизаторе интернет-провайдера, чего они не сделают за вас. В этом случае вы не сможете получить доступ к своему ноутбуку из интернета.
решение2
Причина этого — трансляции NAT.
Когда вы подключаетесь к Интернету, ваш интернет-провайдер предоставляет вам публичный IP-адрес, чтобы вы могли общаться с Интернетом.
Когда кто-то в Интернете хочет получить доступ к вашему веб-серверу и вводит публичный IP-адрес, маршрутизатору необходимо знать, куда в сети направляется запрос. Это называется трансляциями NAT. Это делается путем настройки сопоставления портов.
Веб-сайты используют HTTP-трафик, который по умолчанию использует порт 80, поэтому вам нужно создать правило в маршрутизаторе, чтобы указать, что порт 80 необходимо перенаправить на внутренний IP-адрес. Как только это будет сделано, и кто-то извне введет ваш публичный IP-адрес в своем браузере, ваш маршрутизатор теперь будет знать, что он должен перенаправить запрос на ваш macbook.
Теперь есть одно дополнение к вопросу. Если вы настроите переадресацию портов, большинство маршрутизаторов не поймут, что ваш публичный IP-адрес — это ваш собственный, поэтому вы, скорее всего, все равно не сможете получить доступ к своему веб-сайту с вашего собственного публичного IP-адреса.
Ваш MacBook отправляет запрос маршрутизатору, который отправляет его интернет-провайдеру, интернет-провайдер отправляет его обратно, а маршрутизатор его не ожидает, поэтому игнорирует запрос, что приводит к тайм-ауту, поскольку он не может подключиться сам к себе.