NGINX透明TCP代理

时间:2017-03-31 12:30:54

标签: nginx tcp proxy

我有一个ELK堆栈。在两个Logstash主机前面,我设置了两个NGINX负载均衡器作为透明代理。 UDP流量正在成为一种魅力。 TCP使用配置:

stream {
  upstream syslog {
    server sapvmlogstash01.sa.projectplace.com:514;
    server sapvmlogstash02.sa.projectplace.com:514;
  }
  server {
    listen 514;
    proxy_pass syslog;
  }
}

但我得到的是source_ip和source_host LB而不是输入服务器的IP。

设置相同的添加proxy_bind $remote_addr transparent;不起作用,抛出超时。

*1 upstream timed out (110: Connection timed out) while connecting to upstream, client: $SOURCEHOST_IP, server: 0.0.0.0:514, upstream: "$LOGSTASH_IP:514", bytes from/to client:0/0, bytes from/to upstream:0/0

我尝试从这里设置TPROXY: https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/

Logstash主持人:

route add default gw $NGINX_IP
route del default gw $DEFAULT_GW

NGINX主持人:

# Following nginx how-to
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -s $LOGSTASH_IP/24 --sport 514 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 0
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

# Enabling Upstream Servers to Reach External Servers
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

但仍然像以前一样失败了。

获取透明TCP主机缺少什么?

1 个答案:

答案 0 :(得分:0)

官方文件说: proxy_bind $ remote_addr透明;

为了使此参数起作用,通常必须使用超级用户特权运行nginx worker进程。在Linux上,不需要(1.13.8),就像指定了透明参数一样,工作进程从主进程继承CAP_NET_RAW功能。 还需要配置内核路由表以拦截来自代理服务器的网络流量

仅供参考:https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/

相关问题