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