Ubuntu 16.10: исходная маршрутизация: пакеты не перенаправляются

Я пытаюсь настроить маршрутизацию на основе исходного кода на моей машине с Ubuntu. В качестве простейшего примера я пытаюсь настроить единственный интерфейс на моей машине. Вся конфигурация взята отсюда: 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 route show table 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

ping -I enp0s3 8.8.8.8

ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable

Я также пытался добавить поддельный / несуществующий (10.0.2.16) шлюз в глобальный, но я получил сообщения 'Destination Host Unreachable'. Похоже, что пакеты с 10.0.2.15 не пересылаются на 10.0.2.2, а пакеты просто пересылаются на шлюз по умолчанию.ip route flush cache не помогает. У кого-нибудь есть идеи?

Большое обновление

Ubuntu

Этим утром я продолжил свое маленькое расследование. Сначала я перенастроил свою машину с Ubuntu: был добавлен еще один интерфейс с шлюзом по умолчанию.

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.8ICMP-ответы успешно приходят из 8.8.8.8 НО они приходят через enp0s9. tcpdump -i enp0s3 -n все еще молчали, и когда я закрываю enp0s9 ответы перестают приходить.

Debian

Хорошо, я пытался настроить ту же функцию в 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 находился в другой сети. И не важно, что proxy-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. ОНО РАБОТАЕТ! Но есть некоторые выводы:

  1. Ubuntu 16.10 с iputils-s20150815 не пересылает пакеты в указанную таблицу маршрутизации ip ruleс, или я делаю это неправильно. ping -I enp0s3 8.8.8.8 отправляет пакеты по маршруту по умолчанию.
  2. ping У утилиты от iputils-s20150815 на Ubuntu 16.10 есть некоторые проблемы с -I аргумент или я делаю это неправильно. Например: ping -I 10.0.2.15 8.8.8.8 возвращается ping: unknown iface 10.0.2.15
  3. Утилита ping из iputils-s20121221 в Debian 8.7 пытается разрешить ARP для хоста из другой сети, или я делаю это неправильно.

Пожалуйста, кто-нибудь может сказать мне, где я не прав?

0 ответов

Другие вопросы по тегам