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

Как «прибить» исходящий трафик к определённому IP при нескольких интерфейсах?

 ,


0

2

Здравствуйте.

Есть сервер с неколькими сетевыми интерфейсами (вланы), «смотрящими» на нескольких аплинков, плюс влан для локалки. С каждым аплинком поднята bgp сессия. Анонсится свой блок (9.9.9.0/22), принимаются fullview без default gateway.

vlan100 - аплинк 1 - мой адрес в блоке аплинка 1.1.1.2/30
vlan200 - аплинк 2 - мой адрес в блоке аплинка 2.2.2.2/30
vlan300 - аплинк 3 - мой адрес в блоке аплинка 3.3.3.2/30
vlan999 - моя сетка - мой адрес 9.9.9.1/22

Исходящий трафик с этого сервера (OUTPUT) уходит в соответствии со сформированной таблицей маршрутизации. В зависимости от того, маршрут какого аплинка признан «лучшим», используется адрес из блока этого аплинка.

Допустим, маршрут для блока 111.111.111.0/24 является лучшим у аплинка 1, а маршрут для блока 222.222.222.0/24 является лучшим у аплинка 2. Тогда пинг на адрес 111.111.111.111 по умолчанию запустится с адреса 1.1.1.2, а пинг на адрес 222.222.222.222 по умолчанию запустится с адреса 2.2.2.2. Всё правильно.

Только есть одна проблема. У одного из аплинков адрес выдан из немаршрутизируемого блока. И мне нужно, чтобы трафик на аплинков уходил не с адреса аплинка, а с моего адреса.

Если я запускаю ping или, например, wget - я могу указать, с какого адреса отправлять пакеты. Но не все утилиты позволяют указать исходящий адрес.

Как мне сделать так, чтобы все исходящие пакеты (кроме bgp трафика) уходили с адреса 9.9.9.1?

Ответ на: комментарий от targitaj

Так это новый маршрут добавит.

А мне нужно, чтобы для всех существующих маршрутов, полученных от аплинков через bgp сессии, был задан source IP.

Сейчас посмотрю, можно ли это как-то в quagga прописать (но сильно сомневаюсь).

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

Нет, в quagga ничего такого нет (или я плохо искал)

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

Видимо, вы имеете в виду ‘ip rule add nat’.

Про NAT я думал (правда, через iptables, а не через iproute2) - но это костыль в любом случае. А хочется сделать без костылей - чтобы пакет уходил сразу от нужного адреса.

Но если так не получится - тогда придётся городить костыль :(

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

Так а какой адрес считается нужным? И речь ведь только о тркффике с самого маршрутизатора?

anonymous
()

ip rule add to 8.8.8.8 table 33

ip route add default via GW_IP table 33

ну или пытаться прикрутить access-list (http://www.nongnu.org/quagga/docs/docs-info.html#Filtering) в bgp, но как по мне это еще больший костыль чем добавить маршрут через таблицу…

Sherman
()
Последнее исправление: Sherman (всего исправлений: 3)

Пожертвуй /30 из своей сети на этот несчастный линк. Тем более что у тебя /22.

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

Так а какой адрес считается нужным? И речь ведь только о тркффике с самого маршрутизатора?

Да, речь только о трафике с самого маршрутизатора (OUTBOUND). Транзитный трафик и так идёт с «правильных» адресов.

Нужным считается адрес 9.9.9.1 - весь исходящий трафик на любого аплинка (ну или хотя бы на первого) должен уходить с этого IP.

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

Пожертвуй /30 из своей сети на этот несчастный линк. Тем более что у тебя /22.

Та мне не жалко /30. Только блоки для bgp сессий выделяет аплинк.

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

Если на роутере есть conntrack, то iptables/nat будет самым простым,прямым и рабочим решением.

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

ip rule add to 8.8.8.8 table 33
ip route add default via GW_IP table 33

Извините, но вы бред пишете.

GW_IP (если речь о 9.9.9.1 из примера) - это «шлюз» в локальную сетку, и трафик вообще никуда не уйдёт.

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

ip rule ?

# ip rule add nat 9.9.9.1 from 1.1.1.2 priority 30001
Warning: route NAT is deprecated

И deprecated уже лет 10…

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

Извините, но вы бред пишете.

вполне возможно

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

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

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

Это вам показалось, что «вопрос толком не задан» - наверное, потому, что «вчитываться лень» :)

Если в двух словах - таблица маршрутизации формируется из маршрутов, принимаемых от нескольких аплинков (default gateway отсутствует). Исходящие запросы от сервера всегда уходят с IP из блока аплинка (что логично). А мне нужно, чтобы исходящие запросы всегда уходили с моего IP.

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

Как мне сделать так, чтобы все исходящие пакеты (кроме bgp трафика) уходили с адреса 9.9.9.1?

Ничего, кроме NAT, я так и не придумал.

Для каждого аплинка в правила файрвола добавляем:

-A POSTROUTING -s 3.3.3.2 -d 3.3.3.0/30 -j ACCEPT
-A POSTROUTING -s 3.3.3.2 -j SNAT --to-source 9.9.9.1

1-я строчка - не NAT’им исходящий трафик на адрес аплинка
2-я строчка - NAT’им весь остальной трафик с нашего адреса из блока аплинка в наш собственный адрес
3.3.3.2 - адрес, выделенный нам аплинком из его блока
3.3.3.0/30 - блок аплинка
9.9.9.1 - адрес сервера в моём блоке

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