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

Подскажите по iptables NAT

 ,


1

1

Есть сервер, на котором запущен NAT, за которым есть веб сервер. Порты пробрасываются следующим скриптом:

EXT_IP="ТУТ АЙПИ"
INT_IP="192.168.0.1"
EXT_IF=eth0
INT_IF=br0
LAN_IP=$1
SRV_PORT=$2

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

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

Спасибо

★★★★★

Достаточно просто сделать так:

EXT_IP="ТУТ АЙПИ"
INT_IP="192.168.0.1"
EXT_IF=eth0
INT_IF=br0
LAN_IP=$1
SRV_PORT=$2

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

SNAT здесь не нужен, он меняет адрес источника и подключения отображаются с 192.168.0.1. А смысл DNAT в цепочке OUTPUT мне вообще не понятен.

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

Спасибо, попробую. Это копипаста из инета, т.к. сам не разобрался в iptables.

xorik ★★★★★
() автор топика

Есть еще вариант проксировать через nginx. Тогда нужно будет читать X-Forwarded-For хедер.

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

Для X-Forwarded-For не нужен прокси, т.к. nat на него вообще не влияет. Можно и проксировать. В любом случае нужно только поменять формат лога, чтобы вместо $remote_addr в лог писался $http_x_real_ip.

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

В общем вроде разобрался по этому руководству: http://ru.wikibooks.org/wiki/Iptables

Цепочка output не обязательна, просто чтобы с компа с iptables был доступ к нужному порту. А вот проблема была в том что входящий айпи заменялся на 192.168.0.1, а это нужно только для локалки, поэтому надо было добавить в postrouting проверку --src. Теоретически должно заработать, проверю чуть позже :)

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