LINUX.ORG.RU
решено ФорумAdmin

ip route, iptables, gre - всё вместе

 , , ,


0

1

Добрый день, подскажите пожалуйста. Есть три виртуалки. А (eth1: 192.168.100.100/24), B (eth1: 192.168.100.254/24, eth2:4.4.4.2/24, 10.10.10.2/24 - gre tunnel), C (eth1: 172.16.100.254/24, eth2:5.5.5.2/24, 10.10.10.3/24 - gre tunnel)

Сама задача: между В и С должен быть туннель, и свободно пинговаться все подсети между собой по внутренним адресам, т.е.: А(192.168.100.100) > С (172.16.100.254) В(192.168.100.254) > C (172.16.100.254) C(172.16.100.254) > B (192.168.100.254) C(172.16.100.254) > A (192.168.100.100)

Для поднятия gre туннеля направил друг на друга 4.4.4.2 и 5.5.5.2 через ip route. Gre спокойно пингуется по присвоенным адресам с B (10.10.10.2) к C (10.10.10.3) и наоборот.

Так как дальше машины B у меня есть сетка 192.168.100.0/24, а именно машина А (192.168.100.100/24), прописываю маршрут на С: ip route add 192.168.100.0/24 via 172.16.100.254. Ну и в обратном порядке прописываю на B для подсети 172.16.100.0/24.

Таким образом, пингуется конечная точка с С на B (192.168.100.254) через туннель, однако А уже не пингуется, т.е. 192.168.100.100 не проходит с С (172.16.100.254). Что ещё нужно добавить?

Также хотелось бы с А (192.168.100.100) пинговать С (172.16.100.254). Для этого в А я прописываю gateway B (192.168.100.254), так как вход в туннель именно на В, но трафик то на В в туннель уходит с другого интерфейса и с другого ip (10.10.10.2/24), как выполнить переброс или прописать маршруты, подскажите пожалуйсат?



Последнее исправление: copy_past (всего исправлений: 1)

Таким образом, пингуется конечная точка с С на B (192.168.100.254) через туннель, однако А уже не пингуется, т.е. 192.168.100.100 не проходит с С (172.16.100.254). Что ещё нужно добавить?

На A нужно прописывать маршруты к 172.16.100.0/24 и 10.10.10.2/31.

И вобще, если не будет работать, покажите вывод «ip route» на всех машинах.

Подразумевается, что iptables у вас чистые и, что до ip rule вы ещё не добрались.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Ответ на: комментарий от mky

Да, разумеется iptables чистый, ip rule не хотелось бы использовать, кажется, что есть более функциональное решение. Я подумывал о динамической маршрутизации, но не знаю помогла бы она в этом случае.

ip route А: default via 192.168.100.254 dev enp0s8 onlink; 10.10.10.0/24 via 192.168.100.254 dev enp0s8; 172.16.100.0/24 via 192.168.100.254 dev enp0s8; 192.168.100.0/24 dev enp0s8 proto kernel scope link src 192.168.100.100

ip route B: 4.4.4.0/24 dev enp0s8 proto kernel scope link src 4.4.4.100; 5.5.5.0/24 via 4.4.4.100 dev enp0s8; 10.10.10.0/24 dev gret proto kernel scope link src 10.10.10.2; 172.16.100.0/24 via 10.10.10.4 dev gret; 192.168.100.0/24 dev enp0s3 proto kernel scope link src 192.168.100.254

ip route C: default via 172.16.100.1 dev enp0s3 onlink; 4.4.4.0/24 via 5.5.5.100 dev enp0s8; 4.4.4.0/24 dev enp0s8 proto kernel scope link src 5.5.5.100; 192.168.100.0/24 via 10.10.10.2 dev gret

gret - интерфейс gre туннеля

copy_past
() автор топика
Ответ на: комментарий от anc

Да, разумеется iptables чистый, ip rule не хотелось бы использовать, кажется, что есть более функциональное решение. Я подумывал о динамической маршрутизации, но не знаю помогла бы она в этом случае.

ip route А: 
default via 192.168.100.254 dev enp0s8 onlink
10.10.10.0/24 via 192.168.100.254 dev enp0s8
172.16.100.0/24 via 192.168.100.254 dev enp0s8
192.168.100.0/24 dev enp0s8 proto kernel scope link src 192.168.100.100

