[Решено] Два сетевых интерфейса и программы

sleepycat, не куда придётся, а в дефолтный роут с меньшей метрикой.

Соответственно, можно переместить дефолтные роуты в таблицу default, а перед ней вставить ещё одну, с дефолтным роутом на менее приоритетный шлюз. Метим соединения, вошедшие через него, и по метке отправляем ответы в эту таблицу.

Статически (без DHCP) это можно сделать примерно так:
ip rule flush # очищаем правила выбора таблиц
ip rule add pref 10 tab main # сначала обычные роуты (локалка)
ip rule add pref 100 fwmark 2 tab 100 # только с меткой 2 
ip rule add pref 32767 tab default # без метки
ip route flush cache
iptables -t mangle -F # удаляем все правила маркировки
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark # вспоминать метки на выходе
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark # и входе
iptables -t mangle -A PREROUTING -i eth1 -j CONNMARK --set-mark 2 # метить новые входящие на eth1
ip link set eth1 up # поднимаем eth1
ip addr flush dev eth1 # очищам его адреса
ip addr add 192.168.1.9/24 brd + dev eth1 # задаём адрес и подсеть
ip route add default via 192.168.1.1 metric 20 tab default # дефолт, только если второй (eth2) не подключён
ip route add default via 192.168.1.1 tab 100 # дефолт для помеченных
ip link set eth2 up
ip addr flush dev eth2
ip addr add 192.168.0.9/24 brd + dev eth2
ip route add default via 192.168.0.1 metric 10 tab default # второй будет "главным", метрика ниже
С dhcpcd это тоже можно сделать.
Правила ip rule и iptables точно такие же.
В /etc/dhcpcd.conf добавить опцию nogateway, или запускать dhcpcd с ключом -G
Для автоматического создания роутов сделать скрипт /etc/dhcpcd.enter-hook , который dhcpcd будет запускать при настройке каждого из интерфейсов:
if [ "$if_up" = "true" -a -n "$new_routers" ] ; then
 case "$ifname" in
 eth1)
  M=20
  ip route add default via $new_routers tab 100
  ;;
 eth2)
  M=10
  ;;
 esac
 [ -n "$M" ] && ip route add default via $new_routers metric $M tab default
fi
sleepycat, не куда придётся, а в дефолтный роут с меньшей метрикой.
я наверно настолько туп что и не сооброзил сам.
ПО сабжу.
Ну вот опять какие то метки, опять же это фильтр, опять же без него никак…
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
Уважаемые,
Если честно, я не могу вообще въехать в суть проблемы.

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

Почему при двух включённых интерфейсах я могу свободно коннектиться по фтп к машине из обоих локальных сетей по фтп и ssh, и это не требует донастройки сети, а из интернета - не могу(только по одной)? Почему в случае с локальной сетью машина догоняет, что если клиент пришёл на конкретный интерфейс, то через этот интерфейс с ним и надо общаться, а если через интернет - она этого не понимает? Проясните, пожалуйста.

Natrio, спасибо за советы, но.. )
Я использую не dchpd а netcfg, и настраиваю сеть в net-profiles. Но, давайте пока оставим этот вопрос, и сделаем для начала по статике. Я так решил потому, что если с получением по dhcp что-то случиться, это будет гемор.
Итак, я изменил настройки сети:
/etc/network.d/net1
CONNECTION='ethernet'
DESCRIPTION='eth1 connection for 192.168.1.0'
INTERFACE='eth1'
IP='static'
ADDR='192.168.1.9'
аналогично для второго интерфейса назначил статический адрес 0.9.
Проверил, работает.

Далее, я ввёл ваши команды, теперь я из интернета вообще не могу приконнектиться к фтп или ssh.
результаты таковы:
ip route
192.168.0.0/24 dev eth2 proto kernel scope link src 192.168.0.9
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.9

ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

