Комментарии

Галерея

Опрос

Из каких стран идет больше всего спама, попыток взлома на ваши серверы?:

iproute и два канала в интернет

Аватар пользователя maximum
     

Настроив postfix, вылезла одна не приятная ситуация, во время поднятого тоннеля vpn почтовик не виден с глобала, давайте решим эту херь.
Итак
root@hellserver:/home/maxx# uname -a
Linux hellserver 2.6.28-11-server #42-Ubuntu SMP Fri Apr 17 02:48:10 UTC 2009 i686 GNU/Linux
etho - локальная сеть
eth1 - внешний интернет
ppp0 - впн тоннель, поднимается каждое утро по крону

postfix - слушает все интерфейсы

Задача:
весь трафик пускать через впн, НО сделать так чтобы ответы на запросы с одного интерфейса приходили на этот же интерфейс или как это называется по буржуйски: Linux Advanced Routing в моем случае мне надо вывести постфикс в глобал обойдя завернутый трафик на впн.
Начнем-с:
Для начала надо создать таблицы маршрутизации, идем в /etc/iproute2/rt_tables
имя таблицы может быть любым, но только не идентичным с названием какой либо системной утилиты, в моем случае я обозвал таблицы T1 и T2
у каждой таблицы должен быть свой идентификатор, уникальный
в моем случае 100 и 101
root@hellserver:/etc/iproute2# cat rt_tables | grep T
100 T1
101 T2
идем дальше, теперь надо эти самые таблицы описАть:
(тут хочу немного рассказать для чего это собственно)
вобще если мы наберем в консоле команду route или netstat -r или ip route sh нам покажут таблицу main (главная) другими словами все роутится по этой самой таблице, если конечно же не существует альтернативной таблицы (правил маршрутизации) как в нашем случае.
давайте наберем ip rule sh (утилита ip входит в состав пакета iproute2)
нам покажут:
root@hellserver:/etc/iproute2# ip rule sh
0: from all lookup local
32766: from all lookup main - вот она наша главная таблица
32767: from all lookup default
так вот, чтобы правильно отроутить маршруты надо правильно описАть их:
ip route add xxx.xxx.xxx.0/24 dev eth1 src xxx.xxx.xxx.xxx table T1
ip route add 192.168.0.0/24 dev eth0 table T1 - показываем что у нас есть еще и локальная сеть
xxx.xxx.xxx.0/24 - сеть которой принадлежит ваш GW
xxx.xxx.xxx.xxx - IP выданный провайдером
table T1 - говорим что это правило нужно записать в T1
замечу, так как задача у меня стояла не стандартная, и мне не надо было роутить маршруты для двух провайдеров, поэтому я обошелся только одной таблицей, если же у вас есть потребность во второй таблице, то описывать ее следует по анологии с первой
теперь по команде ip route sh table T1 нам покажут следующее:
192.168.0.0/24 dev eth0 scope link
xxx.xxx.xxx.0/24 dev eth1 scope link src xxx.xxx.xxx.xxx
теперь собственно правила:
ip route add default via GW_первого_прова table T1
ip route add default via 169.254.62.246 table T2 (так как у нас впн, то адресом шлюза мы указывает сервер впн)
ip route add default via GW_первого_прова (определяем дефолт GW)
ip rule add from xxx.xxx.xxx.xxx table T1 (все пакеты с xxx.xxx.xxx.xxx должны уходить/приходить через T1)
ip rule add from 192.168.0.1 table T2 ( это ip адрес выданный нам впн сервером, сдесь все пакеты с 192.168.0.1 должны уходить/приходить через T2, T2 не стал описывать потому что в моем случае просто смысла нет, пакеты которые не будут подходить под T1 будут автоматически проходить через T2)
теперь пишем ip rule sh
видим:
0: from all lookup local
32764: from 192.168.0.1 lookup T2
32765: from xxx.xxx.xxx.xxx lookup T1
32766: from all lookup main
32767: from all lookup default
теперь с такими параметрами, мы можем попасть на почтовый сервер с интернета при включенном впн тоннеле!
подробнее по команде ip: man ip
iproute2: man iproute
так же очень много полезной инфы на opennet.ru
Есть вопросы? или может быть замечания? Отлично!!!! Жду их с нетерпением!!!!!
P.S статья была написана в сонном состоянии, так что все орфографические ошибки соблюдены =)
так же на моем ЖЖ http://hellname.livejournal.com/4880.html