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

Как бы попроще запустить задачу с отдельной таблицей маршрутизации?

 


0

1

Доброго времени суток

Сабж. Дома есть 2 канала в интернет, оба иногда ( раз в несколько месяцев ) отваливаются, плюс на одном динамический ip. Хотелось бы всегда иметь возможность подключиться снаружи. DDNS уже надоели своими ограничениями и навязчивыми предложениями перехода на платный тариф. perl + expect собирает с обоих модемов информацию о текущем состоянии каналов и внешних ip адресах. Мне нужно отправить её на свой jabber, причём дублировать через оба канала

Держать две виртуалки с разными таблицами маршрутизации слишком жирно. создать отдельный network namespace можно, но пока мне не нравится эта идея ( keep it simple ), оставлю как запасной вариант

Есть идеи, как запустить 2 процесса с разными таблицами маршрутизации с минимумом костылей?

★★★★★

Может запускать эти процессы от разных пользователей, затем маркировать пакеты в зависимости от пользователя iptables -m owner -j mark, дальше маршрутизировать их через iproute2?

menzoberronzan
()

Чот тут чуток получилось смешение задачи и попытки решения.
Посылка в джаббер же не самоцель?
Каналы резервируются или active-active?

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

Начиная с ядра 4.10 маркировать в iptables не обязательно. ip rule теперь умеет обращатся к нужной таблице по uid'у.

Один из самых простых поэтому способов, да, использовать двух разных пользователей.

anarquista ★★★★★
()

создать отдельный network namespace можно, но пока мне не нравится эта идея

Зашёл чтобы именно это и предложить. Потрать пять минут, оно того стоит.

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

А как это проще всего сделать с namespace'ами? Достаточно ли просто добавить один из интерфейсов в отдельный namespace?

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

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

imul ★★★★★
()

запустить 2 процесса с разными таблицами маршрутизации с минимумом костылей

netns, конечно же.

anonymous
()

Вариант сделать policy based routing и VPN-ом коннектиться куда-нибудь наружу не рассматривается?

А там уже через VPN заходить, да.

Или таки DDNS на свой домен(например через freedns.afraid.org). Не уверен правда можно ли там создать на одно имя 2 IP, чтоб был кагбе DNS round robin на случай отвала каналов. policy based routing всё равно нужен будет правда.

Подойдет ли тебе netns - не уверен. Если не нужно оставлять возможность маршрутизации через одного из провайдеров в головном пространстве имен - может и подойдет. Иначе там надо будет какой-нибудь NAT городить.

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

Или таки DDNS на свой домен(например через freedns.afraid.org).

Вроде 5 звезд, а про dns.he.net не знает...

Pinkbyte, pekmop1024, спасибо! пригодится

Но исходную задачу я всё-таки добью, не только для уведомлений в jabber нужно

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

Да, похоже это и есть вариант «попроще»

Похоже, можно привязать к netns через cgroups

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

afraid, насколько я помню, домены шарит с другими юзерами. HE - не шарит. это обычный днс с поддеркой диманического днс. Я так и не понял, с каких перепугов они до сих пор не закрыли этот аттаркцион невиданной щедрости, но ограничений особых там нет ни на что, емнип.

pekmop1024 ★★★★★
()

Есть идеи, как запустить 2 процесса с разными таблицами маршрутизации с минимумом костылей?

Docker ?

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

Да, с двумя адресами. Точнее два ve. Вот например рабочий вариант:

ip link add name ve0a type veth peer name ve0b
ip addr add 10.10.10.1/24 dev ve0a
ip link set up dev ve0a

iptables -F -t nat
iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward

install -d /etc/netns/test
echo nameserver 8.8.4.4 > /etc/netns/test/resolv.conf

ip netns add test
ip link set dev ve0b netns test
ip netns exec test ip addr add 10.10.10.2/24 dev ve0b
ip netns exec test ip link set up dev ve0b
ip netns exec test ip route add default via 10.10.10.1

ip netns exec test ping -n -c 50 8.8.8.8
ip netns exec test ping -n -c 50 ya.ru
ip netns exec test dig ya.ru

ip netns delete test

Своей таблицы роутинга в примере нет, но есть свой resolv.conf
wlo1 — коннект в сеть.

imul ★★★★★
()
Последнее исправление: imul (всего исправлений: 1)
19 августа 2017 г.
Ответ на: комментарий от imul

Зашёл чтобы именно это и предложить. Потрать пять минут, оно того стоит

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

namespace с точки зрения ОСи - это удалённый комп. Т.е. написать таблицу маршрутизации в namespace не достаточно. В обоих namespace'ах дефолтный маршрут будет вести через виртуальный линк на хост систему, если можно так выразиться

И маршрутизацией нужно будет рулить на уровне хост системы, а не неймспейса.

Создвать отдельные таблицы маршрутизации на хост-системе придётся в любом случае. Но я предпочту добавить на хост-систему по лишнему ip на каждого провайдера, и привязывать ( bind ) скрипт к дополнительному ip. И через «ip rule from IP1/32 table isp1» кидать его трафик в нужную таблицу маршрутизации

При этом мне не нужно будет включать форвардинг ( ! ), ограничивать форвардинг через iptables и морочиться с NAT/MASQUERADING

Вариант с namespace очень хорош с точки зрения универсальности - можно запускать так любой софт без модификации. Но т.к. скрипт я буду писать сам, мне проще биндить его к определённому адресу и не превращать хост-систему в гипервизор и маршрутизатор :)

З.Ы. да, ачивку «слоупок» я заслужил :)

router ★★★★★
() автор топика
Последнее исправление: router (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.