2 провайдера и nat - теряет пакеты

Автор bbiktop, 02 сентября 2016, 13:29:46

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

bbiktop

Приветствую,

Давно не делал маршрутизацию локалки с натом через линупс на двух провайдеров, а тут вознадобилось.  Взял какие-то свои скрипты десятилетней давности, но не заработало. Оказалось, что в третьем ядре все поменяли - таблицы кешей рутов уже нет,  а как теперь оно работает и как его настроить я найти не могу. Помогите пож советом.
Сделал конкрено (в натуре) следующее:

1) Сделал, как и раньше, две рутинговые таблицы:

# tail -3 /etc/iproute2/rt_tables
10       prov1
11       prov2


2) Добавил маршруты в каждую, добавил маршруты в main, сделал ip route add default scope global nexthop via ${rt1} dev ${dev1} weight ${weight1} nexthop via ${rt2} dev ${dev2} weight ${weight2}
С этого хоста все заработало зашибись, выбирает рут случайно, в заданном весами соотношении.

Но с проначенного энторфэйса в локалке не работает нифига. На http не заходит, телнет пишет "соединение разорвано":


viktor@ViksPro:~ $ telnet google.com 80
Trying 216.58.214.238...
Connected to google.com.
Escape character is '^]'.
get / http/1.0
Connection closed by foreign host.
viktor@ViksPro:~ $


Запустил пинг - часть пакетов теряется:

viktor@ViksPro:~ $ ping -c 10 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=49 time=38.508 ms
Request timeout for icmp_seq 1
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=50.378 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=36.932 ms
Request timeout for icmp_seq 4
64 bytes from 8.8.8.8: icmp_seq=5 ttl=49 time=42.556 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=49 time=37.227 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=49 time=47.452 ms
Request timeout for icmp_seq 8
64 bytes from 8.8.8.8: icmp_seq=9 ttl=49 time=35.192 ms

--- 8.8.8.8 ping statistics ---
10 packets transmitted, 7 packets received, 30.0% packet loss
round-trip min/avg/max/stddev = 35.192/41.178/50.378/5.379 ms


Попробовал потрейсить - пакеты приходят, но часть потом не уходит ни по какому выходному энторфэйсу:


viktor@ViksPro:~ $ ping -c 10 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=50 time=47.253 ms
Request timeout for icmp_seq 1
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=36.276 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=36.007 ms
Request timeout for icmp_seq 4
64 bytes from 8.8.8.8: icmp_seq=5 ttl=49 time=39.816 ms
Request timeout for icmp_seq 6
64 bytes from 8.8.8.8: icmp_seq=7 ttl=50 time=39.956 ms
Request timeout for icmp_seq 8
64 bytes from 8.8.8.8: icmp_seq=9 ttl=49 time=37.573 ms

--- 8.8.8.8 ping statistics ---
10 packets transmitted, 6 packets received, 40.0% packet loss
round-trip min/avg/max/stddev = 36.007/39.480/47.253/3.802 ms

# tcpdump -i br0 dst 8.8.8.8 and icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:21:59.854298 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 0, length 64
13:22:00.849685 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 1, length 64
13:22:01.847982 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 2, length 64
13:22:02.851255 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 3, length 64
13:22:03.856234 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 4, length 64
13:22:04.863236 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 5, length 64
13:22:05.861819 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 6, length 64
13:22:06.870490 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 7, length 64
13:22:07.869741 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 8, length 64
13:22:08.871061 IP 172.16.1.33 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 9, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel

# tcpdump -i eth1 dst 8.8.8.8 and icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
13:22:04.863344 IP dom.etogo.net > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 5, length 64
13:22:08.871190 IP dom.etogo.net > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 9, length 64
^C
2 packets captured
3 packets received by filter
0 packets dropped by kernel

# tcpdump -i eth2 dst 8.8.8.8 and icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes
13:21:59.854402 IP 46.164.150.51 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 0, length 64
13:22:01.848084 IP 46.164.150.51 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 2, length 64
13:22:02.851339 IP 46.164.150.51 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 3, length 64
13:22:06.870592 IP 46.164.150.51 > google-public-dns-a.google.com: ICMP echo request, id 16122, seq 7, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel




Прочитал, что их нужно метить CONNMARK. Добавил:
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

ip rule add iif br0 fwmark 10 table prov1
ip rule add iif br0 fwmark 11 table prov2



Никак не повлияло.
При этом, если опустить любой из двух внешних энторфэйсов, то все внезапно работает ок! натится, пингуется, в общем лепота.

Что же делать? Как побороть? Спасите-помогите!

Конфигурация следующая:
br0       Link encap:Ethernet  HWaddr 46:aa:b7:50:d2:25..
          inet addr:172.16.1.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::44aa:b7ff:fe50:d225/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1950126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2948700 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0.
          RX bytes:190382417 (181.5 MiB)  TX bytes:4804077472 (4.4 GiB)

eth0      Link encap:Ethernet  HWaddr a0:b3:cc:eb:15:68..
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1960656 errors:0 dropped:128 overruns:0 frame:0
          TX packets:3749135 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000.
          RX bytes:224893026 (214.4 MiB)  TX bytes:4879807299 (4.5 GiB)
          Interrupt:18.

eth1      Link encap:Ethernet  HWaddr c4:12:f5:32:5f:f5..
          inet addr:217.147.175.165  Bcast:217.147.175.255  Mask:255.255.255.128
          inet6 addr: fe80::c612:f5ff:fe32:5ff5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3932611 errors:0 dropped:84 overruns:0 frame:0
          TX packets:1942640 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000.
          RX bytes:4885365115 (4.5 GiB)  TX bytes:206587002 (197.0 MiB)

eth2      Link encap:Ethernet  HWaddr 00:e0:4c:68:01:4a..
          inet addr:46.164.150.51  Bcast:46.164.150.55  Mask:255.255.255.248
          inet6 addr: fe80::2e0:4cff:fe68:14a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:67386 errors:0 dropped:926 overruns:0 frame:0
          TX packets:22133 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000.
          RX bytes:11259533 (10.7 MiB)  TX bytes:4516951 (4.3 MiB)

lo        Link encap:Local Loopback..
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:368621 errors:0 dropped:0 overruns:0 frame:0
          TX packets:368621 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0.
          RX bytes:139993590 (133.5 MiB)  TX bytes:139993590 (133.5 MiB)

tap5      Link encap:Ethernet  HWaddr 5e:43:44:5b:83:1d..
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60054 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48499 errors:0 dropped:3 overruns:0 carrier:0
          collisions:0 txqueuelen:100.
          RX bytes:13474697 (12.8 MiB)  TX bytes:6652640 (6.3 MiB)

tap6      Link encap:Ethernet  HWaddr 46:aa:b7:50:d2:25..
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:3 overruns:0 carrier:0
          collisions:0 txqueuelen:100.
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

- 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


uname -a
Linux dom 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) x86_64 GNU/Linux


Всем заранее спасибке