Как я могу молча отбросить некоторые исходящие пакеты?


8

Я провожу некоторое тестирование приложения, над которым я работаю, и мне нужно уметь в течение короткого периода времени беззвучно отбрасывать исходящие UDP-пакеты для репликации режима возможного сбоя.

Есть какой-либо способ сделать это?

Примечание: iptables DROP не молчит для исходящих сообщений! Когда send()вызываемый или аналогичный вызов сбрасывается iptables, он возвращается EPERMпо какой-то причудливой причине (см. Здесь . К сожалению, я не могу использовать этот ответ, так как мой пункт назначения находится на расстоянии одного шага).

xtables-addons Раньше у меня был STEALглагол , но его удалили несколько лет назад, и я не могу его найти.


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


1
Далеко не полное / аккуратное решение, но в прошлом мне требовались аналогичные условия испытаний. В моем случае добавление фиктивного статического маршрута на сервер, к которому я подключаюсь, работало хорошо.
— Стив

@steve - фиктивный маршрут, кажется, ломает вещи в обоих направлениях, и мне нужно поддерживать функциональность направления RX.
— Фальшивое имя

Ответы:


2

Как насчет добавления фиктивного интерфейса и установки маршрута к этому интерфейсу?

# ip link add dummy0 type dummy
# ip link set dev dummy0 up
# ip route add 8.8.8.8/32 dev dummy0
# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms

Он всегда отправляет пакеты для любых (соседних или удаленных) адресов dummy0.

# tshark -i dummy0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'dummy0'
  1   0.000000   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=1/256, ttl=64
  2   1.007348   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=2/512, ttl=64
  3   2.015394   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=3/768, ttl=64

К сожалению, это, кажется, запрещает входящие пакеты, которые соответствуют маршруту от других интерфейсов. Как таковой, он на самом деле не работает (он прерывает открытый поток UDP RX, который мне нужно разрешить для продолжения).
— Фальшивое имя

2

Добавление маршрута нарушает входящий трафик из-за фильтрации обратного пути. Простое решение: отключите фильтрацию обратного пути на интерфейсе:

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

(используйте ваш входящий интерфейс вместо eth0вышеупомянутого).

Вы также можете использовать REDIRECTцель (отправить пакет, например, прослушивающему Netcat nc -l -u -p 1234 > /dev/null). Более сложная версия будет NFQUEUE.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.