Eu tenho um sistema com duas interfaces. Ambas as interfaces estão conectadas à Internet. Um deles é definido como a rota padrão; um efeito colateral disso é que, se um pacote chegar na interface de rota não padrão, a resposta será enviada de volta através da interface de rota padrão. Existe uma maneira de usar o iptables (ou algo mais) para rastrear a conexão e enviar a resposta de volta pela interface de origem?
51
dev
param noip rule
comando, portanto executarip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
eup ip route add default via <gateway_IP> dev ppp0 table isp2
ao seu / etc / network / interfaces na interface relevante.dev <interface>
a partirip rule
de obtê-lo a trabalhar na minha caixa. Se estou entendendo direito,dev <interface>
estava filtrando pacotes que de alguma forma estavam configurados na interface errada que precisavam ser digitados na interface correta pela rota substituída, mas a regra de filtragem por interface estava impedindo que isso acontecesse.dev <interface>
doip rule
comando para que isso funcionasse. Atualize a resposta! Exceto por esse detalhe, funcionou como um encanto. Muito obrigado, @ Peter!Os comandos a seguir criam uma tabela de roteamento alternativa via
eth1
pacotes com a marca 1 (exceto pacotes para o host local). Oip
comando é do pacote iproute2 (Ubuntu: iproute Instale o iproute http://bit.ly/software-small , iproute-doc Instale o iproute-doc http://bit.ly/software-small ).A outra metade do trabalho é reconhecer pacotes que devem receber a marca 1; use
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
esses pacotes para rotear a tabela de roteamento 1. Acho que o seguinte deve ser feito (substitua 1.2.3.4 pelo endereço da interface de rota não padrão):Não tenho certeza se isso é suficiente, talvez outra regra seja necessária nos pacotes recebidos para dizer ao módulo conntrack para rastreá-los.
fonte
Eu tive problemas com os pacotes gerados localmente com a solução sugerida por Peter. Descobri que o seguinte corrige isso:
NOTA: Você pode ter problemas de sintaxe com a quarta linha acima. Nesses casos, a sintaxe do 4º comando pode ser agora:
fonte
Suponho que você esteja executando o Linux e, além disso, que esteja utilizando uma distribuição baseada no RedHat / CentOS. Outras Unix e distribuições exigirão etapas semelhantes - mas os detalhes serão diferentes.
Comece testando (observe que isso é muito semelhante à resposta de @ Peter. Estou assumindo o seguinte:
Os comandos são os seguintes:
O firewall não está envolvido de forma alguma. Os pacotes de resposta sempre eram enviados do IP correto - mas anteriormente eram enviados pela interface errada. Agora, esses pacotes do IP correto serão enviados pela interface correta.
Supondo que o procedimento acima funcionou, agora você pode tornar a regra e as alterações de rota permanentes. Isso depende de qual versão do Unix você está usando. Como antes, estou assumindo uma distribuição Linux baseada em RH / CentOS.
Teste se a alteração de rede é permanente:
Se isso não funcionou, nas versões posteriores do RH / CentOS você também precisa seguir uma das duas opções:
Pessoalmente, prefiro instalar o pacote de regras, pois é a abordagem mais simples e com suporte:
Outra forte recomendação é habilitar a filtragem arp, pois isso evita outros problemas relacionados às configurações de rede dupla. Com o RH / CentOS, adicione o seguinte conteúdo ao arquivo /etc/sysctl.conf:
fonte