У меня есть три хоста со следующей конфигурацией:
Host A: IP:192.168.1.1/24
Host B: IP:192.168.1.2/24
Host C: IP:192.168.3.1/24
Все происходит в CentOS 6, и все интерфейсы имеют теги VLAN (если здесь это имеет значение).
Я отправляю UDP-трафик по направлениям B->A
и C->A
. Это чистый однонаправленный трафик, поэтому не настроен любая маршрутизация на хосте A
Зачем C->A
трафик не принимается на А сторона, если не направляется на C настроен на А. (это видно на уровне tcpdump, но не получено сокетом)
Я трачу много времени на устранение неполадок. Я ожидал множество причин: настройки iptables, selinux и даже rp_filter, но решение оказалось таким простым.
Я хотел бы услышать, в чем причина такого поведения, и есть ли конфигурация, отвечающая за необходимость наличия маршрута источника в случае UDP.
Вы, вероятно, ограничены фильтром uRPF Linux, который предназначен для предотвращения спуфинга пакетов, но нарушает настройки асимметричной маршрутизации. Отключите это с помощью
sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.eth0.rp_filter=0
(Да, вам нужно отключить как all
запись и конкретная для интерфейса.)