Linux использует неправильный сетевой интерфейс, чем предполагалось
В качестве NAS я использую устройство Odroid с Debian 11 и ядром 6.1. Я пробовал более старые версии ядра (5.10 и т. д.) без каких-либо различий.
Недавно я подключил второй сетевой интерфейс, и теперь у меня есть:
- eth0 (встроенный порт Ethernet 1 Гбит/с), IP: 192.168.1.155.
- eth1 (сетевая карта USB 3.0 1 Гбит/с), IP: 192.168.1.156.
В netplan устройства настроены на использование одного IP-адреса eth0:
addresses:
- 192.168.1.155/32
эт1:
addresses:
- 192.168.1.156/32
есликонфигурация:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.155 netmask 255.255.255.255 broadcast 0.0.0.0
inet6 X prefixlen 64 scopeid 0x20<link>
ether X txqueuelen 1000 (Ethernet)
RX packets 23767007 bytes 1991691527 (1.8 GiB)
RX errors 0 dropped 4484 overruns 0 frame 0
TX packets 39239638 bytes 58168353216 (54.1 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 24
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.156 netmask 255.255.255.255 broadcast 0.0.0.0
inet6 X prefixlen 64 scopeid 0x20<link>
ether X txqueuelen 1000 (Ethernet)
RX packets 2532258 bytes 202799128 (193.4 MiB)
RX errors 1 dropped 2821 overruns 0 frame 0
TX packets 1164474 bytes 16121299674 (15.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
IP-маршрут:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.155 metric 100
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.156
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.155
192.168.1.1 dev eth0 proto dhcp scope link src 192.168.1.155 metric 100
Кажется, что мой интерфейс USB3.0 eth1 медленнее (максимальная исходящая скорость около 830 Мбит/с) по сравнению с eth0 (около 980 Мбит/с).
Я всегда получаю доступ к своему NAS с помощью192.168.1.155
(поэтому он должен перейти на eth0 на NAS), но я заметил снижение скорости. После проверкиipconfig
, Я заметил, чтоTX packets
увеличение на неправильном интерфейсе.
Кажется, это очень случайно. Как правило, я могу исправить все проблемы со снижением скорости, выключив компьютер:sudo ip link set eth1 down
.
Иногда, когда я получаю доступ к NAS с помощью192.168.1.156
это также связано с неправильным интерфейсом. Вместо снижения скорости я получаю полнуюeth0
, вместоeth1
.
Для проверки этих скоростей я использую Windows SMB и SFTP Filezilla.
Итак, мой вопрос: что я делаю не так? Почему Linux просто выбирает один интерфейс (случайным образом) и использует его для моих запросов на обоих IP-адресах: *.155 и *.156?
РЕДАКТИРОВАТЬ:
Думаю, я решил проблему. Здесь я нашел полезную информацию: https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming .
Шаг 1:
sysctl -w net.ipv4.conf.default.arp_filter=1
sysctl -w net.ipv4.conf.all.arp_filter=1
sysctl -w net.ipv4.conf.default.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
Шаг 2:
reboot
Шаг 3:
Я создал сценарий .sh на основе исходного вывода/вывода по умолчанию изip route
:
#!/bin/bash
# crontab -e
# @reboot sleep 120; /home/mona/ip_route_rules_for_separate_eth0_eth1.sh
if grep -Fxq '252 ispa' "/etc/iproute2/rt_tables"; then
echo ""
else
echo '252 ispa' >> "/etc/iproute2/rt_tables"
fi
if grep -Fxq '251 ispb' "/etc/iproute2/rt_tables"; then
echo ""
else
echo '251 ispb' >> "/etc/iproute2/rt_tables"
fi
#Eth1:
ip rule add from 192.168.1.156 table ispa prio 1
ip route add 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.156 table ispa
ip route add 192.168.1.1 dev eth1 proto dhcp scope link src 192.168.1.156 metric 100 table ispa
ip route add default via 192.168.1.1 dev eth1 proto dhcp src 192.168.1.156 metric 100 table ispa
#Eth0:
ip rule add from 192.168.1.155 table ispb prio 1
ip route add 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.155 table ispb
ip route add 192.168.1.1 dev eth0 proto dhcp scope link src 192.168.1.155 metric 100 table ispb
ip route add default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.155 metric 100 table ispb
Я использую задание croon при перезагрузке, но это, вероятно, неправильно, поскольку при перезапуске интерфейса правила не применяются.
Кто-нибудь знает, как я могу переписать эти команды для выполнения netplan?
1 ответ
Вместоarp_filter = 1
, который требует настройки маршрутизации на основе источника, рассмотритеarp_ignore = 1
:
1 — отвечать только в том случае, если целевой IP-адрес является локальным адресом, настроенным на входящем интерфейсе.
Ссылка: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt .