Proxy Reverso do Squid com várias Interfaces WAN

1

Estou com a seguinte configuração:

  • duas linhas WAN, cada uma com um IP público estático, ambas conectadas a um roteador separado, fornecendo duas redes internas (net1 e net2)
  • um servidor Ubuntu 14.04 LTS com o squid 3.3.8 instalado (compilado com --enable-ssl), tendo duas interfaces, localizadas em cada rede, tendo net1 como gateway padrão
  • o squid é um proxy reverso para alguns servidores localizados em net1 ou net2
  • dois subdomínios com registros A em cada WAN-IP
  • encaminhamentos de porta para as portas 80 e 443 em ambos os roteadores apontando para o respectivo ip do servidor de lula

Para melhor compreensão: sub1.domain.tld-->WAN1--ROUTER1--net1--SERVER1 | SQUID | sub2.domain.tld-->WAN2--ROUTER2--net2--SERVER2

Meu problema:

  • acessar sub1.domain.tld da Internet funciona como esperado, também aparecendo no access.log
  • acessando sub2.domain.tld da Internet resulta em um tempo limite, nada aparecendo nos logs
  • forçando sub2.domain.tld para ip de wan1 via hosts-file de cliente tudo funciona conforme o esperado, também aparecendo no access.log
  • também com a comutação de gateway de eth0 para eth0 (com o respectivo ip de gateway) tudo funciona como esperado, aparecendo também no access.log

Parece que os pacotes retornados do squid estão sempre usando a rota padrão.

Como resolver isso e fazer com que ambas as rotas WAN funcionem?

Eu tentei usar tcp_outgoing_address , mas sem sucesso:

tcp_outgoing_address 192.168.1.123 localnet1
tcp_outgoing_address 192.168.2.123 localnet2

Também explicitamente a ligação a ips específicos não ajudou:

http_port 192.168.1.123:80 accel defaultsite=sub1.domain.tld
https_port 192.168.1.123:443 accel cert=/etc/ssl/certs/domain.tld.crt key=/etc/ssl/private/domain.tld.key defaultsite=sub1.domain.tld
http_port 192.168.2.123:80 accel defaultsite=sub2.domain.tld
https_port 192.168.2.123:443 accel cert=/etc/ssl/certs/domain.tld.crt key=/etc/ssl/private/domain.tld.key defaultsite=sub2.domain.tld

Obrigado por qualquer ajuda!

Aqui está a configuração correspondente:

/ etc / network / interfaces do servidor squid:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.1.123
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 192.168.1.1

    auto eth1
    iface eth1 inet static
        address 192.168.2.123
        netmask 255.255.255.0
        dns-nameservers 192.168.2.1

/etc/squid3/squid.conf

# define some ACL aliases
acl localnet1 src 192.168.1.0/24
acl localnet2 src 192.168.2.0/24
acl allsrc src all
acl safeports port 80 443
acl sslports port 443  
acl purge method PURGE
acl connect method CONNECT
acl HTTP proto HTTP
acl HTTPS proto HTTPS

# restrict management options
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge

# block non-safe ports
http_access deny !safeports
http_access deny CONNECT !sslports

# define ports and certs
http_port 80 accel defaultsite=sub1.domain.tld
https_port 443 accel cert=/etc/ssl/certs/domain.tld.crt key=/etc/ssl/private/domain.tld.key defaultsite=sub1.domain.tld

# define peers
cache_peer 192.168.1.234 parent 443 0 proxy-only no-query no-digest originserver login=PASSTHRU connection-auth=on ssl sslflags=DONT_VERIFY_PEER front-end-https=on name=server1
cache_peer 192.168.2.234 parent 443 0 proxy-only no-query no-digest originserver login=PASSTHRU connection-auth=on ssl sslflags=DONT_VERIFY_PEER front-end-https=on name=server2

# define uris
acl server1_acl url_regex -i ^https://sub1.domain.tld/*$
acl server2_acl url_regex -i ^https://sub2.domain.tld/*$

# bind peers to acls and block direct access
never_direct allow server1_acl 
http_access allow server1_acl  
cache_peer_access server1 allow server1_acl

never_direct allow server2_acl 
http_access allow server2_acl  
cache_peer_access server2 allow server2_acl

# handle unhandled connections
deny_info TCP_RESET allsrc
http_access allow localnet1
http_access allow localnet2
http_access deny allsrc
    
por sc911 01.12.2015 / 15:27

1 resposta

1

Ok, encontrei o problema: problema de roteamento ...

Como eu pensei, todos os pacotes de saída estão sendo enviados pela eth0. Isso pode ser corrigido ao definir rotas adicionais:

Adicione uma nova tabela de roteamento:

echo 1 rt2 >> >> /etc/iproute2/rt_tables

Configurar nova rota:

ip route add 192.168.2.0/24 dev eth1 src 192.168.178.123 table rt2
ip route add default via 192.168.2.1 dev eth1 table rt2
ip rule add from 192.168.2.123/32 table rt2
ip rule add to 192.168.2.123/32 table rt2

Para tornar este persistente inclua em / etc / network / interfaces para eth1

post-up ip route add 192.168.2.0/24 dev eth1 src 192.168.178.123 table rt2
post-up ip route add default via 192.168.2.1 dev eth1 table rt2
post-up ip rule add from 192.168.2.123/32 table rt2
post-up ip rule add to 192.168.2.123/32 table rt2

Créditos para:

por 03.12.2015 / 16:00