Сборка и установка accel-ppp

В этой статье я приведу пример сборки и установки accel-ppp в Ubuntu Server.

Требования accel-ppp такие:
Современный дистрибутив Linux
Ядро версии 2.6.25 или старше
cmake не младше версии 2.6
libcrypto-0.9.8 или старше (openssl-0.9.8)
libpcre
net-snmp-5.x (Для snmp)
liblua5.1 (для IPoE c DHCP option 82)

Читать далее Сборка и установка accel-ppp

Причина увеличения RX overruns на сетевом адаптере

Заметил однажды на одном из серверов доступа, что немного растет значение RX overruns.

Выполнил несколько раз команды (где p2p1 и p2p2 — имя сетевых интерфейсов):

ifconfig p2p1
ifconfig p2p2

Увеличивалось только значение RX overruns, на 10 пакетов каждую секунду, при трафике около 2Gb/s (100 000 пакетов в секунду).
На сервере был установлен сетевой адаптер «HP NC552SFP 10Gb 2-Port Ethernet Server Adapter» с сетевым контроллером от Emulex.

Посмотрев размер максимального и текущего буфера:

ethtool -g p2p1
ethtool -g p2p2

Обнаружил, что буферы установлены на максимум, TX буфер — 4096, а максимально возможный RX буфер был только 512.
Смотрите также мою статью — Изменение TX и RX буферов сетевых интерфейсов в Linux

Посмотрев правильно ли распределены прерывания сетевой платы по ядрам процессора:

grep p2p1 /proc/interrupts

Обнаружил что у сетевого адаптера 4 IRQ прерывания максимум, и irqbalance соответственно их распределил на 4 ядра, а ядер то 24.

Проблему решил заменой сетевого адаптера на более дорогой — «665249-B21 Контроллер HP Ethernet 10Gb 2-port 560SFP+ Adapter» с сетевым контроллером Intel 82599.
После этого ошибка не наблюдалась, RX и TX буферы были 4096, а IRQ распределено на все 24 ядра.
Спустя пару дней, счетчики ошибок оставались по нулям:

p2p1      RX packets:62535001155 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36343078751 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:77395016742081 (77.3 TB)  TX bytes:10991051263063 (10.9 TB)

p2p2      RX packets:35672087256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58598868464 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10996254475480 (10.9 TB)  TX bytes:73378418623349 (73.3 TB)

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

Смотрите также мою статью Настройка сети в Linux

Мониторинг Linux ISG в Zabbix

Сегодня захотелось сделать мониторинг Linux ISG сессий в Zabbix.

Введя команду на одном из серверов:

/opt/ISG/bin/ISG.pl show_count

Увидел следующее:

Approved sessions count: 2021
Unapproved sessions count: 2

Zabbix агент на сервере уже был установлен, поэтому открыл его конфигурационный файл (в редакторе nano клавиши Ctrl+X для выхода, а y/n для сохранения или отмены изменений):

nano /etc/zabbix/zabbix_agentd.conf

Придумал и добавил следующий код:

UserParameter=isg.approved, /opt/ISG/bin/ISG.pl show_count | grep "Approved sessions count:" | awk '{print $4}'
UserParameter=isg.unapproved, /opt/ISG/bin/ISG.pl show_count | grep "Unapproved sessions count:" | awk '{print $4}'

Разрешим работу Zabbix агента под root пользователем указав:

AllowRoot=1

Перезапустим Zabbix агент чтобы применить изменения:

sudo /etc/init.d/zabbix-agent restart

На Zabbix сервере создадим шаблон ISG, добавим в него элементы данных, указав тип — Zabbix агент, а ключи: isg.approved, isg.unapproved.
Создадим графики для созданных элементов данных.

Применим шаблон к нужным узлам сети.

Готово.

Решение ошибки «nf_conntrack: table full, dropping packet»

Заметил однажды в Ubuntu Server 14.04 LTS настроенного как роутер, в файле /var/log/kern.log следующую ошибку:

Aug 14 17:32:51 router kernel: [1933791.144013] nf_conntrack: table full, dropping packet

Посмотрим текущее максимальное значение записей количества статуса соединений:

cat /proc/sys/net/netfilter/nf_conntrack_max
sysctl -a | grep conntrack_max

Посмотрим сколько использовано:

cat /proc/sys/net/netfilter/nf_conntrack_count

Увеличим командой:

echo 4194304 > /proc/sys/net/netfilter/nf_conntrack_max

Чтобы значение не сбросилось после перезапуска системы, можно добавить команду выше например в файл:

sudo nano /etc/rc.local

Либо откроем файл конфигурации ядра:

sudo nano /etc/sysctl.conf

Добавим или изменим строку:

net.netfilter.nf_conntrack_max = 4194304

И применим настройки:

sysctl -p

Смотрите также:
Мониторинг nf_conntrack в Zabbix

Решение проблемы Asterisk — нет звука при звонке через NAT

Заметил недавно что нет звука при звонке с IP-телефона на другой IP-телефон которые оба находились за одним и тем же NAT (роутером).

По этому в конфигурации sip.conf для этих аккаунтов нужно указать что они за NAT, указав параметр:

nat=force_rport,comedia

Хочу заметить что значение yes для nat уже устарело начиная с версии Asterisk 11, по этому правильно будет как указанно выше.

И указать также на no для параметра directmedia, чтобы Asterisk не отправлял пакеты на тот же порт из которого их получил (что в моём случае и произошло, оба телефона подключались к Asterisk с одного IP, с одинаковыми портами):

directmedia=no

Все.

Проброс портов на маршрутизаторах Mikrotik

Чтобы пробросить порт на маршрутизаторе Mikrotik, необходимо открыть меню IP -> Firewall, выбрать вкладку NAT и добавить новое правило, нажав «Add new» или «+«.

В открывшемся окне необходимо указать следующие основные параметры:
Chain (Цепочка): dstnat (означает что соединение будет идти из внешней во внутреннюю сеть)

Protocol: протокол, tcp/udp/…

Dst. Port: порт назначения, который будет виден из вне (1 — 65535)

In. interface: входящий интерфейс на котором слушается указанный выше порт, например ether1-gateway

Action (Действие): netmap

To Addresses: ip адрес сетевого устройства/компьютера внутри сети с которого необходимо пробросить порты, например 192.168.88.250

To Ports: порт который необходимо пробросить, приведу несколько примеров портов: 3389/tcp — удаленный рабочий стол, 80/tcp — вэб сервер, 23/tcp — telnet, 161/udp — snmp, 22/tcp — SSH, 1433/tcp — MS SQL Server и т.д.)

Чтобы из-локальной сети был доступ к внешнему IP маршрутизатора, необходимо добавить еще два правила.
Первое:
Chain: dstnat
Src. Address: 192.168.88.0/24 (внутренняя сеть)
Dst. Address: внешн_ip_маршрутизатора
Protocol: tcp
Dst. Port: порт
Action: dst-nat
To Addresses: ip_внутри_сети
To Ports: порт

Второе:
Chain: srcnat
Src. Address: 192.168.88.0/24 (внутренняя сеть)
Dst. Address: ip_устройства_внутри_сети
Protocol: tcp
Dst. Port: порт
Action: src-nat
To Addresses: 192.168.88.1 (внутренний ip маршрутизатора)

К DVR Dahua пробрасывал несколько раз, нужно было пробросить 80 tcp, 554 tcp, 37777 tcp, 37778 udp.