UDP-соединение не маршрутизирует трафик c для определенного интерфейса - PullRequest
0 голосов
/ 03 марта 2020

У меня странная проблема, когда поведение соединения на сокете UDP зависит от интерфейса, с которого получен трафик c.

Я генерирую сокет UDP, который привязывается к указанному порту c на все интерфейсы и ждет входящих пакетов. Если connect не был вызван на локальном сокете, я (1) подключаюсь к удаленному адресу (2) отслеживает сокет и (3) генерирует новый неподключенный сокет на том же локальном порту. Если в сокете вызывается connect, я просто вызываю recv и обрабатываю данные.

Когда traffi c переходит через интерфейс ethe rnet, traffi c правильно маршрутизируется в подключенный сокет. Однако в интерфейсе Wi-Fi traffi c всегда маршрутизирует во вновь созданный неподключенный сокет.

Я убедился, что это нормально работает на моей машине с Ubuntu, и это похоже на причуду другой аппаратной платформы. Я работаю над.

Что я могу сделать, чтобы решить проблему? Тот факт, что системный вызов connect никогда не завершается ошибкой, но по-разному работает для двух интерфейсов, говорит о том, что это не проблема ядра. Есть ли что-то в таблицах IP, которые могут повлиять на маршрутизацию traffi c или в драйвере wifi? Что-то еще?

1 Ответ

0 голосов
/ 04 марта 2020

Так что в моем случае проблема заключалась в асимметрии правил ip между ethe rnet и интерфейсом wifi, которые вызывают проблемы с маршрутизацией. Если вы столкнулись с подобной вещью, вы можете увидеть некоторые правила, которые установлены с помощью:

ip rule show

и / или

iptables --list
...