Назад | Перейти на главную страницу

маршрутизировать пакеты через аппаратный петлевой интерфейс, а не через

Моя встроенная плата Linux имеет 3 интерфейса:

ifconfig показывает следующее:

eth1      Link encap:Ethernet  HWaddr AA:BB:CC:DD:EE:FF  
          inet addr:169.254.1.1  Bcast:169.254.255.255  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Base address:0x8000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1561 (1.5 KiB)  TX bytes:1561 (1.5 KiB)

И, route дает:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.1.1     *               255.255.255.255 UH    0      0        0 eth1
A.B.C.96        *               255.255.255.240 U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         A.B.C.110       0.0.0.0         UG    0      0        0 eth0

Я могу ping назначенный IP-адрес интерфейса eth1, например:

PING 169.254.1.1 (169.254.1.1): 56 data bytes
64 bytes from 169.254.1.1: seq=0 ttl=64 time=0.143 ms
64 bytes from 169.254.1.1: seq=1 ttl=64 time=0.067 ms

Но, все пакетов появляются на lo интерфейс, а не eth1, согласно ifconfig сообщил счетчики RX / TX.

Зачем? Трафик действительно вход и выход из eth1 порт, но учитываемый lo интерфейс? Или действительно ли трафик проходит через lo?

Спасибо!

Локальный трафик не проходит через интерфейсы Ethernet. По сути, локальный трафик проходит через локальный интерфейс. ОС не знает, что у вашего интерфейса eth1 есть аппаратный шлейф.

Стек TCP / IP в Linux очень гибкий. Видеть:

# — let's add dummy IP-address to Wi-Fi NIC
# ip ad ad 11.1.2.3/24 dev wlan0
# — Now chage its scope from 'local' to 'link'
# ip ro replace 11.1.2.3 dev wlan0 scope link table local

# — with tcpdump we can see now that's traffic to that dummy
# ex-local IP-address actually tries to go out of Wi-Fi NIC:

00:15:22.807607 ARP, Request who-has 11.1.2.3 tell 10.0.0.7, length 28

вы можете запустить эту команду:

ip route get 169.254.1.1

то вы нашли это правило маршрута:

local 169.254.1.1 dev lo  src 169.254.1.1

Я думаю, что ядро ​​может проверить IP-адрес назначения, является ли он локальным IP-адресом, а затем отправить его в петлю.