要求:nginx实现UDP负载,upstream server能拿到client ip&port,并向client回包。
背景:nginx server:10.1.1.200。upstream server:10.1.1.100。port:7400。
1,安装nginx
nginx默认不支持udp负载,安装编译时加上“--with-stream”
2,nginx配置
nginx.conf
stream {
server {
listen 7400 udp reuseport;
proxy_connect_timeout 100s;
proxy_responses 0;
proxy_bind $remote_addr:$remote_port transparent;
proxy_pass 10.1.1.100:7400;
}
}
3,upstream配置
//建立流控规则,enp2s0为网卡名。
# tc qdisc add dev enp2s0 root handle 10: htb
//建立修改规则,将src ip从10.1.1.100改为10.1.1.200
# tc filter add dev enp2s0 parent 10: protocol ip prio 10 u32 match ip src 10.1.1.100 match ip sport 7400 0xffff action nat egress 10.1.1.100 10.1.1.200
//查看规则
#tc qdisc show dev enp2s0
//删除规则
#tc qdisc del dev enp2s0 root
参考:
IP Transparency and Direct Server Return with NGINX and NGINX Plus as Transparent Proxy