ip route B: 
4.4.4.0/24 dev enp0s8 proto kernel scope link src 4.4.4.100 5.5.5.0/24 via 4.4.4.100 dev enp0s8
10.10.10.0/24 dev gret proto kernel scope link src 10.10.10.2
172.16.100.0/24 via 10.10.10.4 dev gret
192.168.100.0/24 dev enp0s3 proto kernel scope link src 192.168.100.254

ip route C: 
default via 172.16.100.1 dev enp0s3 onlink
4.4.4.0/24 via 5.5.5.100 dev enp0s8
4.4.4.0/24 dev enp0s8 proto kernel scope link src 5.5.5.100 
192.168.100.0/24 via 10.10.10.2 dev gret

gret - интерфейс gre туннеля

copy_past
() автор топика
Ответ на: комментарий от copy_past

Изначально один конец тунеля на (С) был 10.10.10.3/24, а в таблице маршрутизации (В) оно почему-то через 10.10.10.4 прописано. Ты уж определись...

На (С) нет маршрута до 192.168.100/24 via 10.10.10.2

Странно, что подняв на (С) тунель, у тебя не появилась в таблице маршрутизации строка

10.10.10.0/24 dev gret proto kernel scope link src 10.10.10.Х

vel ★★★★★
()
Ответ на: комментарий от copy_past

ip rule не хотелось бы использовать

Ты не поверишь :), но он всегда используется, там по умолчанию есть три правила. Но если вы туда не лазили, там всё хорошо.

Форвардинг (маршрутизация пакетов) на (B) включён?

iptables чистый

Политики в ACCEPT? А то может у вас у FORWARD политика в DROP выставлена.

Если у вас на (A) прописан default через (B), то маршруты «через тунель» там особо и не нужны. В остальном всё выглядит рабочим, смотрите tcpdump'ом что происходит с пакетами. Может у виртуалки какие приколы с сетью.

То есть у вас должен быть на (A) на enp0s8 интерфейсе виден пакет (192.168.100.100->172.16.100.254) и этот же пакет должен быть виден на enp0s8 на (B) и потом на gret интерфейсах.

Я подумывал о динамической маршрутизации

Там нет одной кнопки, от которой всё заработает. То есть легче не будет, сначала обычную освойте...

mky ★★★★★
()
Ответ на: комментарий от mky

Ну я уже правила по поменял, не буду уже сюда снова выкладывать, суть та же, с С пингуется только B, с В пингуется С и А, с А пингуется В. tcpdump-ом прошелся, кажется нашел зацепку, а именно, когда с А пингую В, он то приходит на eth1, наверно может сработать, если весь приходящий трафик на А заворачивать с eth1 в другой интерфейс, а именно в туннель gret, вопрос только как его завернуть, чтобы именно весь приходящий трафик туда перенаправлялся….

copy_past
() автор топика
Ответ на: комментарий от vel

Ориентир на правила, в описание ошибся с айпишником. На (С) есть маршрут до 192.168.100/24 via 10.10.10.2 (посмотри внимательнее, последняя строчка). Даже добавив это правило : 10.10.10.0/24 dev gret proto kernel scope link src 10.10.10.Х всё то же самое происходит

copy_past
() автор топика
Ответ на: комментарий от copy_past

Про «На (С) нет маршрута до 192.168.100/24 via 10.10.10.2» - это пятница :(.

гм. чиатать тебя сложно. Ты почему-то маршруты называешь правилами.

Правила в моем понимании это «ip ru»

Для отладки обычно используется «ip ro get ...».

Даже добавив это правило : 10.10.10.0/24 dev gret proto kernel scope link src 10.10.10.Х

Маршрут, а не правило.

И как ты его добавлял? Это же прямой маршрут, он должен добавляться ядром при подъёме интерфейса.

Если он не появился после подъёма тунеля, значит с тунелем что-то не так....

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от mky

Всё получилось, попробовал с iptables, не зашло потом подобавлял маршруты, не зашло, потом решил всё таки всё перепроверить, и действительно, с какого-то крена ip_forward отвалился на одной из машин, при чём на остальных фиксирован 1, интересно откуда могло так произойти или что могло его перезаписать, потом вернул iptables и всё пошло во все стороны, спасибо за наводки и информацию.

copy_past
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.