Есть eth0 - локальная сеть, eth1 - интернет канал №1, eth2 - интернет канал №2
Нужно всю входящую и исходящую почту пустить по одному каналу, а броузить интернет по другому.
Система ASP Linux.Вот идея маркировать пакеты идущие на 25 порт и маршрутизировать их:
# echo 200 post >> /etc/iproute2/rt_tables
# ip route add default via 172.17.17.2 dev eth2 table post
# ip route flush cache
# iptables -t mangle -A PREROUTING -p tcp --dport 25 -j MARK --set-mark 25
# ip rule add fwmark 25 table postСделал как написано выше, но никаких изменений не увидел. Отправляется почта через старый канал (это видно из заголовков полученного письма).
Почта должна уходить через eth2.В чем может быть проблема, где и что не отрабатывает? Или как еще можно решить эту задачу
>[оверквотинг удален]
># iptables -t mangle -A PREROUTING -p tcp --dport 25 -j MARK
>--set-mark 25
># ip rule add fwmark 25 table post
>
>Сделал как написано выше, но никаких изменений не увидел. Отправляется почта через
>старый канал (это видно из заголовков полученного письма).
>Почта должна уходить через eth2.
>
>В чем может быть проблема, где и что не отрабатывает? Или как
>еще можно решить эту задачуда вроде всё провильно, только команду
# ip route flush cache
я делаю последней, после добавленгия # ip rule add fwmark 25 table postпосмотри
ip route show table post
на присутствие шлюзану и
tcpdump -nn -i eth2
есть ли движение на почтовый порт
но это всё годится только для локалки, если с шлюзовой машины отправлять почту по тому же интерфейсу, нужны дополнительные напряги
>[оверквотинг удален]
>
>посмотри
>ip route show table post
>на присутствие шлюза
>
>ну и
>tcpdump -nn -i eth2
>есть ли движение на почтовый порт
>но это всё годится только для локалки, если с шлюзовой машины отправлять
>почту по тому же интерфейсу, нужны дополнительные напрягиПо ip route show table post шлюз есть default via 172.17.17.2 dev eth2
По tcpdump -nn -i eth2 ничего нет, все тихо
>По ip route show table post шлюз есть default via 172.17.17.2 dev
>eth2
>По tcpdump -nn -i eth2 ничего нет, все тихосначала посмотри счётчик
iptables -t mangle -L -vxn
10 495 MARK all -- * * 10.100.238.35 0.0.0.0/0 MARK set 0x19есть ли наличие маркированного трафика
проверь разрешён ли форвард на eth2
iptables -L FORWARD -vxnперед тем как делать все проверки выполни
ip route flush cache
очистка кеша сбрасывает все динамические правила и заставляет сработать правило с маркеромвсё должно ходить, если ходит по дефолтному маршруту, то и по этому должно ходить
выводы команд в студию
[root@mail]# ip route flush cache[root@mail]# iptables -t mangle -L -vxn
Chain PREROUTING (policy ACCEPT 51269488 packets, 27314438700 bytes)
pkts bytes target prot opt in out source destination
2327967 1875856648 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 MARK set 0x19
734958 916264669 MARK tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 MARK set 0x19Chain INPUT (policy ACCEPT 64357454 packets, 34815047747 bytes)
pkts bytes target prot opt in out source destinationChain FORWARD (policy ACCEPT 255374 packets, 49925437 bytes)
pkts bytes target prot opt in out source destinationChain OUTPUT (policy ACCEPT 58530622 packets, 27921750227 bytes)
pkts bytes target prot opt in out source destinationChain POSTROUTING (policy ACCEPT 75237435 packets, 36542508582 bytes)
pkts bytes target prot opt in out source destination[root@mail]# iptables -L FORWARD -vxn
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
22925 5026345 tcp_outbound tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0
111828 7862986 udp_outbound udp -- eth1 * 0.0.0.0/0 0.0.0.0/0
4054 113640 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
29421 12567467 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 4 prefix `FORWARD packet died: '
0 0 ACCEPT all -- tun0 * 0.0.0.0/0 0.0.0.0/0
>[root@mail]# ip route flush cache
>
>[root@mail]# iptables -t mangle -L -vxn
>Chain PREROUTING (policy ACCEPT 51269488 packets, 27314438700 bytes)
> pkts bytes target prot opt in out source destination
> 2327967 1875856648 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 MARK set 0x19
> 734958 916264669 MARK tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 MARK set 0x19
>а зачем маркировать приходящий трафик или на этом интерфейсе тоже есть пользователи7
>[оверквотинг удален]
> pkts bytes target
> prot opt in
>out source
> destination
>
>[root@mail]# iptables -L FORWARD -vxn
>Chain FORWARD (policy DROP 0 packets, 0 bytes)
> pkts bytes target prot opt in out source destination
> 22925 5026345 tcp_outbound tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0
> 111828 7862986 udp_outbound udp -- eth1 * 0.0.0.0/0 0.0.0.0/0Ну да, а дальше догадайся сам, что происходит в цепочках tcp_outbound udp_outbound ?
будем считать что там ACCEPT и больше ни чего>
> 4054 113640 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
> 29421 12567467 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 state RLATED, ESTABLISHED
> 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 4 prefix `FORWARD packet died: '
> 0 0 ACCEPT all -- tun0 * 0.0.0.0/0 0.0.0.0/0а где же правило разрешающее возврат пакетов с eth2
пользователи у тебя ходят c eth0 или с tun0 ?
не очень понятна структура сети глядя на твои правила и как ты рулишь пользователей, трудно давать советы
>а где же правило разрешающее возврат пакетов с eth2
>
>пользователи у тебя ходят c eth0 или с tun0 ?
>не очень понятна структура сети глядя на твои правила и как ты
>рулишь пользователей, трудно давать советыСервер достался в наследство от предыдущего админа, а я еще нормально в линуксе не разобрался, поэтому и ответы такие мутные :)
Туннеля больше нет (tun0), а правило видать осталось. Сейчас на eth1 локальная сеть. Почта и инет ходит через eth0. Вот добавил eth2 и хочу туда почту отправить. Такая структура сети.
>Сервер достался в наследство от предыдущего админа, а я еще нормально в
>линуксе не разобрался, поэтому и ответы такие мутные :)
>Туннеля больше нет (tun0), а правило видать осталось. Сейчас на eth1 локальнаяудали лишние правила, разберись что нужно, что не нужно
>сеть. Почта и инет ходит через eth0. Вот добавил eth2 и
>хочу туда почту отправить. Такая структура сети.у меня на ASPLinux 11 примерно такая же конфигурация, пишу сразу под твою
eth1 - локальная сеть, eth0 - интернет канал №1, eth2 IP 172.17.17.2 - интернет канал №2echo 200 post >> /etc/iproute2/rt_tables
эта строка выполняется один раз, ты её уже делал знач больше не нуна
можешь заглянуть в файл и проверить наличие записи/sbin/iptables -I FORWARD -j ACCEPT -i eth1 #разрешает ходить на любой интерфейс
если нужно модифицируй с учётом цепочек tcp_outbound udp_outbound
/sbin/iptables -I FORWARD -j ACCEPT -o eth1 -m state --state RELATED,ESTABLISHED
/sbin/iptables -t mangle -I PREROUTING -i eth1 -p tcp -m multiport --dports 25,110 -j MARK --set-mark 25
эти команды должны выполнятся при старте системы или при рестарте сервиса iptables/sbin/ip route add default via 172.17.17.2 table post
/sbin/ip rule add fwmark 25 table post
/sbin/ip route flush cache
ети команды выполняются при каждом старте системы или при рестарте сервиса networkпри этом в файле
/etc/sysconfig/network
GATEWAY=какой.тамIP.на.eth0
GATEWAYDEV=eth0Получается на роутере шлюз по умолчанию на eth0 , но всё что приходит с eth1 с маркой 25 будет рулится на eth2
маленький ньюанс, у тебя есть цепочки tcp_outbound udp_outbound и трафик с eth1 пребрасываются туда, что там происходит я не знаю считается или нарезается или ещё что
главное что-б там небыл указан исходящий интерфейс
> 22925 5026345 tcp_outbound tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0
> 111828 7862986 udp_outbound udp -- eth1 * 0.0.0.0/0 0.0.0.0/0у меня рулится трафик меткой TOS , специально настроил на метку MARK тоже прекрасно работает
меткой MARK я строю приоритетытут проскакивала подобная тема, у чела работало если в файлах
/proc/sys/net/ipv4/conf/*/accept_source_route
стояла единица
у меня работает и так, и так
я пробовал и с 1 и с 0 кроме /proc/sys/net/ipv4/conf/lo/accept_source_route
там 1 всегда
P.S.ещё раз скажу, это важно
всё описанное работает только для клиентов за интерфейсом eth1
если почту нуна отправлять с роутера для него нуна отдельное правило маркировки, иначе почта пойдёт через eth0
>у меня на ASPLinux 11 примерно такая же конфигурация, пишу сразу под
>твою
>eth1 - локальная сеть, eth0 - интернет канал №1, eth2 IP 172.17.17.2
>- интернет канал №2...........Пробовал сделать так как написано. Всеравно почта уходит в тот же канал.
[root@w conf]# iptables -L FORWARD -vxn
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- eth2 * 0.0.0.0/0 0.0.0.0/0
59 8117 ACCEPT all -- * eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
46 3232 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 tcp_outbound tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 udp_outbound udp -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 4 prefix `FORWARD packet died: '[root@w conf]# iptables -t mangle -L -vxn
Chain PREROUTING (policy ACCEPT 35054 packets, 6175996 bytes)
pkts bytes target prot opt in out source destination
1334 58953 MARK tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 multiport dports 25,110 MARK set 0x19
Chain INPUT (policy ACCEPT 19391010 packets, 10575974159 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 1540575 packets, 563988042 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 41076 packets, 9796077 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 24088277 packets, 12226257240 bytes)
pkts bytes target prot opt in out source destinationВроде пакеты маркируются, но что-то не разруливаются
>[оверквотинг удален]
># iptables -t mangle -A PREROUTING -p tcp --dport 25 -j MARK
>--set-mark 25
># ip rule add fwmark 25 table post
>
>Сделал как написано выше, но никаких изменений не увидел. Отправляется почта через
>старый канал (это видно из заголовков полученного письма).
>Почта должна уходить через eth2.
>
>В чем может быть проблема, где и что не отрабатывает? Или как
>еще можно решить эту задачуА почему нельзя просто сделать:
iptables -t nat -A POSTROUTING -p tcp --dport smtp -j SNAT --to Addres#2
и MX запись в ДНС пофиксить?
>А почему нельзя просто сделать:
>iptables -t nat -A POSTROUTING -p tcp --dport smtp -j SNAT
>--to Addres#2
> и MX запись в ДНС пофиксить?1. необходим ли снат вообще? и зачем нат, если необходимо просто перенаправить определённый вид трафика?
2. построутинг не умеет роутить трафик за интерфейс, т.е. на какой жатвэй необходимо послать траф за интерфесом. это знает только роут.