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 😊😊😊😊😊
()
Ответ на: комментарий от 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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.