#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, и трафик был правильно перенаправлен.