Я хотел бы отправить данные между двумя сетевыми интерфейсами, которые подключены с помощью перекрестного кабеля в Linux. Два интерфейса Ethernet находятся на одной коробке. Я определил, что интерфейсы Ethernet имеют разные статические IP-адреса (1.2.3.4 и 5.6.7.8) и используют сокеты для отправки байтов с одного IP-адреса на другой. Я хочу подчеркнуть, что я хочу, чтобы данные покидали один интерфейс блока и получали их на другом интерфейсе того же блока. Одним из следствий этого является то, что отключение кабеля предотвратит связь между клиентом и сервером на одном и том же устройстве.
Ядро умнее меня, я думаю, и решает, что ему не нужно отправлять информацию по проводам и направляет данные непосредственно между сокетами внутри, что сводит на нет тест. Я пытался использовать SO_BINDTODEVICE, чтобы заставить клиента отправлять данные из определенного интерфейса, но сервер его никогда не видит. Я действительно застрял, и это не должно быть так сложно.
В таблице маршрутов есть две записи -n
Dest Gateway Genmask flags metric use interface
1.2.3.0 0.0.0.0 255.255.255.0 U 0 0 eth0
5.6.7.0 0.0.0.0 255.255.255.0 U 0 0 eth1