nixp.ru v3.0

26 мая 2017,
пятница,
02:50:39 MSK

DevOps с компанией «Флант»
Longobard написал 14 июля 2007 года в 15:57 (375 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Обрисую ситуацию:

есть у меня два провайдера

1) матрикс, шлюз 10.1.0.2

2) сильвер, шлюз 85.249.73.1

в матриксе у меня внутренний ип, в сильвере — статический внешний.

Хочу сделать так:

1) весь исходящий интернет-трафик идет через матрикс.

2) При этом из интернета по моему статическому внешнему ипу нужно попасть ко мне на комп.

Как это реализовать? Жопой чую, что через iproute2. Но как конкретно?

Спасибо за советы, подскажите куда копать.

Dr. Evil

Ниичего хитрого тут нет, наверное.

Скажи, компьютер, с которого ты хочешь попадать на свою машину, имеет статический ip?

<font size=«-2»><font color=«red»>Серёга, а при чём тут IP удалённого компа?</font></font>

Longobard

я хочу попадать на свою машину с любой точки интернета.

Genie

документацию читать не пробовал? ;)

IPtables:

-j ROUTE

дефолтный шлюз — на матрикс

для пакетов с внешнего IP — на сильвер

# iptables -t mangle -A OUTPUT -s $EXT_IP -j ROUTE --gw $SILVER

IProute:

# ip rule add from $EXT_IP table 200
# ip route add table 200 via $SILVER
# ip route replace default via $MATRIX
Dr. Evil
Dr. Evil
<font size=«-2»><font color=«red»>Серёга, а при чём тут IP удалённого компа?</font></font>

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

Genie

да ну? так же с маршрутами и пришлось повозиться.

только с более привычными — по адресу назначения, а не по адресу источника.

Dr. Evil

но это было бы совсем просто ;)

Longobard
Genie

# iptables -t mangle -A OUTPUT -s $EXT_IP -j ROUTE --gw $SILVER

iptables ругаецо на параметр --gw. Хотя в документации он есть, таблица mangle есть, в едре все включено. Шозах?

fly4life
Genie
документацию читать не пробовал? ;)

IPtables:

-j ROUTE

дефолтный шлюз — на матрикс

для пакетов с внешнего IP — на сильвер

# iptables -t mangle -A OUTPUT -s $EXT_IP -j ROUTE --gw $SILVER

IProute:

# ip rule add from $EXT_IP table 200
# ip route add table 200 via $SILVER
# ip route replace default via $MATRIX

Не покатит оно так.

Пакет в «-A OUTPUT» попадает уже после таблицы маршрутизации. Да и кто такой «$EXT_IP»?

Проще всего пакет промаркировать в iptables, а роутинг строить в соответствии с полученной маркировкой.

iptables -t mangle -A PREROUTING -i $EXT_IF -j MARK --set-mark 2

($EXT_IF — это имя интерфейса, в который воткнут шнурок от Silver)

Затем, создаём таблицу для iproute2, в которую будут заноситься правила роутинга для Сильвера (например, silver):

echo "200 silver" >> /etc/iproute2/rt_tables

После чего, собственно, сам роутинг (через ’silver' пускаем промаркированные пакеты извне, всё остальное — по каналу Матрикса):

ip rule add fwmark 2 table silver
ip route add table silver via 85.249.73.1
ip route replace default via 10.1.0.2

Да, в конце всех действий необходимо сбросить кэш таблиц маршрутизации:

ip route flush cache
Genie

лично у меня что-то в 2.6.21.5 вообще куда-то ROUTE про…терялся:

$ ls /lib/modules/2.6.21.5-smp.k7/kernel/net/ipv4/netfilter/
arp_tables.ko         ipt_REDIRECT.ko       ipt_owner.ko          nf_nat_amanda.ko
arpt_mangle.ko        ipt_REJECT.ko         ipt_recent.ko         nf_nat_ftp.ko
arptable_filter.ko    ipt_SAME.ko           ipt_tos.ko            nf_nat_h323.ko
ip_queue.ko           ipt_TOS.ko            ipt_ttl.ko            nf_nat_irc.ko
ip_tables.ko          ipt_TTL.ko            iptable_filter.ko     nf_nat_pptp.ko
ipt_CLUSTERIP.ko      ipt_ULOG.ko           iptable_mangle.ko     nf_nat_proto_gre.ko
ipt_ECN.ko            ipt_addrtype.ko       iptable_nat.ko        nf_nat_sip.ko
ipt_LOG.ko            ipt_ah.ko             iptable_raw.ko        nf_nat_snmp_basic.ko
ipt_MASQUERADE.ko     ipt_ecn.ko            nf_conntrack_ipv4.ko  nf_nat_tftp.ko
ipt_NETMAP.ko         ipt_iprange.ko        nf_nat.ko

так что как-то оно…

давай второй метод пробуй… ;)

Genie
Пакет в «-A OUTPUT» попадает уже после таблицы маршрутизации. Да и кто такой «$EXT_IP»?

Проще всего пакет промаркировать в iptables, а роутинг строить в соответствии с полученной маркировкой.

зачем маркировать? делаем source-based routing в чистом виде. даже маркировать не надо.

это было написано 2 разных способа. и, кстати, то, что попало оно в OUTPUT после маршрутизации ничего не значит — мы его ловим на моменте выброса в интерфейс и направляем в другой интерфейс/шлюз.

хотя, не роялит, ибо у меня нет акшена такого, почему-то.

а уж я-то полный iptables собираю в ядрах всегда.

fly4life
Genie
зачем маркировать? делаем source-based routing в чистом виде. даже маркировать не надо.

У меня возникли сомнения насчёт: «ip rule add from $EXT_IP table 200». Хотя… пакет с локальной машины… может быть и прокатит… и без маркировки. Барду пробовать надо.

Genie
это было написано 2 разных способа.

Угу, я понал (не сразу, конечно, но понял) ;). Просто $EXT_IP у тебя фигурирует в обоих.

Genie
и, кстати, то, что попало оно в OUTPUT после маршрутизации ничего не значит — мы его ловим на моменте выброса в интерфейс и направляем в другой интерфейс/шлюз.

Да вот именно, что перехреначивание шлюза уже после того, как решение о маршрутизации принято, выглядит как-то ммм… как минимум, некрасиво =).

fly4life
fly4life
Барду пробовать надо.

Попробовал сам. Зря я тут воду мутил. Тех трёх строчек настройки роутинга, которые привёл Genie, должно хватить для решения задачи Барда.

Genie
Попробовал сам. Зря я тут воду мутил. Тех трёх строчек настройки роутинга, которые привёл Genie, должно хватить для решения задачи Барда.

ну дык зря я, что ли, работаю? ;)

и не такое настраивать приходилось :)

Longobard

всем спасибо :)

Попробую все-таки вариант Флая, потому что мой иптабль упорно не понимает --gw :)

fly4life
Longobard
всем спасибо :)

Попробую все-таки вариант Флая, потому что мой иптабль упорно не понимает --gw :)

Мой вариант он должен работать, но всё-таки больше подходит для роутера. А у тебя локальная машина, и того, что показал Genie с iproute2, должно хватить. Я про это:

# ip rule add from $EXT_IP table 200
# ip route add table 200 via $SILVER
# ip route replace default via $MATRIX
Longobard

у меня она еще и роутер. В ней есть третья сетевуха, которая ведет к вай-вайному аксесспойнту