LINUX.ORG.RU
ФорумAdmin

NAT + ipables + nginx внутри сети: все запросы якобы идут от внешнего IP роутера


0

1

Я думаю, проблема довольно классическая, но так как в iptables я все еще плаваю (ибо редко с ним имею дело), понятного мне решения я так и не нашел.

Итак, имеем: 1. Комп, выступающий в роли роутера. На нем Linux с iptables. 2. Сервер с nginx внутри локалки, на который проброшен 80-й порт. 3. Рядовые компы внутри локалки, которые получают доступ в инет через вышеупомянутый роутер.

Все работает как надо, но есть одна проблема: в логах nginx все запросы к серверу извне видны как будто они идут от внешнего IP роутера, и как следствие имеем ряд неприятных последствий.

iptables на роутере настроен следующим образом:

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/$INET_IFACE/proxy_arp

# Clear ALL rules
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t filter -F
$IPTABLES -t filter -X
#----------------------------------------------------------------------------------------------------------
# POSTROUTING chain
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_IP_RANGE -j SNAT --to-source $STATIC_IP

# Port forwarding
$IPTABLES -t nat -A PREROUTING -p tcp -i $INET_IFACE --dport 80 -j DNAT --to 192.168.0.2:80

# Forwarding itself
$IPTABLES -t nat -A POSTROUTING -o $LAN_IFACE -j SNAT --to-source $STATIC_IP

# Forward to connect via local net to external IP
$IPTABLES -t nat -A PREROUTING -i eth0 -p tcp -m tcp -d $STATIC_IP/32 --dport 80 -j DNAT --to-destination 192.168.0.2:80

В логах nginx виднеется такое (AA.BB.CC.DD - внешний IP роутера):

2014/01/18 00:22:16 [error] 2607#0: *11106146 limiting connections by zone "conn_limit_per_ip", client: 192.168.0.1, server: localhost, request: "POST /index.php HTTP/1.1", host: "AA.BB.CC.DD"

Как сделать так, чтобы были видны именно внешние IP-адреса тех, кто шлет запросы?

Выкинь вторую половину правил.

thesis ★★★★★ ()

а можно глянуть все правила iptables, так чисто поржать.

vxzvxz ★★★ ()

1. Выключи proxy_arp
2. Убери это правило:

$IPTABLES -t nat -A POSTROUTING -o $LAN_IFACE -j SNAT --to-source $STATIC_IP

3. На веб-сервере шлюз должен быть default gateway
4. Добавь в FORWARD правила:
- разрешающее форвардинг пакетов, приходящих с внешнего интерфейса, на ip веб-сервера
- разрешение для ESTABLISHED,REALTED, если его ещё нет

selivan ★★★ ()
Последнее исправление: selivan (всего исправлений: 2 )
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.