Я пытаюсь настроить основанную на источнике маршрутизацию на своей машине человечности. Как самый простой пример я пытаюсь настроить единственный интерфейс на своей машине. Вся конфигурация взята отсюда: https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System
IP маршрут
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15
IP выставочная таблица маршрута rtgate
default via 10.0.2.2 dev enp0s3
10.0.2.0/24 dev enp0s3 scope link src 10.0.2.15
IP правило
0: from all lookup local
32764: from all to 10.0.2.15 lookup rtgate
32765: from 10.0.2.15 lookup rtgate
32766: from all lookup main
32767: from all lookup default
Но то, когда я пробую свинье 8.8.8.8, я всегда получаю 'Сеть, является недостижимым' сообщением: ping 8.8.8.8
connect: Network is unreachable
-I enp0s3 8.8.8.8 ping
ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable
Я также пытался добавить fake/not-existed (10.0.2.16) шлюз в глобальный, но я получил 'Узел назначения Недостижимые' сообщения. Кажется, что пакеты от 10.0.2.15 не передаются к 10.0.2.2 и пакеты, просто переданные к шлюзу по умолчанию. ip route flush cache
не помогает. У кого-либо есть какая-либо идея?
Этим утром я продолжал свое небольшое расследование. В начале я реконфигурировал свою машину человечности: был другой интерфейс, добавленный со шлюзом по умолчанию.
root@metalmachine:~# ip route
default via 10.0.4.2 dev enp0s9
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15
10.0.4.0/24 dev enp0s9 proto kernel scope link src 10.0.4.15
Будьте нацелены все еще на то же: настраивать основанную на источнике маршрутизацию для enp0s3.
root@metalmachine:~# ip route show table rtgate
default via 10.0.2.2 dev enp0s3
root@metalmachine:~# ip rule
0: from all lookup local
32765: from 10.0.2.15 lookup rtgate
32766: from all lookup main
32767: from all lookup default
Да. Та же проблема произошла. Когда я работаю ping -I enp0s3 8.8.8.8
, Ответы ICMP успешно происходят от 8.8.8.8, НО они проникают через enp0s9. tcpdump -i enp0s3 -n
все еще тихий и когда я закрываю enp0s9 прибытие остановки ответов.
Хорошо, меня судили для конфигурирования той же функции на Debian 8.7.
root@metalmachine:~# ip route
default via 10.0.3.2 dev eth1
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
10.0.3.0/24 dev eth1 proto kernel scope link src 10.0.3.15
root@metalmachine:~# ip route show table backup
default via 10.0.2.2 dev eth0
root@metalmachine:~# ip rule
0: from all lookup local
32765: from 10.0.2.15 lookup backup
32766: from all lookup main
32767: from all lookup default
Это - то, что я получил с выполнением tcpdump -i eth0 -n &
:
root@metalmachine:~# ping -I eth0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.0.2.15 eth0: 56(84) bytes of data.
11:36:34.432372 ARP, Request who-has 8.8.8.8 tell 10.0.2.15, length 28
11:36:35.430668 ARP, Request who-has 8.8.8.8 tell 10.0.2.15, length 28
^C
root@metalmachine:~# arp -an
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
? (8.8.8.8) at <incomplete> on eth0
? (10.0.3.2) at 52:54:00:12:35:02 [ether] on eth1
Ну, похож на системные попытки разрешить ARP для 8.8.8.8 и независимо от того, чего 8.8.8.8 определил местоположение в другой сети. И какой прокси-arp отключен во всех интерфейсах:
root@metalmachine:~# cat /proc/sys/net/ipv4/conf/*/proxy_arp
0
0
0
0
0
Но когда я попробовал ping -I 10.0.2.15 8.8.8.8
:
PING 8.8.8.8 (8.8.8.8) from 10.0.2.15 : 56(84) bytes of data.
11:54:58.434966 IP 10.0.2.15 > 8.8.8.8: ICMP echo request, id 1430, seq 1, length 64
10:54:58.446248 IP 8.8.8.8 > 10.0.2.15: ICMP echo reply, id 1430, seq 1, length 64
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=11.4 ms
После смотрения счетчиков eth0 я был убежден, что пакеты перемещаются через eth0.Работает! Но существуют некоторые заключения:
ip rule
s, или я делаю его неправильно. ping -I enp0s3 8.8.8.8
отправляет пакеты через маршрут по умолчанию.ping
утилита от iputils-s20150815 на Ubuntu 16.10 имеет некоторые проблемы с -I
аргумент или я делаем его неправильно. Например: ping -I 10.0.2.15 8.8.8.8
возвраты ping: unknown iface 10.0.2.15
Кто-то мог сказать мне, где я неправ?