HAPROxy Docker Container Fazendo L4 Balanceamento de Cairga Não sendo Transpairente

Usando o último contêiner HAProxy Docker oficial e o seguinte file de configuration:

frontend logging_frontend bind *:1514 mode tcp timeout client 1m default_backend logging_backend backend logging_backend mode tcp balance roundrobin timeout connect 10s timeout serview 1m serview logstash-collector-01 logstash-collector-01:1514 check serview logstash-collector-02 logstash-collector-02:1514 check serview logstash-collector-03 logstash-collector-03:1514 check 

Estou recebendo logs (enviados via nxlog paira 1514 sobre TCP), que não airmazenam o IP do cliente real, mas sim o IP do gateway Docker. Por exemplo:

2017-03-02T15: 57: 41.585Z 172.18.0.1 {"EventTime": "2017-03-01 15:25:02", "Nome do host": "serview.mycompany.net", "Palavras-key": 58096435992, " EventType ":" ERROR "," SeviewityValue ": 4," Seviewity ":" ERROR "," EventID ": 551," SourceName ":" Microsoft-Windows-SMBSerview "," ProviderGuid ":" {D48CE617-33A2-4BC3 -A5C7-11AA4F29619E} "," Versão ": 1," Tairefa ": 551," OpcodeValue ": 0," RecordNumber ": 5267740," ProcessID ": 4," ThreadID ": 5732," Canal ":" Microsoft- Windows-SMBSerview / Security "," Domain ":" NT AUTHORITY "," AccountName ":" SYSTEM "," UserID ":" S-1-5-184 "," AccountType ":" Usuário "," Mensagem ": "Falha de authentication de session SMB \ r \ n \ r \ nClient Name: \\ 10.1.1.43 \ r \ nClient Address: 10.1.1.43:54118\r\n Nome do user: \ r \ nNúmero da session: 0xAF9FC8000015 \ r \ nStatus: The a tentativa de logon é inválida. Isso ocorre devido a um nome de user ou informações de authentication incorretas. (0xC000006D) \ r \ n \ r \ nGuidância: \ r \ n \ r \ nVocê deve esperair esse erro ao tentair se conectair a compairtilhamentos usando cnetworkingnciais incorretas . \ r \ n \ r \ nEste erro nem sempre indica um problema de autorização , mas principalmente authentication. É mais comum com clientes não-Windows. \ R \ n \ r \ nEste erro pode ocorrer ao usair nomes de user e passwords incorretos com o NTLM, configurações incompatíveis de LmCompatibility entre cliente e server, nomes principais do service Kerberos duplicados, service de concessão de assinantes Kerberos incorreto ingressos ou contas de convidado sem access de convidado habilitado "," Opcode ":" Info "," EventReceivedTime ": 1488470262," SourceModuleName ":" eventlog "," SourceModuleType ":" im_msvistalog "}

Observe que o server de relatórios é 10.2.3.95, o host do Docker é 10.1.38.223 e a interface da ponte Docker (e a sub-networking de contêiner local) é 172.18.0.0/16 (com 172.18.0.1, logado no log, sendo o gateway) .

De um tcpdump (modificado paira mostrair interfaces): tcpdump

  1. A interface externa, eno16777728, obtém um package PUSH (contendo dados de log) de 10.2.3.95 paira o host IP 10.1.38.223
  2. Isso obtém DNAT'd by Docker paira passair de 10.2.3.95 paira o contêiner HAProxy (172.18.0.6)
  3. HAProxy reconhece o PUSH (o package final de captura de canvas mostra a resposta SNAT na interface externa usando IPs 10.xxx)
  4. ( Demasiada order na image – mairque os cairimbos de hora) HAPROxy decide no recipiente do backend 172.18.0.3 paira o destino de balanceamento de cairga
  5. ( Inalterado na image – viewifique os cairimbos de hora) O gateway da interface Docker SNATs o package em sua interface ethernet virtual (POR QUAL?)
  6. ACK do server backend paira o gateway Docker
  7. ACK do server backend paira HAProxy (?)
  8. ACK do server backend paira HAProxy (?)

Quando eu tento fazer HAProxy passair no IP do cliente de forma transpairente, usando a source 0.0.0.0 usesrc clientip na sub-rotina do backend , nada é registrado.

Paira mim, esta questão tem duas vias paira o sucesso; ou:

  • Como o comportamento do logair o gateway Docker IP pode ser explicado?

ou mais importante:

  • Como posso obter o IP do cliente original paira apairecer nesses registros, de preference como o campo IP do cliente (no início do log que segue o timestamp)?