возможно, я что-то упустил или неправильно сделал?
Только Россия, только хардкор..
о чем я и говорил, реальность иногда вставляет палки в теорию. Если есть желание точно узнать что и как придется сидеть со сниффером и искать “блуждающий пакет”, сам не знаю, видно боги сжалились надо мною и я еще в таком тонком анализе не нуждался, все работало/eт после прочтения базовой документации.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
Inar
Почему при двух включённых интерфейсах я могу свободно коннектиться по фтп к машине из обоих локальных сетей по фтп и ssh, и это не требует донастройки сети, а из интернета - не могу(только по одной)? Почему в случае с локальной сетью машина догоняет, что если клиент пришёл на конкретный интерфейс, то через этот интерфейс с ним и надо общаться, а если через интернет - она этого не понимает? Проясните, пожалуйста.
Потому что в случае подключения из локальных подсетей ответ сервера направляется по известному маршруту, соответствующему одному из интерфейсов, находящемуся в том сегменте, откуда запрос на соединение и пришел.
В случае коннекта из интернета, ip адрес клиента находится не в локальной сети и явного маршрута к нему сервер не знает. Поэтому он направит ответ по дефолтному маршруту, у которого метрика меньше. Если этот маршрут совпадет с тем, по которому запрос пришел, то проблем нет. А если запрос пришел в один интерфейс, а ушел в другой, то здесь и начинаются проблемы. Причем, это проблемы не технические, т.к. работа TCP/IP это допускает, а возможные проблемы политики провайдеров. Хотя, в Вашем конкретном случае, пока даже не имеет смысла пенять на провайдеров, а стоит посмотреть на свои локальные подсети: судя по тому, что адреса на сервере из частного диапозона (192.168…), сервер находится за NAT-ом (или даже за двумя?). Что и как там настроено? Часто локальные файрволы настраиваются так, что бы дропать не syn-пакеты, для которого отсутствует установленное соединение.
Это кратко. Если непонятно, то читайте теорию и спец.литературу по организации сетей до просветления.
Inar
Далее, я ввёл ваши команды, теперь я из интернета вообще не могу приконнектиться к фтп или ssh.
результаты таковы:
ip route
192.168.0.0/24 dev eth2 proto kernel scope link src 192.168.0.9
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.9

ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

возможно, я что-то упустил или неправильно сделал?
Опять: даже не удосужились заглянуть в man ip. И не захотели подумать, что должно получиться.
Как минимум, в "ip rule“ должна присутствовать таблица ”100", а приоритет таблицы main должен быть 10.
Нет ни того, ни другого. “ip route list tab all” позволяет увидеть маршруты во всех таблицах.
У Вас, похоже, не отработала ни одна команда. Посмотрите внимательно: возможно, после каждой было сообщение об ошибке.
Inar
Для меня кажется странной сама ситуация, что необходима донастройка роутинга на машине, которая не является шлюзом\роутером\фаерволом, и не должна перенаправлять пакеты с одного интерфейса на другой. Она всего лишь находится в двух сетях.

Почему при двух включённых интерфейсах я могу свободно коннектиться по фтп к машине из обоих локальных сетей по фтп и ssh, и это не требует донастройки сети, а из интернета - не могу(только по одной)?
В том-то и дело, что в двух ЛОКАЛЬНЫХ сетях, с ними всё просто – у каждой свой отдельный диапазон, и на него прописан роут.

А интернет это ОДНА сеть! И так как интернет покрывает ВСЕ диапазоны IP-адресов, кроме нескольких специальных, на него невозможно прописать никакого роута, кроме дефолтного. В результате ваша бедная машина, которая имеет “всего лишь” два подключения к интернету, волей-неволей вынуждена исполнять обязанности роутера, то есть выбирать из РАЗНЫХ маршрутов к одной и той же цели. А все тривиальные настройки сети для конечного пользователя НЕ ПРЕДНАЗНАЧЕНЫ для одновременной работы с несколькими подключениями к интернету, поэтому и получается, что работает только одно из них.
(Попробовали бы вы в форточках так подключиться, было бы ещё хуже. Я знаю, я пробовал.)

