Ошибка NGINX sendmsg () (1: Операция запрещена) при проксировании и отправке в восходящий поток

#nginx #udp

Вопрос:

Я пытался внедрить новый поток связи на рабочем сервере NGINX, готовом к работе. Сервер работает внутри набора демонов в kubernetes с параметром hostNetwork true. Этот новый поток будет перенаправлять UDP-соединения de income от клиентов на один сервер с сохранением исходного порта. Я пробовал использовать эту конфигурацию (внутри блока потока):

 server {
     listen 12000-12100 udp;
     proxy_pass backend_name:$server_port;
     proxy_bind $remote_addr:$remote_port transparent;
     proxy_responses 0;
     resolver 1.2.2.10;
}
 

Когда пакет UDP поступает в nginx, вывод журнала:

 2021/07/01 06:19:55 [alert] 30#30: *24650 sendmsg() failed (1: Operation not permitted) while proxying and sending to upstream, udp client: 172.21.2.114, server: 0.0.0.0:12037, upstream: "1.2.123.101:12037", bytes from/to client:1946/0, bytes from/to upstream:0/0
2021/07/01 06:19:56 [alert] 30#30: *24652 sendmsg() failed (1: Operation not permitted) while proxying and sending to upstream, udp client: 172.21.2.114, server: 0.0.0.0:12037, upstream: "1.2.123.101:12037", bytes from/to client:973/0, bytes from/to upstream:0/0
2021/07/01 06:19:58 [alert] 30#30: *24654 sendmsg() failed (1: Operation not permitted) while proxying and sending to upstream, udp client: 172.21.2.114, server: 0.0.0.0:12037, upstream: "1.2.123.101:12037", bytes from/to client:973/0, bytes from/to upstream:0/0
2021/07/01 06:20:02 [alert] 30#30: *24656 sendmsg() failed (1: Operation not permitted) while proxying and sending to upstream, udp client: 172.21.2.114, server: 0.0.0.0:12037, upstream: "1.2.123.101:12037", bytes from/to client:973/0, bytes from/to upstream:0/0
2021/07/01 06:20:10 [alert] 30#30: *24658 sendmsg() failed (1: Operation not permitted) while proxying and sending to upstream, udp client: 172.21.2.114, server: 0.0.0.0:12037, upstream: "1.2.123.101:12037", bytes from/to client:973/0, bytes from/to upstream:0/0
 

Я использую пользовательские корневые и рабочие процессы автоматически в главном файле конфигурации.

Я прочитал это руководство, чтобы помочь мне безрезультатно: [https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/][1]

Я не могу найти ни одной проблемы, подобной той, которая произошла с кем-то другим, сообщение «при проксировании и отправке в восходящий поток» не имеет совпадений в Интернете.

Кто — нибудь может помочь мне разобраться в том, что происходит?

Ответ №1:

Наконец, я понял, что проблема связана с операционной системой, а не только с Nginx. Когда ОС пытается открыть сокет с помощью функции sendmsg, брандмауэр ОС (iptables) запрещает эту операцию. У iptables было правило отклонения для вышестоящих серверов. Это правило было создано службой kubelet, поскольку конечные точки модуля назначения были недоступны. Получение модулей, настроенных в порту назначения, сделало их доступными;таким образом, удалите правила отклонения iptables, и трафик был правильно перенаправлен.