Сервер получает реальный IP-адрес клиента

Nginx

0x01 Сначала проверьте вопрос

Тестовая среда Подсказка платежного канала WeChat网络环境未能通过安全验证,请稍后再试, обычно это первое Подумав, что могут быть нестыковки в участии WeChat Fangzhen в сетевом взаимодействии двух сторон, я пролистал руководство и определил, что именно с такой проблемы начинается процесс устранения неполадок.

  1. Может быть неправильный способ получить настоящий IP

    1. getenv('HTTP_CLIENT_IP')
    2. getenv('HTTP_X_FORWARDED_FOR')
    3. getenv('REMOTE_ADDR')
    4. filter_var($remote_ip, FILTER_VALIDATE_IP)
    5. были получены и отфильтрованы последовательно
    6. С твердой программой проблем нет, расходится вверх
  2. Обратный ли прокси

    После обратного прокси, из-заwebМежду серверами добавляется промежуточный слой, поэтому веб-сервер не может напрямую получать данные клиента.ip, только через$remote_addrПеременная получит IP-адрес обратного прокси-сервера, проверит, что такой проблемы нет, а затем пойдет вверх, студенты, которые хорошо разбираются в сетевых коммуникациях, говорят, что они никогда не признают поражение

  3. возможныйNATвыход из наделаIP, или распределение службы балансировки нагрузки ненормально

    1. Сначала получите мой локальный IP-адрес в интрасети и экстрасети, чтобы облегчить устранение неполадок позже.
    # 本机IP
    ifconfig | grep -A 1 "en" | grep broadcast | cut -d " " -f 2
    # 外网IP
    curl --silent http://icanhazip.com
    
    1. Проверьте, кто является целью установления соединения с портом 80
     netstat -tn|grep 80|akw '{print $5}'|awk -F '{print $1}' | grep [本地IP]
    

    Здесь есть проблема, шахты нетIP, затем сnginx $remote_addrПолучите IP в качестве ссылки, этоnginxпоследнее рукопожатиеIP,$remote_addr = 10.168.0.0/16часть

    существуетnginxпечатать в$remote_addr, И вserver_nameДобавить текущую машинуip, проверьте IP-адрес балансировки нагрузки и локальный IP-адрес соответственно и, наконец, определите, что проблема возникает, когда сервер балансировки нагрузки работает ненормально.


0x02 Стек LNMP принимает реальный IP-адрес

LNMPвнутри стекаPHPвсе полученоTCPИнформация о работе находится спередиNginxпройти черезfastcgiперешел к нему вроде$_SERVER['REMOTE_ADDR']Зависит отinclude fastcgi.conf;импорт, равныйnginxиз$remote_addr

NginxНесколько переменных в:

  • $remote_addr

    от имени клиентаIP, но его значение не предоставляется клиентом, а указывается сервером по ip клиента,icanhazipПринцип тот же, когда ваш браузер обращается к веб-сайту, при условии, что посередине нет прокси-сервера, веб-сервер веб-сайтаremote_addrУстановите его на IP-адрес, который вы предоставляете в общедоступной сети.Если вы используете прокси-сервер, ваш браузер сначала получит доступ к прокси-серверу, а затем перенаправит его на веб-сайт через прокси-сервер, так чтоwebСервер поставитremote_addrУстановите IP-адрес этого прокси-сервера, если только прокси-сервер не добавит ваш IP-адрес к запросу.headerпереданwebсервер.

  • $proxy_add_x_forwarded_for

    $proxy_add_x_forwarded_forПеременная содержит "" в заголовке клиентского запроса.X-Forwarded-For",и$remote_addrДве части разделяются запятыми.X-Forwarded-For(называемый XFF),X-Forwarded-Forявляется заголовком расширения HTTP.RFC 2616Протокол не определяет его, он изначально был определенSquidЭто кэширующее прокси-программное обеспечение введено для представленияHTTPРеальный IP запрашивающего. В настоящее время он стал стандартом де-факто и используется большинствомHTTPСлужбы пересылки, такие как прокси и балансировка нагрузки, широко используются и пишутсяRFC 7239(Стандарт переадресованного HTTP-расширения.

  • $proxy_set_header

    Это было объяснено в устранении неполадок, и заголовок пост-прокси можно установить

      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    
  • X-Real-IP

    Как правило, такие какX-Real-IPЭто настраиваемое поле заголовка, обычноHTTPПрокси используется для представления поколения, с которым онTCPподключенное устройствоIP, это устройство может быть другими прокси, а может быть и реальным запросчиком, что зависит от количества уровней, пройденных через прокси или всегда будет реальнымIPВсю дорогу прошел. (Помните: все, что отправлено клиентом, не заслуживает доверия)

При использовании многоуровневого прокси или CDN, если прокси-сервер не передает реальный IP-адрес пользователя, сервер никогда не сможет получить реальный IP-адрес пользователя.

