Welcome! Log In Create A New Profile

Advanced

Re: How to configure Nginx LB IP-Transparency for custom UDP application

Aleksandar Lazic
July 19, 2019 04:50PM
Am 16.07.2019 um 13:29 schrieb Jeya Murugan:
> @all : Can someone help /point-out what i have missed in proxy_protocol
> here? 

the proxy protocol is only designed for tcp not udp.

> > I am using *NGINX 1.13.5 as a Load Balancer for one of my
> > CUSTOM-APPLICATION *which will listen on* UDP port 2231,67 and 68.*
> >
> > I am trying for Load Balancing with IP-Transparency.
> >
> >
> >
> > When I using the proxy_protocol method the packets received from a remote
> > client is modified and send to upstream by NGINX LB not sure why/how the
> > packet is modified and also the remote client IP is NOT as source IP.
>
> The proxy_protocol directive adds a PROXY protocol header to the datagram,
> that's why it's modified.  The directive does not change the source address.
> Instead, the remote client address is passed in the PROXY protocol header.
>
> <jeya> : Okay. Do we have any options to send remote client IP as source
> address? Due to additional proxy header the packet is dropped by the
> application running in the upstream.How can the proxy header can be
> stripped in the upstream end? 
>
>                     Do we need to do configuration/rules on the upstream end?
>  
>
> > When I using proxy_bind, the packet is forwarded to configured
> upstream but
> > the source IP is not updated with Remote Client IP.
>
> What is the reason for the port next to $remote_addr in proxy_bind?
> Also make sure nginx master runs with sufficient privileges.
>
>  
> <Jeya> : Yes, application running with root privilege as specified in the
> conf file
>
> Also, the proxy_bind syntax is referred in the below link.'
>
> https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/#proxy_bind 
>
> proxy_bind $remote_addr:$remote_port transparent; 
>
>
> > *Basically, in both methods, the remote client address was not used as a
> > source IP. I hope I missed some minor parts. Can someone help to resolve
> > this issue?*
> >
> >
> >
> > The following are the detailed configuration for your reference.
> >
> >
> >
> > *Method 1 :- proxy_protocol*
> >
> >
> >
> > *Configuration:*
> >
> >
> >
> > user  *root;*
> > worker_processes  1;
> > error_log  /var/log/nginx/error.log debug;
> > pid        /var/run/nginx.pid;
> > events {
> >     worker_connections  1024;
> >
> > }
> >
> > stream {
> >     server {
> >         listen 10.43.18.107:2231 http://10.43.18.107:2231 udp;
> >         proxy_protocol on;
> >         proxy_pass 10.43.18.172:2231 http://10.43.18.172:2231;
> >     }
> >     server {
> >         listen 10.43.18.107:67 http://10.43.18.107:67 udp;
> >         proxy_protocol on;
> >         proxy_pass 10.43.18.172:67 http://10.43.18.172:67;
> >     }
> >     server {
> >         listen 10.43.18.107:68 http://10.43.18.107:68 udp;
> >         proxy_protocol on;
> >         proxy_pass 10.43.18.172:68 http://10.43.18.172:68;
> >     }
> > }
> >
> > *TCPDUMP O/P :*
> >
> >
> >
> > *From LB:*
> >
> > 10:05:07.284259 IP 10.43.18.116.2231 > 10.43.18.107.2231: UDP, length 43
> >
> > 10:05:07.284555 IP 10.43.18.107.51775 > 10.43.18.172.2231: UDP, length 91
> >
> >
> >
> > *From upstream[Custom application]:*
> >
> > 10:05:07.284442 IP 10.43.18.107.51775 > 10.43.18.172.2231: UDP, length 91
> >
> >
> >
> > *Method 2:- [ proxy_bind ]*
> >
> >
> >
> > *Configuration:*
> >
> >
> >
> > user  root;
> > worker_processes  1;
> > error_log  /var/log/nginx/error.log debug;
> > pid        /var/run/nginx.pid;
> > events {
> >     worker_connections  1024;
> > }
> >
> > stream {
> >     server {
> >         listen 10.43.18.107:2231 http://10.43.18.107:2231 udp;
> >         proxy_bind $remote_addr:2231 transparent;
> >         proxy_pass 10.43.18.172:2231 http://10.43.18.172:2231;
> >     }
> >     server {
> >         listen 10.43.18.107:67 http://10.43.18.107:67 udp;
> >         proxy_bind $remote_addr:67 transparent;
> >         proxy_pass 10.43.18.172:67 http://10.43.18.172:67;
> >     }
> >     server {
> >         listen 10.43.18.107:68 http://10.43.18.107:68 udp;
> >         proxy_bind $remote_addr:68 transparent;
> >         proxy_pass 10.43.18.172:68 http://10.43.18.172:68;
> >     }
> >
> > }
> >
> >
> >
> > *Also, added the below rules :*
> >
> >
> >
> > ip rule add fwmark 1 lookup 100
> >
> > ip route add local 0.0.0.0/0 http://0.0.0.0/0 dev lo table 100
> > iptables -t mangle -A PREROUTING -p udp -s 10.43.18.0/24
> http://10.43.18.0/24 --sport 2231 -j
> > MARK --set-xmark 0x1/0xffffffff
> > iptables -t mangle -A PREROUTING -p udp -s 10.43.18.0/24
> http://10.43.18.0/24 --sport 67 -j MARK
> > --set-xmark 0x1/0xffffffff
> > iptables -t mangle -A PREROUTING -p udp -s 10.43.18.0/24
> http://10.43.18.0/24 --sport 68 -j MARK
> > --set-xmark 0x1/0xffffffff
> >
> >
> >
> > However, still, the packet is sent from NGINX LB with its own IP, not with
> > the remote client IP address.
> >
> >
> >
> > *TCPDUMP O/P from LB:*
> >
> >
> >
> > 11:49:51.999829 IP 10.43.18.116.2231 > 10.43.18.107.2231: UDP, length 43
> >
> > 11:49:52.000161 IP 10.43.18.107.2231 > 10.43.18.172.2231: UDP, length 43
> >
> >
> >
> > *TPCDUM O/P from Upstream:*
> >
> >
> >
> > 11:49:52.001155 IP 10.43.18.107.2231 > 10.43.18.172.2231: UDP, length 43
> >
> >
> >
> > *Note:* I have followed the below link.
> >
> >
> >
> >
> https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/
>
> > _______________________________________________
> > nginx mailing list
> > nginx@nginx.org <mailto:nginx@nginx.org>
> > http://mailman.nginx.org/mailman/listinfo/nginx
>
>
> --
> Roman Arutyunyan
> _______________________________________________
> nginx mailing list
> nginx@nginx.org <mailto:nginx@nginx.org>
> http://mailman.nginx.org/mailman/listinfo/nginx
>
>
> _______________________________________________
> nginx mailing list
> nginx@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
>

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

How to configure Nginx LB IP-Transparency for custom UDP application

Jeya Murugan July 09, 2019 08:26AM

Re: How to configure Nginx LB IP-Transparency for custom UDP application

Roman Arutyunyan July 09, 2019 11:12AM

Re: How to configure Nginx LB IP-Transparency for custom UDP application

jbalasubramanian July 12, 2019 02:16PM

Re: How to configure Nginx LB IP-Transparency for custom UDP application

jbalasubramanian July 16, 2019 07:30AM

Re: How to configure Nginx LB IP-Transparency for custom UDP application

Aleksandar Lazic July 19, 2019 04:50PM

Re: How to configure Nginx LB IP-Transparency for custom UDP application

Francis Daly July 19, 2019 03:44PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 297
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready