Быстрая переадресация IP в WAN, но отваливается между подсетями LAN

419
Huckle

Я заменил свой потребительский беспроводной маршрутизатор на коробку linux с четырех гигабитной сетевой картой PCIe и одной гигабитной сетевой платой на материнской плате (для глобальной сети). После включения переадресации IP-адресов, маскирования (через iptables) и настройки подсетей на каждом из четырех интерфейсов локальной сети я провел несколько тестов скорости.

$ ip route default dev ppp0 scope link  10.0.0.0/16 dev enp3s0f0 proto kernel scope link src 10.0.0.1  10.64.0.0/16 dev enp3s0f1 proto kernel scope link src 10.64.0.1  10.192.0.0/16 dev enp4s0f1 proto kernel scope link src 10.192.0.1  aaa.bbb.ccc.ddd dev ppp0 proto kernel scope link src www.xxx.yyy.zzz  
  • От беспроводного устройства в одной из подсетей ЛВС до самого скоростного сервера в глобальной сети я получаю полные 40 Мбит / с / 5 Мбит / с, за которые я плачу своему провайдеру.

  • От хоста маршрутизатора до хоста проводной локальной сети, iperf3я могу последовательно поддерживать скорость 930+ Мбит / с в течение нескольких минут.

  • От проводного устройства в одной из подсетей ЛВС до проводного устройства в другой подсети ЛВС, использующего iperf3я, сначала получаю 80-95 Мбит / с в течение первых нескольких секунд, но оно быстро падает до нуля.

  • От проводного устройства в одной из подсетей ЛВС до проводного устройства в другой подсети ЛВС iperf3с целевым битрейтом 20 Мбит / с я вижу аналогичные результаты (см. Обновление в конце), но может поддерживать около 10 Мбит / с

,

