Parece que a perda de pacotes ocorre quando os pacotes retornam diferentes da rota de origem. Roteamento IP é sem estado. Acho que você poderia seguir o link para arquivar dual-wan.
Eu tenho o linux box que serve como um roteador / firewall e tem 2 provedores de internet conectados. Eu gostaria de fazer o compartilhamento de carga com o failover usando-o. Eu fiz tal coisa há muitos anos e foi bem simples - basta adicionar 2 tabelas de roteamento para 2 conexões e depois usar 2 rotas padrão com o peso necessário:
ip route add default scope global nexthop via 1.2.3.4 dev dev100 weight 10
E, em seguida, o linux adicionará rotas aleatoriamente ao cache, dividindo as conexões entre os links.
Mas agora eu descobri que ele não funciona mais com o linux 3.16, e não há mais cache de rota e todos os meus scripts antigos não estão funcionando e não consigo configurar a conexão.
Minha configuração é:
-------------
- ip route list table prov1
default via 217.147.175.129 dev eth1
46.164.150.48/29 dev eth2 scope link src 46.164.150.51
127.0.0.0/8 dev lo scope link
172.16.0.0/16 dev br0 scope link src 172.16.1.1
217.147.175.128/25 dev eth1 scope link src 217.147.175.165
-------------
- ip route list table prov2
default via 46.164.150.49 dev eth2
46.164.150.48/29 dev eth2 scope link src 46.164.150.51
127.0.0.0/8 dev lo scope link
172.16.0.0/16 dev br0 scope link src 172.16.1.1
217.147.175.128/25 dev eth1 scope link src 217.147.175.165
-------------
- ip route list table main
default
nexthop via 217.147.175.129 dev eth1 weight 10
nexthop via 46.164.150.49 dev eth2 weight 10
46.164.150.48/29 dev eth2 proto kernel scope link src 46.164.150.51
172.16.0.0/16 dev br0 proto kernel scope link src 172.16.1.1
176.37.229.77 via 217.147.175.129 dev eth1
195.12.244.0/22 via 217.147.175.129 dev eth1
213.248.127.0/24 via 217.147.175.129 dev eth1
217.147.175.128/25 dev eth1 proto kernel scope link src 217.147.175.165
239.0.0.0/8 dev br0 scope link
--------------
- ip route list table default
--------------------
- ip rule list
0: from all lookup local
32756: from all fwmark 0xb iif br0 lookup prov2
32757: from all fwmark 0xa iif br0 lookup prov1
32758: from 46.164.150.51 lookup prov2
32760: from 217.147.175.165 lookup prov1
32766: from all lookup main
32767: from all lookup default
cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
10 prov1
11 prov2
Mas com essa configuração, tudo está funcionando bem no próprio host, mas não funciona para IPs NATs por trás desse host. Para ser mais específico - o que eu vejo do host NATed:
vik@Pro:~ $ ping 193.193.193.100
PING 193.193.193.100 (193.193.193.100): 56 data bytes
64 bytes from 193.193.193.100: icmp_seq=0 ttl=59 time=3.737 ms
64 bytes from 193.193.193.100: icmp_seq=1 ttl=59 time=4.198 ms
64 bytes from 193.193.193.100: icmp_seq=2 ttl=59 time=3.934 ms
Request timeout for icmp_seq 3
64 bytes from 193.193.193.100: icmp_seq=4 ttl=60 time=3.650 ms
64 bytes from 193.193.193.100: icmp_seq=5 ttl=60 time=3.616 ms
Request timeout for icmp_seq 6
64 bytes from 193.193.193.100: icmp_seq=7 ttl=60 time=3.509 ms
64 bytes from 193.193.193.100: icmp_seq=8 ttl=60 time=3.417 ms
64 bytes from 193.193.193.100: icmp_seq=9 ttl=60 time=3.635 ms
Request timeout for icmp_seq 10
Como você pode notar, muitos pacotes foram perdidos. E os hosts por trás desse roteador Linux não podem abrir páginas da Web, etc. - a conexão acabou de ser eliminada:
$ telnet google.com 80
Trying 173.194.113.201...
Connected to google.com.
Escape character is '^]'.
get / http/1.0
Connection closed by foreign host.
Eu tentei encontrar alguns manuais e encontrei um conselho para os pacotes CONNMARK assim:
iptables -t mangle -A PREROUTING -i eth1 --dst 217.147.175.165 -m state --state NEW,RELATED -j CONNMARK --set-mark 10
iptables -t mangle -A PREROUTING -i eth2 --dst 46.164.150.51 -m state --state NEW,RELATED -j CONNMARK --set-mark 11
iptables -t mangle -A PREROUTING -i br0 -m state --state ESTABLISHED -j CONNMARK --restore-mark
Mas isso não ajudou em nada. Por favor ajude)
Tags linux-networking