Настроив 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
Комментарии
10 лет 28 недель назад
10 лет 29 недель назад
10 лет 29 недель назад
10 лет 29 недель назад
10 лет 31 неделя назад
10 лет 32 недели назад
10 лет 32 недели назад
10 лет 42 недели назад
10 лет 42 недели назад
10 лет 42 недели назад