connect() failed (1: Operation not permitted) while connecting to upstream
Alexey V. Karagodov
kav at karagodov.name
Mon Jul 28 09:23:36 MSD 2008
On 28.07.2008, at 0:58, Maxim Dounin wrote:
> Hello!
>
> On Sun, Jul 27, 2008 at 03:39:52PM +0300, andrey at mail.anti-aging-drugs.com
> wrote:
>
>> Проблема временно решилась использование юникс-сокета.
>>
>> pf -vsi показал при кратковременном включении проксирования через
>> tcp.
>>
>> state-mismatch 16733 109.4/s
>>
>> О чем это может говорить?
>
> Это говорит о том что надо *выключить* keep state между nginx'ом и
> бекендами.
>
> Происхождение указанных state-mismatch вероятнее всего - из-за
> коллизий src-портов новых соединений со старыми соединениями,
> находящимися в TIME_WAIT.
>
> Если в отсутствие pf-а ядро такие коннекции нормально обрабатывает
> (удалив старые в TIME_WAIT), то pf обнаружив у себя соответствующий
> state - считает что случился state mismatch и возвращает EPERM.
> Боротся - в первую очередь отключением keep state для коннекций
> между nginx'ом и бекендом. Если по каким-то причинам отключить keep
> state нельзя - то в первую очередь отключить рандомизацию src-
> портов, а во вторую - растянуть portrange. Как то так:
>
> sysctl net.inet.ip.portrange.randomized=0
> sysctl net.inet.ip.portrange.first=1024
>
> Есть ещё ручки в pf'е, но на память я их не помню. В любом случае -
> в первую очередь добиться чтобы для соответствующих коннекций
> state'ы не создавались вообще. Если не получается написать грамотно
> правила - имеет смысл попробовать банальный "set skip on lo0" в
> конфиге pf'а.
эта "банальность" обязательна, если не хочется иметь проблем с
локальными коннектами. например - невозможность их установить вообще.
>
>
> Maxim Dounin
>
>>
>> Вы писали Sunday, July 27, 2008, 1:57:56 PM:
>>
>>> no state работает с 7.0 (у меня 6.3)
>>> За 4 часа без pf не было ошибок, после минуты работы -- есть.
>>> Может надо что-то потюнить?
>>
>>> nginx/0.6.31
>>
>>> # uname -a
>>> FreeBSD flybb.ru 6.3-RELEASE-p1 FreeBSD 6.3-RELEASE-p1 #0: Wed Feb
>>> 13 02:56:56 UTC 2008 root at i386-builder.daemonology.net:/usr/obj/
>>> usr/src/sys/SMP i386
>>
>>
>>> Вы писали Sunday, July 27, 2008, 9:26:45 AM:
>>
>>>> On Sun, Jul 27, 2008 at 09:19:52AM +0300,
>>>> andrey at mail.anti-aging-drugs.com wrote:
>>
>>>>> Актуальный конфиг pf. Проблема воспроизводится.
>>>>> pass in proto tcp from any to any port 80 keep state
>>>>> pass in proto tcp from 127.0.0.1 to port 9000
>>>>> pass out proto tcp from 127.0.0.1 to port 9000
>>>>> pass in proto tcp from 127.0.0.1 to port 25 keep state
>>>>> pass in proto tcp from 127.0.0.1 to port 3306 keep state
>>>>> pass in proto icmp from 213.186.114.123 to any keep state
>>>>> pass in proto {tcp, udp} from **** to any port 22 keep state
>>>>> pass in proto {tcp, udp} from **** to any port 22 keep state
>>>>> pass out all keep state
>>
>>>> В pf из OpenBSD 4.1, keep state делается по умолчанию.
>>>> Соответственно, нужно либо явно выключать его - "no state", либо
>>>> увеличивать число states - set limit { states XXXXX }.
>>
>>>> Для 127.0.0.1 я бы без сомнений выключил:
>>
>>>> pass in proto tcp from 127.0.0.1 to port 9000 no state
>>>> pass out proto tcp from 127.0.0.1 to port 9000 no state
>>
>>>>> Вы писали Friday, May 16, 2008, 3:56:20 PM:
>>>>> > On Fri, May 16, 2008 at 03:05:33PM +0300, Vladimir Rekshta
>>>>> wrote:
>>>>> >> используется pf с такими правилами:
>>>>> >> >> pass in quick on $ext_if proto tcp from < > to { } port
>>>>> { } flags S/SA
>>>>> >> modulate state
>>>>> > Нужно убрать modulate и keepstate между nginx'ом и бэкендами.
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>> С уважением,
>> Andrey mailto:andrey at mail.anti-aging-drugs.com
>>
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2187 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20080728/12a1f0b8/attachment.bin>
More information about the nginx-ru
mailing list