Ответы пользователя по тегу Linux
  • Почему при балансировке нагрузки через один шлюз идет больше трафика, чем через другой?

    @throughtheether
    human after all
    Сразу отмечу, я невеликий специалист в сетевой подсистеме Linux. Я исхожу из следующих положений:
    1) у вас, судя по всему, реализована схема Equal cost multi-path.
    2) я предполагаю, что сетевую подсистему Linux реализовывали разумные люди, поэтому выбор исходящего маршрута производится per-flow, т.е. для каждого 'потока' данных ('поток' характеризуется IP-адресами источника назначения, типом протокола (IP protocol number), портами источника и назначения)

    Почему при балансировке нагрузки через один шлюз идет больше трафика, чем через другой?
    Вкратце, потому что балансировки трафика не наблюдается. В моем понимании балансировка - это когда мы отслеживаем один параметр ('нагрузку', будь то утилизация линка, количество соединений, что угодно) и соответственно изменяем другой параметр (исходящий маршрут, интерфейс, и т.д.), чтобы выровнять (привести в баланс) изменения, реализуя обратную связь. В этом смысле балансировка наблюдается в различных балансировщиках нагрузки (load balancers), типа F5, haproxy и прочая.

    В вашем случае, скорее всего, трафик разделяется (load sharing) на основании того, к какому flow он принадлежит. Соответственно, повышенная утилизация одного из линков говорит о том, что есть flow высокой интенсивности (Elephant flow), т.е. большое количество пакетов имеет один и тот же хэш и направляется в один и тот же линк. Также могут быть нюансы с разделением трафика, порожденного самим хостом. Ну и всегда есть вероятность багов в ПО.

    Куда копать?
    Чтобы удостовериться правильности гипотезы, вы можете снять дамп трафика (в точке до разделения на линки) и изучить его при помощи wireshark (Statitics -> Conversations -> вкладки TCP, UDP, две правые колонки в bps). Если гипотеза верна, вы обнаружите пару сокетов, утилизирующих значительную долю пропускной способности линка.

    Я также исходил из того, что вы показали актуальные настройки и у вас ровно два маршрута по умолчанию. Если вдруг затесался еще один, с тем же весом (с той же метрикой), то даже в идеальном случае разделение будет, скорее всего 1:1:2. Это обусловлено особенностями реализации ECMP.

    TL;DR: Это не балансировка, это разделение трафика. Идеального разделения трафика пополам в общем случае добиться крайне затруднительно.

    UPD:
    Сейчас машина стоит на тестовом стенде. Здесь нет вообще никакого трафика, кроме двух пингов, запускающихся для теста.
    Приведите, пожалуйтса, точные команды, которые вы запускаете. Уточните, запускаете ли вы их на самом сервере-маршрутизаторе с длвумя линками или на сторонней машине. Цели для пингов - отвечают ли они на пинги. Каковы точные количественные характеристики трафика на линках (интерфейс такой-то, столько-то входящего, столько-то исходящего), как вы его меряете (среднее значение за 1,5,10 минут)

    Но даже без этих данных можно сказать, что ваш тест не вполне корректен. Per-flow хэширование оптимизировано под UDP и TCP трафик. Поэтому, рекомендую вам на машине за интерфейсов eth0 (и корректно прописанным default gateway) сгенерировать при помощи hping UDP-трафик с рандомизированными адресами источника и назначения, портами источника и назначения. Если в этом случае трафик распределится примерно равномерно, то все работает штатно.
    Ответ написан
  • ОС где только веб браузер?

    @throughtheether
    human after all
    Есть ли на белом свете решение под ключ под наши нужды?

    Нечто подобное называется Web kiosk. Пример.
    В свое время необходимо было решить схожую задачу, остановились на тюнинге шедшего в комплекте к оборудованию Windows XP Embedded.
    Ответ написан
    Комментировать
  • Аналог speedtest.net, тестирующий постоянно

    @throughtheether
    human after all
    iperf + обвязка на bash как вариант (потребуется сервер для установки ответной части iperf)
    Ответ написан
    Комментировать
  • Проксирование трафика игрового сервера

    @throughtheether
    human after all
    Вы упомянули что некую "защиту от DDoS" вам предоставляет хостер (можете кстати уточнить модель аппаратного решения?). Если предположить, что ваши сервисы используют UDP (что, думаю, корректно для случая с CS-подобными игровыми серверами без дополнительных оберток трафика), то мысли такие.

    Я полагаю, что максимум, что хостер может сделать - это ограничить трафик до сервера при DDoS-атаках (policing, причем хорошо, если политики учитывают порты назначения, а не только IP-адреса) или полностью заблокировать трафик до одного сервера, спасая инфраструктуру от чрезмерного трафика (bgp blackhole к аплинкам, эффективно атакуемый сервер все равно будет недоступен).

    При использовании UDP возникает проблема аутентификации трафика. При использовании TCP есть возможность отделить тех, кто действительно устанавливает соединение, от тех, кто шлет SYN-сегменты с подставными адресами - вторые не смогут ответить ACK-сегментом с правильным значением acknowledgement на наш SYN-ACK-сегмент (ну или есть варианты с специально сформированным кривым SYN-ACK ответом, легитимный хост ответит RST c правильным acknowledgment и перепошлет SYN через примерно 3 секунды). В случае с UDP мы такой роскоши лишены. Мы не можем средствами самого UDP определить, кто подделывает адреса, а кто является легитимным хостом. Полагаю, неплохим решением было бы вести на сервере список IP-адресов клиентов и каким-либо образом передавать его хостеру, чтобы он в случае атаки блокировал весь трафик, не удовлетворяющий списку. Но хостер не внедрит новомодныя SDN-технологии (программно-определяемые сети) и не даст вам доступ к соответствующему API, это будет довольно затруднительно организовать.

    Далее, что касается проксирования трафика. Самый наивный вариант - udp-прокси, т.е. сокет на сервере 1 принимает данные и копирует их в сокет, отправляющий данные на сервер 2. На сервер 2 пакеты, вмещающие соотвествующие датаграммы, придут с полем адреса источника, равном адресу сервера 1. Со стороны сервера 2 будет казаться, что все игроки имеют один и тот же адрес (если не предпринять никаких мер на уровне приложения, например добавлять в датаграммы дополнительный заголовок с адресом). Иногда это недопустимо.

    Более внятный вариант - натирование. Примерная схема на иллюстрации.
    game-proxy.png
    Подобная схема часто реализуется при балансировке нагрузки при помощи решений вроде F5. Здесь используется Destination NAT пакетов от клиента к серверу и Source NAT пакетов от сервера к клиенту. Весь трафик от S2 надо будет направить через S1, это может потребовать поднятия какого-либо (например, GRE) туннеля. Также необходимо учесть, что IP-адреса могут использоваться внутри L7-протокола (наиболее известный случай - FTP), это может поднять новые вопросы.

    Вообще говоря, ваша задача - широкое минное поле для экспериментов.
    Ответ написан
    Комментировать
  • Какие альтернативы soft-роутеру Vyatta сейчас есть?

    @throughtheether
    human after all
    сам не работал, но слышал про такой форк: VyOS
    Ответ написан
    1 комментарий
  • Почему сервер производит атаку на 80 порт?

    @throughtheether
    human after all
    Верить каждому автоматически генерированному письму при отсутствии других данных (дампы трафика и т.д.) считаю неконструктивным.
    В случае, если это письмо первоначально создано владельцем адреса yyy.yyy.yyy.yyy, и только переслано вам автоматически, возможен следующий вариант.

    Это может быть последствием SYN-флуда на сокет yyy.yyy.yyy.yyy:80 со спуфингом (подменой) адресов источников. Так могло совпасть, что был использован Ваш адрес. Чтобы полнее разобраться в ситуации, можно попросить администрацию Hetzner проанализировать flow-данные (netflow, sflow, смотря что они собирают) с целью уточнить :

    а) наблюдался ли в указанное время tcp-трафик от вашего сервера (xxx.xxx.xxx.xxx) до атакуемого (yyy.yyy.yyy.yyy:80)

    б) наблюдался ли в указанное время tcp-трафик от yyy.yyy.yyy.yyy:80 до xxx.xxx.xxx.xxx.

    Если верно б), значит, скорее всего, атака имела место и атакуемый сервер отвечал SYN-ACK на ваши (или не ваши) SYN (это одна из возможностей). Если при этом а) неверно, имело место подмена адреса источника, вы не при чем. Если а) верно, то проблема или у вас на сервере, или в сети Hetzner (т.е. другой их клиент подделывал адреса источника, это возможно при определенных условиях).
    Ответ написан
    Комментировать