1

У меня есть сервер с Linux, который я также использую в качестве сетевого шлюза / "маршрутизатора". Он имеет три активных сетевых интерфейса - два сетевых интерфейса, подключенных к Интернету через разных интернет-провайдеров, и третий, обеспечивающий доступ в Интернет к моим локальным компьютерам через NAT. У меня есть балансировка нагрузки между каналами WAN.

С сервера сеть доступна просто отлично - все работает, балансировка нагрузки работает и вообще без потерь пакетов. Соединения между сервером и локальными машинами также работают совершенно нормально. Но если я получаю доступ к Интернету / WAN с локального компьютера через сервер, я всегда вижу постоянную потерю пакетов ~ 40%. Это делает соединения очень нестабильными. После небольшого исследования я мог видеть, что я получаю (и теряю) пакеты, проходящие через оба интерфейса более или менее одинаково, поэтому не похоже, что один из интерфейсов будет перетаскивать все остальное, теряя все свои пакеты.

Если я отключу любой из двух каналов WAN, потеря пакетов немедленно исчезнет. Он мгновенно появляется снова, если я снова включаю обе WAN-ссылки.

Что может вызвать это? Любые советы, как устранить эту проблему, не отказываясь от одного из каналов глобальной сети?

моя таблица фильтров iptables :

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

моя таблица iptables nat:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.42.0.0/24        !10.42.0.0/24 

моя таблица iptables mangle:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            mark match ! 0x0
MARK       all  --  0.0.0.0/0            0.0.0.0/0            state NEW MARK set 0x2
MARK       all  --  0.0.0.0/0            0.0.0.0/0            state NEW statistic mode random probability 0.50000000000 MARK set 0x1

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    

ip route show output:

default 
    nexthop via 10.7.0.254  dev eth0 weight 1
    nexthop via 78.62.255.254  dev eth2 weight 1
10.7.0.0/16 dev eth0  proto kernel  scope link  src 10.7.5.102 
10.42.0.0/24 dev eth1  proto kernel  scope link  src 10.42.0.254 
78.62.192.0/18 dev eth2  proto kernel  scope link  src 78.62.239.10 
169.254.0.0/16 dev eth1  scope link  metric 1000 

все неотредактировано, как есть - в данном случае нас не волнует "конфиденциальность"

1 ответ1

0

Исходя из таблиц, которые вы показали, вы ничего не делаете для того, чтобы NAT продолжал потоки выходить из того же интерфейса, на котором они были запущены, что означает, что примерно половина ваших исходящих пакетов, вероятно, неправильно переводятся.

Для правильного распределения нагрузки NAT вам нужно правило предварительной маршрутизации в таблице mangle, которое случайным образом помечает новые потоки 1 или 2, вам нужны правила правила ip rule маршрутизирующие пакеты, помеченные 1 для интерфейса 1 WAN, и пакеты, помеченные 2 для WAN. интерфейс 2, и вам нужны отдельные правила SNAT для таблицы NAT iptables , по одному для каждого интерфейса WAN.

Более подробное описание см. В статье «Балансировка нагрузки Iptables» Диего Лимы в двух словах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .