Rota o tráfego de retorno para o gateway correto, dependendo do serviço

3

Na rede do meu escritório eu tenho duas conexões de internet e um servidor CentOS rodando um site (HTTPS na porta 443). O site deve ser acessível ao público através do IP público da primeira conexão à Internet (ISP-1). A outra conexão com a Internet, ISP-2, identifica o gateway padrão na rede. Ambas as conexões de internet têm roteadores (o tipo doméstico) com firewalls NAT, SPI, etc. O roteador no ISP-2 é um Netgear WNDR3700 (também conhecido como N600) com firmware original.

O problema é que o site é inacessível. Parece que o tráfego de entrada no ISP-1 atingirá o servidor, mas o tráfego de retorno será roteado pelo ISP-2, tornando o site inacessível. Tanto quanto eu posso dizer que não posso fazer roteamento baseado em porta no WNDR3700.

Quais são minhas opções para fazer isso funcionar? Eu tenho procurado implementar uma solução baseada em iptables / roteamento no próprio servidor, mas não consegui fazer isso funcionar.

Atualização: Observe que o servidor tem uma interface de rede conectando-a a ambos os roteadores.

    
por Marnix van Valen 21.01.2011 / 16:31

5 respostas

2

Se eu estiver entendendo suas intenções corretamente, você deseja que seu servidor da Web normalmente use o ISP-2 como seu gateway padrão para o tráfego de saída, com exceção de suas respostas a solicitações da Web externas, que devem transitar pelo ISP-1. Aqui está um esboço de uma solução usando o roteamento de políticas:

echo "101 webtraffic" >> /etc/iproute2/rt_tables

ip route add default table webtraffic via $ISP1_GW_LAN_IP
ip rule add fwmark 1 table webtraffic
iptables -t mangle -A OUTPUT -d \! $LAN_NET_PREFIX \
                             -p tcp -m tcp --sport 443 \
                             -j MARK --set-mark 1

onde:

  • LAN_NET_PREFIX é o prefixo de rede da sua LAN (por exemplo, 192.168.100.0/24) e
  • ISP1_GW_LAN_IP é o endereço IP da LAN do seu gateway para o ISP-1 (por exemplo, 192.168.100.100).

O primeiro comando ip define a rota padrão na tabela webtraffic para o seu gateway ISP-1, e a segunda assegura que os pacotes marcados com 1 sejam roteados usando a tabela webtraffic . Por fim, a regra iptables marca os pacotes de saída apropriados, garantindo que o próximo salto seja para o ISP-1.

Aqui está uma solução alternativa que usa um módulo iptables experimental, a meta ROUTE:

iptables -t mangle -A POSTROUTING -d \! $LAN_NET_PREFIX \
                                  -p tcp -m tcp --sport 443 \
                                  -j ROUTE --gw $ISP1_GW_LAN_IP

Essa regra substituiria a decisão de roteamento dos pacotes de resposta da Web de saída, enviando-os ao seu gateway ISP-1, em vez de ao ISP-2 padrão. Todo o outro tráfego, incluindo respostas da Web a clientes na sua LAN, não seria afetado. Como foi apontado nos comentários, é bem provável que a meta ROUTE não seja implementada em nenhum sistema que não tenha sido remendado explicitamente no kernel, desde que seja experimental .

    
por 21.01.2011 / 20:13
5

Eu tive o mesmo problema, mas resolvi apenas com o iproute2 (roteamento de origem). Marcação com iptables não era necessária:

echo "101 webtraffic" >> /etc/iproute2/rt_tables
ip route add default table webtraffic via $ISP1_GW_LAN_IP
ip rule add from $ISP1_IP table webtraffic

O ponto é que não apenas a web pode usar a conexão ISP1. Você pode escolher. É bom porque você pode se conectar ao servidor a partir do ssh de ambas as conexões se alguém falhar. Como usuário do CentOS, criei os seguintes arquivos para que minhas alterações não fossem perdidas após a reinicialização:

echo "default table webtraffic via $ISP1_GW_LAN_IP" >> /etc/sysconfig/network-scripts/route-eth1
echo "from $ISP1_IP table webtraffic" >> /etc/sysconfig/network-scripts/rule-eth1
    
por 04.06.2012 / 06:32
0

Isso é chamado de roteamento assíncrono. Você precisa apontar o gateway padrão do servidor da Web para o endereço IP do roteador no ISP-1. Se os clientes que estão acessando o servidor da web vierem do mesmo IP, você poderá rotear isso sem alterar o gateway padrão ou poderá implementar o NAT no gateway do ISP1 para agir como um proxy reverso e, em seguida, rotea-lo no servidor da web. Atenciosamente.

    
por 21.01.2011 / 17:39
0

As pessoas do Firewall fazem dentro de nat para superar esse problema. A conexão de entrada é chamada para o firewall dentro do endereço da interface e, portanto, não tem um problema de roteamento no servidor.

Se as duas conexões de entrada acabarem na mesma interface no mesmo IP, você terá opções muito limitadas (nenhuma?). Veja se você pode obter outro IP para o mesmo computador / interface e ter uma conexão de entrada em um IP e entrada do anoter em outro IP. Depois disso, você pode fazer roteamento de origem com facilidade.

Se você não conseguir que fontes diferentes se conectem a endereços IP diferentes, você pode usar o iptables mac para redirecionar pacotes dependendo do MAC de onde eles vêm.

   [!] --mac-source address
          Match  source  MAC  address.    It   must   be   of   the   form
          XX:XX:XX:XX:XX:XX.   Note that this only makes sense for packets
          coming from an Ethernet device and entering the PREROUTING, FOR‐
          WARD or INPUT chains.

Espero que isso ajude.

    
por 21.01.2011 / 17:43
0

Supondo que o seu servidor da Web esteja na mesma sub-rede que as suas estações de trabalho, por que não apenas configurar o DNS dividido para que, no interior, yourwebsite.com resolva o seu endereço IP interno? Claro que é melhor usar roteamento assíncrono complicado.

Além disso, investir em um roteador que pode suportar várias conexões WAN facilitaria muito a sua vida (e permitiria balanceamento de carga / failover entre as duas conexões da Internet).

    
por 24.01.2011 / 03:46