Я использую не dchpd а netcfg, и настраиваю сеть в net-profiles.
В дистрибутивах линукса есть два DHCP-клиента – dhcpcd и dhclient. Последний используется по-умолчанию в Дебиане и Убунте, а в Арче по-умолчанию именно dhcpcd, а netcfg это всего лишь набор скриптов, которые используют в данном случае именно dhcpcd – не верите, можете после подключения по DHCP поискать его в процессах :)

Так что вам НЕ НУЖНО было менять ваши профили, оставьте их как были. Вам надо прописать правила ip rule и iptables (первые два абзаца кода в начале) в скрипт и выполнить его ДО запуска ваших профилей один раз (на загрузку), а также исправить конфиг dhcpcd и добавить ему скрипт, который я привёл в прошлом посте, после чего перезапустить профили. Всё остальное, что вы делали, никак не поможет делу, и никаких правил не создаст, в чём вы уже убедились сами.

Если же вы хотите настроить сеть статически, то уберите профили из загрузки вообще, перезагрузитесь (вам так будет проще) и выполните последовательно все приведённые в начале команды, без отсебятины и от рута.

P.S.
Я вижу, что вы не знаете элементарных вещей, так что если вы чего-то не понимаете – спрашивайте сразу, не стесняйтесь.
Коллеги,
спасибо за разъяснения, с логикой работы сети всё ясно, с dhcpcd - тоже.
Теперь хочу уточнить пути решения )

Если отключить загрузку профилей, ребутнуться, ввести все команды, настроить /etc/dhcpcd.enter-hook, включить профили, всё будет работать как надо,
после перезагрузки всё опять приходит в нерабочее состояние. Или команды надо в автозагрузку?
Только Россия, только хардкор..
Inar
Коллеги,
спасибо за разъяснения, с логикой работы сети всё ясно, с dhcpcd - тоже.
Теперь хочу уточнить пути решения )

Если отключить загрузку профилей, ребутнуться, ввести все команды, настроить /etc/dhcpcd.enter-hook, включить профили, всё будет работать как надо,
после перезагрузки всё опять приходит в нерабочее состояние. Или команды надо в автозагрузку?
Вообще-то я писал о ДВУХ разных путях решения – первый БЕЗ DHCP, второй с ним – либо тот, либо другой, но не всё вместе!

В первом случае вам надо убрать профили, прописать ВСЕ команды в один скрипт и поставить его в автозагрузку.
Во втором случае надо прописать в него только первые два абзаца, добавить в его в автозагрузку ПЕРЕД профилями, которые тоже оставить, создать /etc/dhcpcd.enter-hook и добавить строчку nogateway в /etc/dhcpcd.conf
Спасибо, с этим понятно.
подскажите, пожалуйста, как сделать скрипт в автозагрузку? гугл и поиск по форуму не помогли = (

Да, и, кстати, уже после решения этой проблемы - можно ли сделать так, чтобы на этом компе торенты качались и раздавались с обоих карт? или для этого необходимо настраивать load balancing только после split access, как здесь?
Только Россия, только хардкор..
Inar
Спасибо, с этим понятно.
подскажите, пожалуйста, как сделать скрипт в автозагрузку? гугл и поиск по форуму не помогли = (
Самое простое – положить скрипт в /etc/rc.d/ , сделать ему chmod 755 и вписать его название в DAEMONS перед профилями.

Да, и, кстати, уже после решения этой проблемы - можно ли сделать так, чтобы на этом компе торенты качались и раздавались с обоих карт? или для этого необходимо настраивать load balancing только после split access, как здесь?
Да, можно. Надо просто настроить перенаправление соответствующих портов на роутерах.

Нет, не нужно, если у ваших роутеров есть выделенные IP в интернете, и они могут принимать входящие соединения. А вообще я не такой большой знаток торрент-протоколов, чтобы предсказать, как они поведут себя при балансировке.
 
Зарегистрироваться или войдите чтобы оставить сообщение.