LINUX.ORG.RU
решено ФорумAdmin

Получить IP в Nginx запущенного за SSH туннелем

 , ,


0

1

Ситуация у меня такая. Есть публичный голый VPS, есть приватная виртуалочка. На виртуалке Nginx.

Порты 80 и 443 прокинуты через ssh -R на публичный VPS с приватной виртуалки. Все работает, но я вижу в логах IP 127.0.0.1, что как будто бы логично, но я хочу видеть реальный IP и, что самое главное: я хочу реальные IP использовать в директивах allow/deny.

Разные способы поглядел, в том числе использование в http блоке директив:

set_real_ip_from 127.0.0.1;   # Доверяем локальному прокси или туннелю
set_real_ip_from 192.168.0.0/16; # Доверенные диапазоны IP
real_ip_header X-Forwarded-For;
real_ip_recursive on;

Не взлетело и поэтому я тут :)



Последнее исправление: lx1 (всего исправлений: 1)
Ответ на: комментарий от lx1

Изящное это ipsec/ipip/openvpn/wg и iptables -j DNAT между виртуалками (если они не одна в другой). Если вложенные - то без туннеля. ssh это как раз классический костыль

P.S.: писать правила для IP это не комильфо. Еще в далеком 2001 мне попалась софтина в которой сессии привязывались к IP. Зашел через проксю админ - и ВСЕ стали админами, лол.

no-dashi-v2 ★★★
()
Ответ на: комментарий от no-dashi-v2

Да, я как раз хотел избежать использования того же wg. Если бы не необходимость ограничить доступ по IP и видеть в логах реальные IP, то я бы оставил все как есть.

lx1
() автор топика
Последнее исправление: lx1 (всего исправлений: 1)
Ответ на: комментарий от lx1
  1. Порт с приватной виртуалки пробрасывай на публичную на 127.0.0.1:10080. Чтобы на публичной виртуалке curl http://127.0.0.1:10080 возвращал страницу с приватной виртуалки.

  2. На публичной виртуалке подними отдельный nginx (который будет слушать на 0.0.0.0:80). Настрой реверс-проксирование на 127.0.0.1:10080.

  3. Либо передавай IP клиента через хедеры (типа x-forwarded-for или x-real-ip), либо используй PROXY протокол, в котором IP клиента передаётся в рамках протокола. Во втором случае тебе надо будет настроить оба nginx-а. Возможно через заголовки будет проще, если тебя устроил функционал.

Через ssh reverse proxy невозможно получить IP адрес клиента автоматически. Точней возможно, если модифицировать код самого ssh-клиента, но штатными средствами вроде никак.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от lx1

Ты не совсем понял. Настраивать nginx (на PROXY или x-forwarded-for) нужно на обеих сторонах. Если не очевидно, настраивать по-разному (одна сторона reverse proxy, другая - upstream)

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)

Спасибо за подсказки.

Я в итоге все-таки пошел по пути наименьшего сопротивления. Поднял wg между виртуалкой и VPS. Сделал proxy_pass и нужные ограничения выставил на VPS.

lx1
() автор топика