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

Назначение нескольких адресов от 2-х провайдеров, на один интерфейс.

 


1

1

Доброго времени суток!
Помогите понять в какую сторону копать, чтобы решить следующую проблему.
Есть адреса от 2-х провайдеров х.х.х.х/27 и у.у.у.у/30. Назначаю на интерфейс:

auto eth1
iface eth1 inet static
    address x.x.x.x2
    netmask 255.255.255.224
    network x.x.x.x0
    gateway x.x.x.x1

auto eth1:2
iface eth1:2 inet static
    address x.x.x.3
    netmask 255.255.255.224
    network x.x.x.0

#пропускаю остальные назначения 

auto eth1:29
iface eth1:29 inet static
    address y.y.y.y2
    netmask 255.255.255.252
    network y.y.y.y0
#   gateway y.y.y.y1

И получаю следующую картину. Все адреса х.х.х.х/27 пингуются и отвечают по пробросам, а адрес у.у.у.у/30 не пингуется и не отвечает на портах пробросов(исходящий трафик с него идет). Но если адрес у.у.у.у2 назначить первым на интерфейсе «auto eth1» , то он начинает пинговаться и отвечать по портам, и в тоже время адрес x.x.x.x2 назначен на место y.y.y.y2 т.е. «eth1:29» спокойно пингуется. OS Debian 8.1.



Последнее исправление: CYB3R (всего исправлений: 3)
Ответ на: комментарий от upcFrost

Спасибо за ссылки, но мне кажется, что эти статьи для Debian не подойдут, у меня нету /etc/sysconfig/network-scripts/, «/etc/network/interfaces for Ubuntu and Debian systems».

UserV
() автор топика

Предполагаю следующее.
Берем твой вариант. Для простоты описания предположим что:
Первый провайдер: ip x.x.x.x2 - 1.1.1.2
Второй провайдер: x.x.x.3 - 2.2.2.3
Def gateway это первый провайдер - 1.1.1.1
Так вот когда ты пытаешься пингануть/соединиться с 2.2.2.3 пакет приходит через второго провайдера, а вот уходит уже по маршруту по умолчанию т.е. через первого провайдера gateway - 1.1.1.1 но от ip 2.2.2.3. Пров1 просто не пропускает этот пакет и все. Во втором варианте когда ты их поменял местами предполагаю, что и дэфолтный шлюз тоже поменял на второго прова. Так вот Пров2 нормально пропускает пакеты от 1.1.1.2.
Проверить можно с помощью того-же traceroute -s IP

anc ★★★★★
()

Например у тебя дефолт гв настроен как x.x.x.x1, тогда если кто-нибудь снаружи пытается достучаться до y.y.y.y2, то пакеты до y.y.y.y2 доходят, но ответы от него, согласно таблице маршрутизации, идут на x.x.x.x1, а x.x.x.x1 ничего не знает про y.y.y.y2 и отказывается форвардить пакеты от него (rp_filter например)

Если настроить source based routing, то все будет ок.

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

Если настроить source based routing, то все будет ок.

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

redixin ★★★★
()

небольшой совет:
метка(label) может принимать не только числовое значение, поэтому лучше и удобнее назвать eth1:provider1 и eth1:provider2

zolden ★★★★★
()

Всем большое спасибо, проблема решена. Я и не знал про маршрутизацию на основе правил и про то, что может быть не одна таблица маршрутизации. :)
Решение такое:

Объявляем таблицу доп. таблицу

nano /etc/iproute2/rt_tables
86      isp_2 (на сколько я понял номер и название произвольные)
далее говорим использовать другую таблицу для y.y.y.2/32
ip ru add from y.y.y.2/32 table isp_2
дефолтный маршрут для второй доп таблицы
ip ro add table isp_2 via y.y.y.1
cбросить кеш, так как закеширован не правильный маршрут.
ip ro flush cache

Очень хорошая статься на эту тему: http://www.opennet.ru/base/net/iproute2.txt.html

UserV
() автор топика

Внешний адрес y.y.y.2 начал пинговаться, но пробросы не работают.

Вопрос, если надо прописать во второй таблице маршрут к локальным сетям. Пишу следующее:

ip route add table isp_2 192.168.10.0/24 via 192.168.2.2
Но пробросы все равно не работают. В принципе у меня уже есть такой маршрут
route add -net 192.168.10.0/24 gw 192.168.2.2
Но я так понимаю для y.y.y.2/32 теперь используется таблица isp_2

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

Я правильно понял речь идет о подключении к локальным адресам,
типа PREROUTING... --to-destination localip ?
Если да iptables CONNMARK + iproute2 помогут
например
ip rule add fwmark 2 table isp_2
iptables -t mangle -A PREROUTING -i eth1 -d y.y.y.2 -m state --state NEW -j CONNMARK --set-mark 2
И в правилах SNAT добавить -m connmark --mark 2

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

Спасибо за ваш совет, Вы все верно поняли.
Вот такое правило транслирования в данный момент не работает на y.y.y.y2(аналогичные правила работают на x.x.x.x адресах).

iptables -t nat -I PREROUTING -p tcp --dport 22308 -d y.y.y.y2 -j DNAT --to 192.168.10.10:22
Получается необходимо:
1. добавить маршрут к подсети 192.168.10.0/24 в таблицу isp_2
ip route add table isp_2 192.168.10.0/24 via 192.168.2.2
2. добавляем маркировку для таблицы isp_2
ip rule add fwmark 2 table isp_2
3. достаточно ли будет добавить "-m connmark --mark 2" к правилу проброса?
iptables -t nat -I PREROUTING -p tcp --dport 22308 -d y.y.y.y2 -j DNAT --to 192.168.10.10:22 -m connmark --mark 2

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

По пунктам:
1. Локальный роутинг не надо трогать если раньше работало, как было так и оставляйте.
2. Да. Только формулировка неверная. Это не маркировка, а правило. Марк выставляется iptables.
3. Нет не верно. Нужно отдельное правило и в таблице mangle, пакеты маркируются в mangle. Я выше написал правило полностью, будет работать для любых адресов, т.е. в дальнейшем только добавляете как обычно правила вида
iptables -t nat -I PREROUTING -p tcp --dport 22308 -d y.y.y.y2 -j DNAT --to 192.168.10.10:22 и т.д.

А вот в snat для y.y.y.y2 (если он не дэфолтный роут) надо как раз добавить -m connmark --mark 2

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

Извините, я может туплю, но у меня нету snat правил для y.y.y.y2

UserV
() автор топика

Вопрос по сабжу решен. Остальные вопросы скорее тема отдельного топика, всем большое спасибо за помощь.

UserV
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.