Connecting to host 10.0.0.2, port 5201 [ 5] local 10.192.128.3 port 35620 connected to 10.0.0.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 10.2 MBytes 85.9 Mbits/sec 0 73.5 KBytes  [ 5] 1.00-2.00 sec 9.01 MBytes 75.6 Mbits/sec 0 82.0 KBytes  [ 5] 2.00-3.00 sec 8.26 MBytes 69.3 Mbits/sec 0 79.2 KBytes  [ 5] 3.00-4.00 sec 9.01 MBytes 75.6 Mbits/sec 0 73.5 KBytes  [ 5] 4.00-5.00 sec 5.28 MBytes 44.3 Mbits/sec 1 1.41 KBytes  [ 5] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  [ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  [ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  [ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes  ^C[ 5] 10.00-13.63 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-13.63 sec 41.8 MBytes 25.7 Mbits/sec 5 sender [ 5] 0.00-13.63 sec 0.00 Bytes 0.00 bits/sec receiver iperf3: interrupt - the client has terminated 

Это наводит меня на мысль, что есть проблемы с пересылкой пакетов между подсетями. Сначала я убедился, что мои iptablesправила минимальны:

-t nat -A POSTROUTING -o ppp0 -j MASQUERADE # WAN connection is PPPoE and VLAN tagged -t filter -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 

Сбрасывая iptablesсостояние, я вижу низкие количества пакетов для обоих правил.

Затем я проверил на потерю пакета. Кажется, что существует небольшое, но постоянное количество потерь / повторных передач пакетов.

$ sudo netstat -s | egrep -i 'retransmit|drop' 498 outgoing packets dropped 25848 fast retransmits 

Затем я подумал, что, возможно, там был буфер или очередь, которая заполнялась, и пакеты отбрасывались. Я рассчитал среднее значение пропускной способности и сравнил его с зарезервированной памятью.

$ sudo ping -f 10.0.0.2 -s $((1500-28))  PING 10.0.0.2 (10.0.0.2) 1472(1500) bytes of data. .^C --- 10.0.0.2 ping statistics --- 9036 packets transmitted, 9035 received, 0% packet loss, time 26512ms rtt min/avg/max/mdev = 1.742/2.817/12.057/0.758 ms, pipe 2, ipg/ewma 2.934/3.091 ms  $ echo "1*(1024^3) * 0.003" | bc  3221225.472  $ cat /proc/sys/net/ipv4/tcp_mem 18396 24529 36792  $ getconf PAGESIZE 4096 

Кажется, этого достаточно. Так что теперь я немного застрял. Я побежал tcpdumpк iperf3клиенту и вижу, что дела идут хорошо. Затем я вижу длительный (почти 250 мс) период молчания перед множеством повторных передач и повторных подтверждений.

Так как я могу получить достаточную скорость загрузки из глобальной сети, я не подозреваю, что встроенная сетевая карта виновата. Я ищу помощь в диагностике этого четырехядерного сетевого адаптера (подробности ниже) и, возможно, гигабитного коммутатора 2-го уровня (Netgear GS-108) и любой другой конфигурации ядра, которая может возникнуть. Я сомневаюсь, что это коммутатор, поскольку это никогда не было проблемой раньше, и я могу поддерживать скорость от обратной петли маршрутизатора до этой подсети. Похоже, это влияет только на производительность между подсетями.

 *-network:0  description: Ethernet interface product: 82571EB Gigabit Ethernet Controller (Copper) vendor: Intel Corporation physical id: 0 bus info: pci@0000:03:00.0 logical name: enp3s0f0 version: 06 serial: 00:26:55:xx:xx:xx size: 1Gbit/s capacity: 1Gbit/s width: 32 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=5.12-2 ip=10.0.0.1 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s resources: irq:24 memory:fe920000-fe93ffff memory:fe880000-fe8fffff ioport:d020(size=32) 

ОБНОВИТЬ:

$ iperf3 -b 20m -c 10.0.0.2 Connecting to host 10.0.0.2, port 5201 [ 5] local 10.192.128.3 port 36554 connected to 10.0.0.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 2.49 MBytes 20.9 Mbits/sec 0 158 KBytes  [ 5] 1.00-2.00 sec 2.38 MBytes 19.9 Mbits/sec 0 150 KBytes  [ 5] 2.00-3.00 sec 2.38 MBytes 19.9 Mbits/sec 1 133 KBytes  [ 5] 3.00-4.00 sec 2.38 MBytes 19.9 Mbits/sec 0 73.5 KBytes  [ 5] 4.00-5.00 sec 2.38 MBytes 19.9 Mbits/sec 0 70.7 KBytes  [ 5] 5.00-6.00 sec 1.12 MBytes 9.44 Mbits/sec 2 1.41 KBytes  [ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 2 1.41 KBytes  [ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes  [ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  iperf3: error - control socket has closed unexpectedly  $ iperf3 -b 10m -c 10.0.0.2  Connecting to host 10.0.0.2, port 5201 [ 5] local 10.192.128.3 port 36564 connected to 10.0.0.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 1.24 MBytes 10.4 Mbits/sec 0 201 KBytes  [ 5] 1.00-2.00 sec 1.25 MBytes 10.5 Mbits/sec 0 118 KBytes  [ 5] 2.00-3.00 sec 1.12 MBytes 9.44 Mbits/sec 0 127 KBytes  [ 5] 3.00-4.00 sec 1.25 MBytes 10.5 Mbits/sec 0 107 KBytes  [ 5] 4.00-5.00 sec 1.12 MBytes 9.44 Mbits/sec 0 110 KBytes  [ 5] 5.00-6.00 sec 1.25 MBytes 10.5 Mbits/sec 0 90.0 KBytes  [ 5] 6.00-7.00 sec 1.12 MBytes 9.44 Mbits/sec 0 87.2 KBytes  [ 5] 7.00-8.00 sec 1.25 MBytes 10.5 Mbits/sec 0 81.6 KBytes  [ 5] 8.00-9.00 sec 1.12 MBytes 9.44 Mbits/sec 0 78.8 KBytes  [ 5] 9.00-10.00 sec 1.25 MBytes 10.5 Mbits/sec 0 112 KBytes  - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 12.0 MBytes 10.1 Mbits/sec 0 sender [ 5] 0.00-10.04 sec 12.0 MBytes 10.0 Mbits/sec receiver  iperf Done. 
0
Что вы подразумеваете под «настройкой подсетей на каждом из четырех интерфейсов локальной сети»? Вы создали четыре локальных сети или одну? И если один, то с четырьмя интерфейсами в одной локальной сети, вы должны настроить только один IP-адрес и одну подсеть. David Schwartz 6 лет назад 0
@DavidSchwartz Четыре подсети с интерфейсами, настроенными как 10.0.0.1, 10.64.0.1, 10.128.0.1 и 10.192.0.1. Huckle 6 лет назад 0
Пожалуйста, дайте `ifconfig -a` или` ip addr`. Ищем mac адреса на четырехядерном адаптере. Pedro 6 лет назад 0
@ Huckle: есть ли какая-то причина, по которой вы создали четыре отдельных ЛВС? Вам нужна изоляция по какой-то причине? Это будет означать, что материал, который работает в локальной сети (например, обнаружение службы вещания и разрешение имен), не будет работать для устройств в разных локальных сетях. David Schwartz 6 лет назад 0
Кроме того, откуда берется беспроводной? Не могли бы вы сделать `iperf3` между проводными хостами, подключенными к разным интерфейсам? Pedro 6 лет назад 0
@Pedro - повторное тестирование с двух проводных устройств, подключенных напрямую к разным подсетям (на этот раз ни один уровень 2 не переключался на одну подсеть). По существу идентичные результаты Huckle 6 лет назад 1
@DavidSchwartz Да, идея будет заключаться в том, чтобы в конечном итоге сделать брандмауэр одной из подсетей просто для доступа к глобальной сети, а затем брандмауэр одной из других, чтобы просто разрешить доступ к определенным портам, - но эта точка iptables настолько проста, насколько это возможно, для уменьшения переменных, и я уверен, что я перезагрузил его конфигурацию. Huckle 6 лет назад 0
Не могли бы вы запустить `iperf3` с --bandwidth в паре точек, таких как 20 м, 40 м и 80 м, и посмотреть, замедлят ли они в конечном итоге? Это покажет, если вы переполняете буфер на маршрутизаторе. Pedro 6 лет назад 0
@Pedro OUI одного из четырех сетевых адаптеров находится в выводе `lshw`. Карта является HP NC364T Huckle 6 лет назад 0
@Pedro отправлены тесты со скоростью 20 Мбит / с и 10 Мбит / с. 20 не ходи. Кажется, чтобы выдержать 10. Разрушается около 12. Huckle 6 лет назад 1
Можете ли вы сделать iperf с полной пропускной способностью от хоста на enp3s0f0 к одному на enp3s0f1, enp3s0f1 / enp4s0f1 и enp3s0f0 / enp4s0f1, чтобы проверить, является ли один из портов плохим? Pedro 6 лет назад 0
На NC364T, вы можете просто проверить, что MAC-адреса разные для каждого порта? Похоже, вы используете только два из портов enp3s0f0 и enp3s0f1, правильно? Pedro 6 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/73650/discussion-between-pedro-and-huckle). Pedro 6 лет назад 0

1 ответ на вопрос

0
Huckle

Спасибо @Pedro за помощь в поиске. Первоначально я думал, что это плохой аппаратный компонент, но после замены его другим я уверен, что это проблема с драйверами. Я все еще копаюсь, чтобы выяснить, была ли это ошибка, о которой уже сообщалось, или нет (и есть ли исправление). В то же время я нашел вопрос о сбое сервера, связанный с отчетом об ошибке, в котором предлагалось отключить несколько функций разгрузки. Это, по крайней мере, позволило мне стабильно увеличить скорость от 0 до 270 Мбит / с. Это намного меньше, чем ~ 940 Мбит / с, на которые он способен, но лучше, чем ничего, пока я продолжаю исследования.

ethtool -K eth0 gso off gro off tso off 

Похожие вопросы