Как эффективно определить размер внутренней таблицы маршрутизации?

Мне нужно знать, как найти размер таблицы маршрутизации ядра. Я знаю, что таблица маршрутизации хранится в /proc/net/route.

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

Сохраняется ли размер файла маршрутизации в другом месте? Как мне эффективно узнать размер файла /proc/net/route?

3
задан 20 October 2016 в 09:26

2 ответа

Вот альтернатива использованию /proc/net/route для нахождения количества записей маршрута на Вашей машине:

Можно получить эту информацию путем опроса таблицы SNMP MIB машины:

snmpwalk -v 2c -c <YourSNMPString> <YourIPAddress> 1.3.6.1.2.1.4.21

RFC1213-MIB::ipRouteDest.0.0.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteDest.169.254.0.0 = IpAddress: 169.254.0.0
RFC1213-MIB::ipRouteDest.192.168.1.0 = IpAddress: 192.168.1.0
RFC1213-MIB::ipRouteIfIndex.0.0.0.0 = INTEGER: 2
RFC1213-MIB::ipRouteIfIndex.169.254.0.0 = INTEGER: 2
RFC1213-MIB::ipRouteIfIndex.192.168.1.0 = INTEGER: 2
RFC1213-MIB::ipRouteMetric1.0.0.0.0 = INTEGER: 1
RFC1213-MIB::ipRouteMetric1.169.254.0.0 = INTEGER: 0
RFC1213-MIB::ipRouteMetric1.192.168.1.0 = INTEGER: 0
RFC1213-MIB::ipRouteNextHop.0.0.0.0 = IpAddress: 192.168.1.1
RFC1213-MIB::ipRouteNextHop.169.254.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteNextHop.192.168.1.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteType.0.0.0.0 = INTEGER: indirect(4)
RFC1213-MIB::ipRouteType.169.254.0.0 = INTEGER: direct(3)
RFC1213-MIB::ipRouteType.192.168.1.0 = INTEGER: direct(3)
RFC1213-MIB::ipRouteProto.0.0.0.0 = INTEGER: local(2)
RFC1213-MIB::ipRouteProto.169.254.0.0 = INTEGER: local(2)
RFC1213-MIB::ipRouteProto.192.168.1.0 = INTEGER: local(2)
RFC1213-MIB::ipRouteMask.0.0.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteMask.169.254.0.0 = IpAddress: 255.255.0.0
RFC1213-MIB::ipRouteMask.192.168.1.0 = IpAddress: 255.255.255.0
RFC1213-MIB::ipRouteInfo.0.0.0.0 = OID: SNMPv2-SMI::zeroDotZero
RFC1213-MIB::ipRouteInfo.169.254.0.0 = OID: SNMPv2-SMI::zeroDotZero
RFC1213-MIB::ipRouteInfo.192.168.1.0 = OID: SNMPv2-SMI::zeroDotZero

В предыдущем примере Вы будете интересоваться последними тремя строками вывода.

Или, Вы могли выполнить следующую команду для получения только количества записей таблицы маршрутизации системы:

snmpwalk -v 2c -c <YourSNMPString> <YourIPAddress> 1.3.6.1.2.1.4.21 | grep "ipRouteInfo" | wc -l который возвратит значение 3 в данном случае.

Если бы Вы более довольны графическим интерфейсом для сбора этой информации, я рекомендовал бы использовать SNMPb для запросов МИБ:

Если Вы интересуетесь только рассмотрением кэша маршрутов и не просто количества записей в Вашей таблице, можно определить размер кэша маршрутов со следующей командой:

dmesg | grep -i 'IP route cache'

Эта команда должна возвратить вывод, подобный следующему:

[0.213066] IP route cache hash table entries: 32768 (order: 5, 131072 bytes)

Если бы Вы смотрите какое-то время увеличенное количество записей кэша маршрутов, я рекомендовал бы использовать следующую команду:

lnstat -s1 -i1 -c-1 -f rt_cache

Можно изменить интервал обновления, как Вы считаете целесообразным и затем передаете вывод по каналу в файл для легкого управления (см. также Настраивающийся Linux кэш маршрутов IPv4 для получения дополнительной информации). rt_cache столбец записи был бы полезен, если Вы поддерживаете таблицу динамической маршрутизации на своей машине и хотите отследить колебание таблицы маршрутизации (из-за колебания, отказа маршрута, и т.д.).

Это основано на максимальном размере по умолчанию таблиц IPv4 и IPv6, которые можно получить при помощи следующей команды:

cat /proc/sys/net/ipv{4,6}/route/max_size

Размер таблицы маршрутизации по умолчанию для IPv4 и IPv6 4096 и 524288, соответственно.

3
ответ дан 20 October 2016 в 09:26

Простое решение:

route -n | wc

Вычтите одно из возвращенного значения, чтобы учесть ваш маршрут по умолчанию.

0
ответ дан 20 October 2016 в 09:26

Другие вопросы по тегам:

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