0x03 Откуда реальный IP пользователя

  1. Провайдер широкополосного доступа предлагает выделенный IPНапример, если у телекома широкополосный доступ в интернет дома, телеком присвоил общедоступный сетевой ip, то ip-путь, по которому проходит запрос, выглядит следующим образом:


    В этой ситуации,119.147.19.234получите116.1.2.3добавленная к заголовку информация, переданная10.168.0.0/32, поэтому в этом случае мы получаем IP-адрес пользователя:116.1.2.3. если119.110.0.0/16не ставил116.1.2.3Прикрепленный к информации заголовка и переданный на бизнес-сервер, бизнес-сервер может принимать только IP-адрес верхнего уровня.

  2. Провайдеры широкополосного доступа не могут предоставить выделенный IP

    У провайдера широкополосного доступа недостаточно общедоступной сетиip, размещение является внутренней сетьюip, такие как небольшие ISP, такие как длина и ширина. Путь запроса может быть следующим:

    IP-адрес пользователя, полученный в этом случае,211.162.78.1. При этом одному IP могут соответствовать десятки и сотни пользователей.

  3. Мобильный доступ в Интернет 2G

Сетевые провайдеры не могут напрямую предоставлять IP одному пользовательскому терминалу, поэтому China MobilecmwapВозьмем, к примеру, Интернет, поэтому путь запроса может быть таким:

IP-адрес пользователя, полученный в этом случае,202.96.75.1. В 2008 году у всего Guangdong Unicom было только три общедоступных сетевых IP-адреса для мобильного доступа в Интернет, поэтому в этом случае появление сотен тысяч пользователей на одном и том же IP-адресе является нормальным явлением.

  1. Компании с десятками или сотнями тысяч сотрудников

    Это также происходит из того жеipОн может охватывать десятки тысяч пользователей, но экспортных IP-адресов может быть всего несколько.


0x04 NAT [Network Address Translation]

Китайские средства网络地址转换, что позволяет всей организации использовать общийIPАдрес появляется вInternetначальство.

NATсуществуетOSI参考模型Сетевой уровень (уровень 3), представляющий собой технологию, преобразующую внутренние частные сетевые адреса (IP-адреса) в законные сетевые IP-адреса.NATПозволяет тем внутренним сетям, которые используют частные адреса, подключаться кInternetили другойIPонлайн.NATКогда маршрутизатор отправляет пакеты из внутренней сети в сеть общего пользования, онIPзаголовок пакетачастный адреспреобразовать в законныйIPадрес.

RFC1918Указаны три выделенных адреса, которые используются как частная внутренняя сеть.

  • Класс А: 10.0.0.0 — 10.255.255.255 10.0.0.0/8
  • Класс Б: 172.16.0.0 — 172.31.255.255 172.16.0.0/12
  • Класс С: 192.168.0.0 — 192.168.255.255 192.168.0.0/16

эти троечастный адресОн маршрутизируется сам по себе, но маршрутизатор в общедоступной сети не будет пересылать эти три блока.частный адрестрафика; когда компания внутренне настраивает этичастный адресПосле того, как внутренний компьютер свяжется с внешней сетью, пограничный маршрут компании будет проходить черезNATилиPATтехнология, внутреннеечастный адресПреобразованный в IP-адрес внешней сети, исходный адрес, видимый извне, представляет собой общедоступную сеть, преобразованную граничным маршрутом компании.IPадрес, что в некотором смысле также повышает безопасность внутренней сети

Этот процесс проходит черезNATЭто реализовано с помощью записи локального адреса и записи сопоставления глобальных адресов вNATНастройте такую ​​запись сопоставления на маршрутизаторе.

Таким образом公网 IPВ личном доступе внизуIPадрес.


0x05 IPV6 идет?

Когда я писал эту статью, я увидел толчок, говорящий о том, что Али полностью применяетсяIPV6, это дело весьма существенное

Мы знаем, что периодIPv4стандартныйIPадрес, всего4 X 8 = 32состоит из двоичных цифр, теоретически существует2^32IP-адреса. равный4,294,967,296,42более 100 миллионовIPv4адрес г.

Ссылаться наМировая статистика пользователей ИнтернетаСогласно отчету, сейчас в мире около4,208,571,287Люди в сети, а это значит, что это почти здесьipv4адрес дизайн максимумIPподсчитано

Но не волнуйтесь, вышеупомянутоеNAT,позволятьIPv4общественная сетьIPДаже если вы иссякнете, вы сможете справиться с этим.

прибытьIPv6,по сравнению сIPv4Самым большим улучшением является то, что количество цифр было значительно увеличено, и оно стало 8 4-значными шестнадцатеричными цифрами. То есть есть2^128КусокIPv6адрес. Одной из каждой песчинки на земле достаточно

место хранения2^128Что такое концепция теории байтов?На сегодняшнем квантовом уровне, предполагая, что вычислительные устройства могут работать на атомном уровне, каждый килограмм массы может хранить около 10 битов в 25-й степени, а для хранения 2 в степени требуется около 128 байтов. из 2.272 trillion = 2720000亿公斤.

Наконец, хороших выходных, Beijing Unicom поддержалipv6Теперь я тестирую в Ванцзине, я могу получить егоipv6адрес