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

ip в логах apache через iptables nat


0

0

Привет!

www-сервер стоит за роутером(gentoo, iptables), на котором настроен порт-форвардинг:

# allow http to server

$ipt -t nat -A PREROUTING -p tcp -d $OUT_IP --dport 80 -j DNAT --to $SERVER:80

# allow http to server from lan

$ipt -t nat -A POSTROUTING -p tcp --dst $SERVER --dport 80 -j SNAT --to-source $IN_IP

Все отлично работает, но в логах apache ip адреса всех клиентов идентичны и равны ip адресу роутера во внутренней сети:

$IN_IP - - [16/Jan/2010:00:46:51 +0300] «GET /forum/index.php?topic=82.0 HTTP/1.1» 200 5175

$IN_IP - - [16/Jan/2010:00:56:57 +0300] «GET / HTTP/1.1» 200 1107

...

Как сделать так, чтобы там были настоящие адреса?


Из-за чего было введено второе правило? Из-за того, что роутер не является дефолтным шлюзом? Или с целью обеспечения проброса для машин в вашей локалке? Во втором случае достаточно в SNAT-правило добавить «-s адрес_локалки/маска», и тогда подмена исходного адреса будет происходить только для обращений из локалки.

Еще один вариант — использование nginx в качестве фронтенда + правильная настройка апача.

nnz ★★★★
()

Достаточно должно быть только dnat правила, для проброса snat излишен в большинстве случаев (если только не очень хитрая схема, хотя всё равно излишен.

CyberTribe ★★
()
Ответ на: комментарий от CyberTribe

SNAT нужен как минмум в двух случаях.

Первый: если на проброшенный порт будут стучаться хосты из той же локалки, то веб-сервер ответит непосредственно им, а они будут ждать ответа от роутера, и в результате коннекты будут вылетать по таймауту.

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

nnz ★★★★
()
Ответ на: комментарий от CyberTribe

По личному опыту: в большинстве случаев как раз прибегают юзера из локалки и начинают плакаться, что «картинки нигрузяццо».

Впрочем, я предпочитаю подобные проблемы решать через named's views, что позволяет заодно разгрузить несчастный роутер. Пусть напрямую на локальный сервак лезут.

nnz ★★★★
()
Ответ на: комментарий от nnz

4nnz спасибо! все работает!

второе правило, чтоб по virtualhost'ы работали внутри локалки. только сейчас понял, что надо dns использовать. причем совместно с этим правилом.

ien
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.