Назад | Перейти на главную страницу

Linux - найти совпадения маршрута по умолчанию

Вроде того же вопроса, что и этот - Попадания в таблицу маршрутизации? - за исключением того, что я не использую iptables и ищу нормальные совпадения маршрутизации в таблице маршрутизации ядра.

Но мой вариант использования - определить, сколько пакетов пересылается по маршруту по умолчанию в моем брандмауэре, чтобы убедиться, что он бесполезен, прежде чем я его удалю. Ответы на упомянутый вопрос включают проверку кеша, но возможно ли, что некоторые пакеты будут пересылаться без попадания в кеш?

Кроме того, после проверки кеша рекомендуется команда (route -neeC) просто завершается, и я хотел бы проверять "совпадения поиска" маршрута по умолчанию в течение длительного периода (~ 24 часа). Какие-нибудь рекомендации, как это сделать?

Ура.

Кеш маршрутизации Linux для IPv4 был удален в Linux 3.6 (оставляя только использование оптимизированного LPC-дерево). Таким образом, в системе Linux с ОС после 2012 года невозможно получить маршрутизацию. тайник статистика.


Простой способ тег использование маршрута по умолчанию заключается в размещении царство стоимость на этом маршруте. Пакет, соответствующий этому маршруту (а не более конкретному маршруту, использующему тот же шлюз), будет идентифицирован как имеющий заданное значение области. Итак, если маршрут по умолчанию был 192.0.2.1 через eth0, маршрут будет установлен, например, так:

ip route add default via 192.0.2.1 proto static realm 10

Или вы можете изменить предыдущий маршрут по умолчанию (без области), заменив add с участием change, без сбоев.

Затем этот тег области можно повторно использовать как минимум в двух других сетевых подсистемах: tc filter ... route или nftables ' nft ... meta rtclassid.


Управление трафиком

tc довольно сырой и обычно работает на уровне интерфейса. Самый простой способ прикрепить фильтр - использовать prio qdisc, самый простой классный qdisc. Его особые свойства приоритета фактически не будут использоваться. Итак, следуя предыдущему примеру:

tc qdisc add dev eth0 root handle 1: prio

Теперь добавьте фильтр с пустым действием (и с pref заказ и Продолжать , чтобы при необходимости разрешить дополнительные похожие фильтры), просто чтобы иметь статистику по нему:

tc filter add dev eth0 parent 1: protocol ip pref 1 route to 10 action continue

Теперь каждый IP-пакет, соответствующий области маршрута 10, будет отображаться в статистике с использованием tc -s filter show dev eth0. Пример:

# tc -s filter show dev eth0
filter parent 1: protocol all pref 1 route chain 0 
filter parent 1: protocol all pref 1 route chain 0 fh 0xffff000a to 10 
    action order 1: gact action continue
     random type none pass val 0
     index 1 ref 1 bind 1 installed 48 sec used 4 sec
    Action statistics:
    Sent 12230 bytes 79 pkt (dropped 0, overlimits 0 requeues 0) 
    backlog 0b 0p requeues 0

Примечание: оба отправлены и пакеты, отправленные локально, совпадают, что может быть проблемой для измерений.


столы

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

столы устанавливает только запрошенные хуки netfilter, а не все доступные, поэтому обычно занимает меньше места, чем iptables. Здесь нам просто нужно правило, соответствующее области - это роль rtclassid выражение - с фишкой на нем. Если это для пакетов, отправленных локально, просто используйте вывод крючок. Переадресация будет соответствовать только пересылаемым пакетам.

nft add table ip mystats
nft add chain ip mystats forward '{ type filter hook forward priority 0; policy accept; }'
nft add rule ip mystats forward meta rtclassid 10 counter

Что даст, например, позже:

# nft list ruleset
table ip stats {
    chain forward {
        type filter hook forward priority filter; policy accept;
        meta rtclassid 10 counter packets 1453 bytes 118264
    }
}

Обнуление значения возможно только при сохранении его в именованном объекте, вместо этого будет установлен набор правил (для загрузки с nft -f file):

table ip mystats {
    counter defaultroutecount { }

    chain forward {
        type filter hook forward priority filter; policy accept;
        meta rtclassid 10 counter name "defaultroutecount"
    }
}

затем nft list counters или nft reset counters отобразит (или отобразит и сбросит) его содержимое.

Ты можешь использовать:

iptables -vL

или для пересылки:

iptables -t nat -vL

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