Рейтинг:-1

Почему apache регистрирует внутренний IP-адрес при использовании внешнего домена?

флаг cn

У меня работает Raspberry Pi, который мы используем в офисе для небольших тестовых проектов, которые нам не нужны на нашем основном сервере разработки. На нем работает апач. DNS обрабатывается через Cloudflare, но в режиме «Только DNS». В настоящее время, пока я тестирую, ограничений по IP нет. Рекорд для mysite.domain.tld указывает на мой статический IP-адрес 123.123.123.123 и только стандартный оптоволоконный маршрутизатор / модем для бизнеса находится между Интернетом и Pi.

когда я посещаю mysite.domain.tld Например, с моего телефона без Wi-Fi отображается IP-адрес сотового оператора.Когда я wget с удаленного сервера, это' IP отображается в логах. Все работает так, как ожидалось.

Однако, когда я иду в mysite.domain.tld из той же сети, в которой находится Pi, apache регистрирует IP-адрес шлюза маршрутизатора 192.168.1.1. Я ожидаю увидеть свой общедоступный IP-адрес, потому что мое подключение к доменному имени разрешается через Cloudflare в общедоступный IP-адрес. Но вместо этого я вижу в журналах IP-адрес локальной сети.

там ничего не установлено /и т.д./хосты (Я на macOS) и на маршрутизаторе, только переадресация портов для соединений с порта 443 - это маршрутизатор на Pi на том же порту - нигде не упоминается имя домена. Когда я пингую mysite.domain.tld это дает мне Облачная вспышка IP-адрес, чего я и ожидал.

Похоже, что где-то в цепочке тот факт, что мой IP-адрес и общедоступный IP-адрес Pi совпадают, поэтому он переопределяет IP-адрес с IP-адресом внутреннего шлюза. Что здесь происходит на самом деле? Я не разум по сути, я просто хочу убедиться, что могу положиться на тот факт, что 192.168.* IP-адресам можно доверять при настройке ограничения IP-адресов на брандмауэре.

Примечание. CF-Connecting-IP и подобные заголовки здесь не отправляются Cloudflare, я предполагаю, что это происходит только тогда, когда не в режиме «Только DNS». И это кажется быть только тогда, когда я использую то же сетевое соединение, что и Pi.

Nikita Kipriyanov avatar
флаг za
О каком именно маршрутизаторе вы говорите (тот, что с адресом 192.168.1.1)? Скорее всего, это связано с его поведением. Кроме того, побочный вопрос, что вы ожидали увидеть вместо этого в этой области и почему?
флаг cn
@NikitaKipriyanov Это Technicolor Cobalt, то есть стандартный маршрутизатор интернет-провайдера. То, что я ожидал увидеть, это общедоступный IP-адрес соединения, потому что я не подключаюсь к 192.168.1. * (или не имею разрешения домена на внутренний IP-адрес), но я подключаюсь к общедоступному домену через Cloudflare. Поэтому я ожидаю, что общедоступный IP-адрес будет отображаться в apache.
Рейтинг:2
флаг za

Ваш маршрутизатор работает под управлением Linux, и это поведение легко реализовать в любом стандартном дистрибутиве Linux. Я могу предположить, какие правила должны присутствовать в брандмауэре вашего маршрутизатора, чтобы он работал так. Но имейте в виду, что это всего лишь предположение, мы не знаем, как именно правила выглядят на самом деле.

Когда вы перенаправляете порт на свой веб-сервер, он добавляет определенное правило DNAT, которое, вероятно, выглядит так:

iptables -t nat -A PREROUTING -p tcp -d <ваш-внешний-адрес> --dport 443 -j DNAT --to-destination <raspberry-pi-address>

На словах это означает: «прежде чем решить, предназначен ли этот пакет для устройства или должен быть перенаправлен, проверьте, является ли адрес назначения пакета вашим внешним адресом, а порт назначения — 443. Если он совпадает, измените адрес назначения на локальную сеть Raspberry Pi. адрес". Обратите внимание, это правило не фильтрует по интерфейсу.

Также у него определенно есть правило типа SNAT (для предоставления доступа в интернет для локальной сети), возможно, оно выглядит так:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

Другими словами, после того, как маршрутизатор решает, куда должен идти пакет, перед отправкой пакета он изменяет свой исходный адрес на любой адрес исходящего интерфейса (если пакет был отправлен из локальной сети). Опять же, интерфейс ничего не фильтрует.

Теперь рассмотрим ваше HTTPS-соединение. Вы указываете имя хоста в браузере, верно? Вы настраиваете его так, чтобы он разрешался во внешний адрес вашего маршрутизатора, который становится адресом назначения. Ваш исходный адрес находится внутри локальной сети. Итак, кажется, что оба эти правила применимы к пакетам вашего соединения.

Обрабатывая их, маршрутизатор сначала сталкивается с правилом DNAT, проверяет адрес и порт назначения и решает изменить адрес назначения на адрес raspberry pi.Затем он обнаруживает, что интерфейс, через который должен выйти пакет, — это LAN. Затем он проверяет частично транслированный пакет на соответствие второму правилу и выясняет, что исходный адрес находится в локальной сети. Таким образом, он заменяет исходный адрес пакета адресом LAN-интерфейса 192.168.1.1. Это то, что видит ваш Raspberry Pi.

Операция NAT имеет состояние, то есть она также поддерживает запись в таблице, в которой говорится, что было заменено чем и как обнаруживать последующие пересылаемые и ответные пакеты, поэтому все они преобразуются правильно. Да, оказывается, Linux может выполнять DNAT и SNAT одновременно в одном потоке.

Можно ли доверять такому поведению? Я не знаю. Если прошивка маршрутизатора была с открытым исходным кодом, у нас была возможность проверить. Без источника мы не можем быть уверены. Это всегда так, когда исходный код закрыт, поэтому следует избегать продуктов с закрытым исходным кодом, если вы беспокоитесь о безопасности.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.