LINUX.ORG.RU
ФорумAdmin

Доступ к машине по двум интерфейсам

 , ,


1

2

Доброго дня. На linux машине есть eth0. После поднятия PPP - создается интерфейс ppp0, но машина не пингуется по назначенному на этот интерфейс адресу. Если я отключаю кабель eth0 , то ppp становится доступным после его рестарта. почему так и как сделать чтобы машина помимо eth0 была доступна одновременно с ppp0. Вопрос именно в контексте таблицы маршрутизации - то есть как она должна выглядеть.

Вот настройки : до PPP

kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.3.200   0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0
192.168.3.200   0.0.0.0         255.255.255.255 UH    0      0        0 eth0

После поднятия ppp:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.3.200   0.0.0.0         UG    0      0        0 eth0
10.64.64.64     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.0.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0
192.168.3.200   0.0.0.0         255.255.255.255 UH    0      0        0 eth0

Соответственно устройство не пингуется по PPP до тех пора пока не отключить eth. 192.168.3.200 - шлюз внутри сети

Ответ на: комментарий от anc

из внешней сети, ppp0 - симка с белым ip. Ситуация абсолютно симметричная если сначала поднят ppp0, затем втыкаем кабель в eth0 - нет пинга по локальному ip внутри сети.

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

Без костылей не заработает. С костылями не знаю, возможно тоже. Нужно сделать роутинг исходящих пакетов в зависимости от интерфейса, с которого пришёл соответствующий им входящий. Для FreeBSD попробовал бы ipfw keep-state + fwd.

firkax ()
Ответ на: комментарий от noweapon

Тогда гуглите «linux два провадера», годных статей море. Пересказывать корявым языком то, что хорошо описано имхо нет смысла.
Что-то из описанного не будет получаться пишите, подправим :)

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

Без костылей не заработает. С костылями не знаю, возможно тоже.

Судя по описанию, если ethernet локалка, а аплинк свисток с 3/4G/разное, то непонятно, как раз, наоборот: почему не работает. Нет этому разумных причин.

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

Судя по описанию, если ethernet локалка, а аплинк свисток с 3/4G/разное, то непонятно, как раз, наоборот: почему не работает. Нет этому разумных причин.

default gateway стоит на ethernet, в модем ничего не идёт, если только dst ip не адрес модемного гейта. Чтобы знать, куда слать ответ, надо трекать связь между исходным пакетом и ответом на него, это не дефолтное поведение.

Странно что ты это не знаешь, у меня это была первая же проблема при попытке воспользоваться 3г модемом (не сделав перед этим ifdown eth0).

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

1. default gw убрать, вместо него прописать маршруты на нужные внутренние сети.
2. Разобраться, почему та шука, которая поднимает ppp, не поднимает default gw в ppp интерфейс.
3. Всё.

Обычно второе работает само. Может быть то, что поднимает ppp, пугается существующего default gw.

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

Это называется без костылей?

Да.

Там их на несколько страниц.

На несколько страниц это описание, что мы делаем и зачем. Что тащето правильно.

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

Странно что ты это не знаешь

Зато я знаю, что в нормальной ситуации pppd настраивают так, что он переопределяет default gw. Сложнее сделать наоборот - убрать этот параметр. Потому, что тут надо что-то убирать.

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

Нужно сделать роутинг исходящих пакетов в зависимости от интерфейса, с которого пришёл соответствующий им входящий. Для FreeBSD

В Linux это, кстати, называется policy based routing и тоже делается легко, но в описанном случае совершенно излишне. Это вот если бы реально о двух провайдерах речь шла, то да, но тут про это не написано.

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

Зато я знаю, что в нормальной ситуации pppd настраивают так,

Ну не знаю, у меня был сначала wvdial с почти дефолтными настройками, потом голый pppd с аналогично почти дефолтными, никто из них не трогал гейт, если он уже есть. Если гейта нет (ethernet выключен) на момент поднятия ppp-сессии, то да, ставят свой. Поскольку мне не нужно было одновременно два интерфейса, я просто стал выключать eth0 перед запуском ppp, но конечно были и другие варианты.

он переопределяет default gw

Если переопределить default gw на модем то перестанет работать ethernet. В том и дело что нужно одновременно два гейта и выбирать их надо не совсем обычным способом (обычный способ = в зависимости только от адреса назначения).

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

Ну не знаю, у меня был сначала wvdial с почти дефолтными настройками, потом голый pppd с аналогично почти дефолтными, никто из них не трогал гейт, если он уже есть.

Потому что вы его не просили.

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

О чего вспомнил, в далекие времена диалапа и работы на nt4, у меня в Startup лежал cmd-ик которые статик роуты добавлял :) cmd-ик потому, что случалось nt забывала добавленные роуты.

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

Если переопределить default gw на модем то перестанет работать ethernet.

Он же пишет: «выход машины в инет должен быть через мобильный инет. Но по eth устройство должно откликаться». То есть похоже на то, что там просто локальная сеть по ethernet, стало быть на приватных IP. Зачем там default gw?

При чём есть ещё фраза: «желательно, потому что без PPP отклик есть за ней». Из которой, похоже, следует, что пропадает доступ даже из той сети, что на eth0. noweapon, так?

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

А, пропустил. Тогда да, надо просто снести гейт из настроек eth0 и всё заработает.

Или нет, он пишет про какие-то «другие сети». Тогда гейт нужен и выбираться он должен динамически.

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

все так, вообщем мне помог source based routing (https://habr.com/ru/post/107267/)

Если всё так, то source based routing (как раз частный случай policy based) - это из пушки по воробьям. Всего-то надо было на внутренние сети маршруты прописать вместо default gw. Это раз. А два - в пределах сети, поднятой на eth0, доступ не должен был пропадать в любом случае.

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

source based routing ... это из пушки

В данном случае «пушка» может состоять из одной единственной строчки в конфиге ipfw - проще, чем прописывать несколько строк на роуты к внутренним сетям.

Впрочем, роуты к нескольким сетям можно тоже одной строчкой конфига ipfw реализовать, хоть и длиннее чем source-based.

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

выход машины в инет должен быть через мобильный инет. Но по eth устройство должно откликаться.

если обращаются к eth0 только из 192.168.0.0/255.255.252.0

то решение элементраное - убери дефолтный шлюз на 192.168.3.200 и добавь тот, который идет с ppp0. Собственно, он там уже добавлен, достаточно убрать гейтвей с eth0.

Если нужно, чтобы обращения на ppp0 извне отзывались на ppp0 а обращения откуда угодно на eth0 отзывались через eth0, то ответ куда сложнее - мультирабличный роутинг. Придется поднять две таблицы маршрутизации, помечать трафик на интерфесах и пускать его в соответствующую таблицу. Проще всего поставить shorewall и настроить в нем multiisp. Там все просто.

AVL2 ★★★★★ ()