У меня есть 3 сервера, настроенных с адресом IPv6, и я хочу добавить некоторую задержку на пару серверов, например S1 и S3. Для IPv4 я использую команду tc, и она работает нормально.
Команды, использующиеся для IPv4-адреса:
tc qdisc ls dev eth1
tc qdisc add dev eth1 root handle 1: prio
tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 1000ms
tc filter add dev eth1 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip
src 20.1.1.1 flowid 2:1
tc filter add dev eth1 parent 1:0 protocol ip pref 55 handle ::55 u32 match
ip src 20.1.1.3 flowid 2:1
Я хочу добавить такую же политику к IPv6-адресу. Любая помощь будет оценена. заранее спасибо
Поскольку эти фильтры применяются к исходящим пакетам и соответствуют исходным IP-адресам, а также последние две команды tc конфликтуют из-за повторного использования одного и того же дескриптора, я понимаю, что правила добавляются непосредственно на каждый сервер или на маршрутизатор, если дескрипторы изменяются. В ответе не имеет значения, где хэндл не будет указан, оставляя систему выбирать их.
Переключиться на эквивалентное правило IPv6 довольно просто: protocol ip
заменяется на protocol ipv6
пока match ip
заменяется на match ip6
. Спасибо за нестыковку! Одинаковые pref / prio нельзя использовать при переключении протокола. Ссылка на два предыдущих пункта: Использование tc с IPv6 и IPv4 . Просто добавьте ручку, если нужно (с уникальным :: nodeid в том же преф.).
Итак, чтобы добавить задержку для двух дополнительных адресов 2001:db8::10
и 2001:db8::20
, оставьте все предыдущие правила в Вопросе и добавьте эти два правила:
tc filter add dev eth1 parent 1:0 protocol ipv6 pref 56 u32 match ip6 src 2001:db8::10 flowid 2:1
tc filter add dev eth1 parent 1:0 protocol ipv6 pref 56 u32 match ip6 src 2001:db8::20 flowid 2:1
Называемый фильтр u32
на самом деле это означает, что он работает на 32 битах. Таким образом, каждое правило будет фактически использовать 4 совпадения, потому что IPv6-адрес использует 128 бит.