TPROXY Not working with HAProxy, Ubuntu 14.04

Posted by Nyxynyx on Server Fault See other posts from Server Fault or by Nyxynyx
Published on 2014-08-20T04:19:49Z Indexed on 2014/08/20 4:23 UTC
Read the original article Hit count: 568

I'm trying to use HAProxy as a fully transparent proxy using TPROXY in Ubuntu 14.04. HAProxy will be setup on the first server with eth1 111.111.250.250 and eth0 10.111.128.134. The single balanced server has eth1 and eth0 as well. eth1 is the public facing network interface while eth0 is for the private network which both servers are in.

Problem: I'm able to connect to the balanced server's port 1234 directly (via eth1) but am not able to reach the balanced server via Haproxy port 1234 (which redirects to 1234 via eth0). Am I missing out something in this configuration?


On the HAProxy server

The current kernel is:

Linux extremehash-lb2 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

The kernel appears to have TPROXY support:

# grep TPROXY /boot/config-3.13.0-24-generic 
CONFIG_NETFILTER_XT_TARGET_TPROXY=m

HAProxy was compiled with TPROXY support:

haproxy -vv
HA-Proxy version 1.5.3 2014/07/25
Copyright 2000-2014 Willy Tarreau <[email protected]>

Build options :
  TARGET  = linux26
  CPU     = x86_64
  CC      = gcc
  CFLAGS  = -g -fno-strict-aliasing
  OPTIONS = USE_LINUX_TPROXY=1 USE_LIBCRYPT=1 USE_STATIC_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built without zlib support (USE_ZLIB not set)
Compression algorithms supported : identity
Built without OpenSSL support (USE_OPENSSL not set)
Built with PCRE version : 8.31 2012-07-06
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

In /etc/haproxy/haproxy.cfg, I've configured a port to have the following options:

listen test1235 :1234
    mode tcp
    option tcplog
    balance leastconn
    source 0.0.0.0 usesrc clientip

    server balanced1 10.111.163.76:1234 check inter 5s rise 2 fall 4 weight 4

On the balanced server

In /etc/networking/interfaces I've set the gateway for eth0 to be the HAProxy box 10.111.128.134 and restarted networking.

auto eth0 eth1
iface eth0 inet static
        address 111.111.250.250
        netmask 255.255.224.0
        gateway 111.131.224.1
        dns-nameservers 8.8.4.4 8.8.8.8 209.244.0.3
iface eth1 inet static
        address 10.111.163.76
        netmask 255.255.0.0
        gateway 10.111.128.134

ip route gives:

default via 111.111.224.1 dev eth0 
10.111.0.0/16 dev eth1  proto kernel  scope link  src 10.111.163.76 
111.111.224.0/19 dev eth0  proto kernel  scope link  src 111.111.250.250 

© Server Fault or respective owner

Related posts about ubuntu

Related posts about networking