Маршрутизировать пакеты через аппаратный петлевой интерфейс, а не
Моя встроенная плата Linux имеет 3 интерфейса:
- eth0 - для всего исходящего трафика
- eth1 - аппаратная петля (трафик покидает плату, но сразу возвращается в тот же порт)
- lo - Стандартный петлевой интерфейс
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
?
Спасибо!
3 ответа
Локальный трафик не проходит через интерфейсы 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
Я думаю, ядро может проверить Dest IP, является ли локальный IP, а затем отправить в петлю.