LINUX.ORG.RU
ФорумAdmin

MASQUERADE обваливает php-fpm

 , ,


0

2

Добрый вечер. Есть следующая проблема. На сервере настроен nginx + php-fpm через сокет, php разные сайты слушают 127.0.0.1 на разных портах:

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      447/php-fpm: master
tcp        0      0 127.0.0.1:9001          0.0.0.0:*               LISTEN      447/php-fpm: master
...

Один из портов этого сервера проброшен на другой сервер:

/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport (LOCALPRT) -j DNAT --to (REMOTEIP):(REMOTEPORT)
/sbin/iptables -A FORWARD -d (REMOTEIP) -p tcp --dport (REMOTEPORT) -j ACCEPT

Интерфейсы eth0, lo, есть еще tun0 но он сейчас не используется.

Для работы проброса портов необходим

/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE

Но как только я прописываю это правило - отваливаются все сайты, ошибка 500-какая-то, в логе:

*39 recv() failed (104: Connection reset by peer) while reading response header from upstream
*79 recv() failed (104: Connection reset by peer) while reading response header from upstream

Убираю MASQUERADE - проброс не работает, сайты работают.

Пробовал обойти эту проблему как-то так:

/sbin/iptables -t nat -A POSTROUTING ! -o lo -j MASQUERADE

но это ничего не дало: если правило есть - не работают сайты, если его нет - не работает проброс. Можно конечно все сайты (php-fpm) перевести на unix сокеты, но не хотелось бы. Что посоветуете, как исправить?

/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport (LOCALPRT) -j DNAT --to (REMOTEIP):(REMOTEPORT)

Для работы проброса портов необходим

/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE

Если порт-форвардинг в пределах своей сети, то SNAT который ты сделал через маскарадинг дествительно требуется.
Ты сделал двойной NAT (DNAT+SNAT) который требует особой аккуратности.
Я бы в построутинге сделал правило MASQUERADE/SNAT только для перенаправленных пакетов например при помощи

iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -j MASQUERADE
Есть подозрение, что ты добавил правило с "! -o lo " после "-j MASQUERADE" и оно просто не работало.

Правило «iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE» тоже избыточное.

vel ★★★★★
()

Что за 4.2 в заголовке? Ничего плохого с твоим php-fpm не происходит, а вот проброс очевидно не работает и коннекты дропаются.

firkax ★★★★★
()

Дам вам совет - ничто вас не ограничивает использовать 127.0.0.1, но также вы можете использовать и 127.0.0.2, 127.0.0.3 и так далее до 127.255.255.254.

По своему опыту - лучше менять ip-адреса, а порт оставить один.

И еще ответьте на вопрос - каким образом правило в FORWARD должно отработать для 127.0.0.1? для loopback можно использовать только INPUT, OUTPUT.

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