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

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
yaegashi
источник
К сожалению, это, кажется, запрещает входящие пакеты, которые соответствуют маршруту от других интерфейсов. Как таковой, он на самом деле не работает (он прерывает открытый поток UDP RX, который мне нужно разрешить для продолжения).
Фальшивое имя
2

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

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

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

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

derobert
источник