
Estou executando o Gentoo Linux, portanto, uso iptbales simples para gerenciar meu firewall e rede. Eu normalmente uso wan0 para todo o meu tráfego, mas como já tenho um servidor web por trás dele, gostaria de wan1 (vincular a outro domínio) para meu segundo servidor web.
Eu tenho três interfaces:
- eth0 =LAN
- wan0 = WAN primária usada (gateway padrão)
- wan1 = WAN secundária
Algumas informações sobre os gateways
> route -n
Kernel IP Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
0.0.0.0 80.108.x.x 0.0.0.0 UG 0 0 0 wan0
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
80.108.x.0 0.0.0.0 255.255.254.0 U 0 0 0 wan0
84.114.y.0 0.0.0.0 255.255.255.0 U 0 0 0 wan1
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
O init padrão para NAT/MASQUEARDING é
sysctl -q -w net.ipv4.conf.all.forwarding=1
iptables -N BLOCK
iptables -A BLOCK -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i eth0 -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i lo -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/16 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan1 -j MASQUERADE
Atrás deste gateway estou executando vários servidores web. Em uma máquina, estou executando um servidor HTTP na porta 8000 em vez de 80. Normalmente, quando uso wan0 como interface de entrada, uso as seguintes regras:
lan_host1="192.168.0.200"
iptables -A FORWARD -i wan0 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan0 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80
Isso funciona bem. Agora eu gostaria que wan1 fosse usado, já que wan0 está vinculado a um IP/domínio que costumo usar para outra coisa.
Achei que uma simples mudança em wan1 resolveria.
lan_host1="192.168.0.200"
iptables -A FORWARD -i wan1 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan1 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80
Mas isso não funciona. Acho que o problema é que wan0 é o GW padrão. Então eu acho que os pacotes recebidos por wan1 são encaminhados para lan_host1, mas ao serem enviados de volta para o gateway eles são enviados através de wan0 em vez de wan1 ou pelo menos usando o ip de wan0.
Alguma sugestão de como eu poderia gerenciar isso?
Agradecemos antecipadamente, Rob
Responder1
Como a resposta está ligada à configuração, faço algumas suposições. Você terá que adaptar a resposta para se adequar à configuração real.
wan1LAN e gateway parawan1escolhido arbitrariamente como 84.114.7.0/24 e 84.114.7.254.
nenhuma consideração sobre as regras do firewall é feita, mas tudo isso não deve interagir com elas.
No Linuxip link
,ip address
eip route
deve sempre ser usado em vez de obsoleto ifconfig
e route
. route
provavelmente não conseguirá lidar com tabelas de roteamento adicionais de qualquer maneira.
Apenas como um lembrete,tabelas de ipou na verdadefiltro de rede, não roteia, mas pode, por meio de suas ações, alterar as decisões de roteamento tomadas pela pilha de roteamento IP. Esseesquemáticomostra onde as decisões de roteamento podem acontecer. Para tráfego roteado (em vez de originado localmente) que está apenas em um local e as alterações devem acontecer antes:bruto/PREROUTING,mangle/PRÉROUTINGounat/PRÉROUTING, comcrumuitas vezes impraticável enaturalapenas para casos limitados, principalmente deixandomangle.
Asistema multi-homed básico, para usar vários caminhos para a Internet, geralmente requerroteamento de política, onde a rota pode mudar não apenas com o destino como de costume, mas também com a origem ou com outros seletores (como será feito aqui) utilizados nas regras de política. No Linux, regras adicionais feitas comip rule
pode selecionar uma tabela de roteamento diferente para selecionar, por exemplo, uma rota padrão diferente (ainda haverá apenas uma rota padrão, mas umapor tabela de roteamento).
Então aqui está o princípio, mantendo-se ativoEncaminhamento estrito de caminho reverso(filtro_rp), é aceitar pacotes vindos dewan1e encaminhá-los como de costume paraeth0usando uma tabela alternativa (que permitirá passarfiltro_rp). Esta tabela de roteamento adicional deve duplicar a tabela de roteamento principal, mas usando apenas as rotas necessárias para o caminho alternativo (wan1) e portanto não incluindo as rotas usuais com o caminho "normal" (wan0). Se outras rotas (como VPNs, etc.) tiverem que estar envolvidas em fluxos que passamwan1, é provável que sua rota também precise ser adicionada ou que outras regras e tabelas adicionais tenham que ser criadas para lidar com isso.
Como o Linux descontinuou o uso de um cache de roteamento no kernel 3.6, nada na pilha de roteamento diria para enviar de volta pacotes de resposta dohost1ao cliente atravéswan1e eles acabariam saindo usando a rota padrão principal atravéswan0, NAT com o IP errado para esta interface (filtro de redeé independente de rota e já havia escolhido o NAT a ser feito ao receber o primeiro pacote da conexão) e provavelmente descartado pelo próximo roteador do ISP também fazendo Strict Reverse Path Filtering. Há umfiltro de rederecurso que permite copiar a marca de um pacote na marca do conntrack e colocá-la de volta no pacote: funcionará como memória de rota para a conexão. Entãotabelas de ipefiltro de rededeconexãoserá usado para dois recursos relacionados: para marcar o pacote a fim de alterar a decisão de roteamento e para restaurar esta marca nos pacotes de resposta identificados como parte da mesma conexão.
Tudo isso se traduz nestes comandos:
- parte de roteamento
Use para pacotes marcados (valor de marca arbitrário 101) uma tabela de roteamento extra (valor arbitrário não relacionado também 101):
ip rule add fwmark 101 lookup 101
Preencha a tabela com entradas semelhantes àsprincipaltabela de roteamento, menoswan0entradas:
ip route add table 101 192.168.0.0/16 dev eth0
ip route add table 101 84.114.7.0/24 dev wan1
ip route add table 101 default via 84.114.7.254 dev wan1
- tabelas de ip/filtro de redepapel
Existem várias otimizações possíveis nos comandos a seguir. Provavelmente podem ser melhoradas.
Restaure uma possível marca anterior já salva, para que os pacotes de resposta obtenham a mesma marca que os pacotes originais:
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
Marcar pacotes que chegam dewan1para alterar a decisão de roteamento acima:
iptables -t mangle -A PREROUTING -i wan1 -j MARK --set-mark 101
Se houver uma marca, salve-a emconexão(poderia ter sido feito nonaturaltabela para fazer isso apenas uma vez por fluxo de conexão e não para cada pacote):
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j CONNMARK --save-mark
Na verdade, isso ainda irá falharEncaminhamento estrito de caminho reversoverifique, já que issorecurso não documentadofoi adicionado em 2010. Deve ser usado aqui:
sysctl -w net.ipv4.conf.wan1.src_valid_mark=1