The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"fwmark для локалхоста через недефолтный рут."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Маршрутизация, NAT / Linux)
Изначальное сообщение [ Отслеживать ]

"fwmark для локалхоста через недефолтный рут."  +/
Сообщение от rusya_rr (ok) on 16-Окт-12, 17:39 
В однатысячапятьсяотдвацотседьмой раз про LARTS, iproutev2, nexthop и fwmark.

Есть два канала в интернет - ppp1 и ppp3. Адреса динамические.
Eth0 - интерфейс для LAN (192.168.0.0/23)

На этой машине работает почтовик.
Задача - пустить почтовик наружу только через ppp1. ppp1 - недефолтный. Все остальное пустить через дефолтный ppp3.

cat /etc/iproute2/rt_tables
#
# reserved values
#
255    local
254    main
253    default
0    unspec
#
# local
#
#1    inr.ruhep
11   beeline30
13   mts

ip route ls
10.64.64.67 dev ppp3  proto kernel  scope link  src 10.17.19.207
10.64.64.65 dev ppp1  proto kernel  scope link  src 10.215.43.32
192.168.0.0/23 dev eth1  proto kernel  scope link  src 192.168.0.88

ip route ls table beeline30
192.168.0.0/23 dev eth1  scope link
127.0.0.0/8 dev lo  scope link
default via 10.64.64.65 dev ppp1

ip route ls table mts
192.168.0.0/23 dev eth1  scope link
127.0.0.0/8 dev lo  scope link
default via 10.64.64.67 dev ppp3

ip rule ls
0:    from all lookup local
32762:    from all fwmark 0xd lookup mts
32763:    from 10.17.19.207 lookup mts
32764:    from all fwmark 0xb lookup beeline30
32765:    from 10.215.43.32 lookup beeline30
32766:    from all lookup main
32767:    from all lookup default


cat /etc/setfirewall
#!/bin/bash
/etc/firewall/clearfirewall
echo "1" > /proc/sys/net/ipv4/ip_forward
IPT=/sbin/iptables

#LO
LO_IF=lo
LO_IP="127.0.0.1"
#LAN
LAN_IF=eth1
LAN_IP="192.168.0.88"
TN1="192.168.0.0/24"
#beeline gsm
outif1=ppp1
#mts gsm
outif3=ppp3

#Default Policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# Permit related connections
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#Permit localhost everywhere
$IPT -A INPUT -s $LO_IP -j ACCEPT
$IPT -A FORWARD -s $LO_IP -j ACCEPT
$IPT -A INPUT -s $LAN_IP -j ACCEPT
$IPT -A FORWARD -s $LAN_IP -j ACCEPT

#На почту smtp tcp 25 ставим метку 11
$IPT -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 11

#NAT OUR LAN
#gsm
$IPT -t nat -A POSTROUTING -m mark --mark 11 --out-interface $outif1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $TN1 --out-interface $outif3 -j MASQUERADE

Почта упрямо ломится через ppp3


telnet smtp.mail.ru 25
Trying 94.100.177.1...
Connected to smtp.mail.ru.
Escape character is '^]'.
220 smtp27.mail.ru ESMTP ready
quit
221 2.0.0 Bye
Connection closed by foreign host.

netstat -nt |grep 25
tcp        0      0 10.17.19.207:60043      94.100.177.1:25         ESTABLISHED

iptables говорит,

iptables -L -vn -t mangle
Chain PREROUTING (policy ACCEPT 564 packets, 51992 bytes)
pkts bytes target     prot opt in     out     source               destination        

Chain INPUT (policy ACCEPT 564 packets, 51992 bytes)
pkts bytes target     prot opt in     out     source               destination        

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination        

Chain OUTPUT (policy ACCEPT 364 packets, 42506 bytes)
pkts bytes target     prot opt in     out     source               destination        
    7   386 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 MARK set 0xb

Chain POSTROUTING (policy ACCEPT 364 packets, 42506 bytes)
pkts bytes target     prot opt in     out     source               destination

что он-таки исправно маркирует пакеты.

ЧЯДНТ?

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от PavelR (ok) on 16-Окт-12, 17:46 
>Почта упрямо ломится через ppp3

Поясните, как вы определяете, куда идет почта?

Рекомендую открыть несколько (2) консолек, и в них запустить

tcpdump -ni ppp1 port 25
tcpdump -ni ppp3 port 25

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от rusya_rr (ok) on 16-Окт-12, 18:06 
>>Почта упрямо ломится через ppp3
> Поясните, как вы определяете, куда идет почта?

Специально привел, чтоб портянки tcpdump не постить
netstat -nt |grep 25
tcp        0      0 10.17.19.207:60043      94.100.177.1:25         ESTABLISHED


> Рекомендую открыть несколько (2) консолек, и в них запустить
> tcpdump -ni ppp1 port 25
> tcpdump -ni ppp3 port 25

Ну конечно же смотрел, по ppp1 - молчание, все идет по ppp3.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от PavelR (ok) on 16-Окт-12, 17:51 
> #NAT OUR LAN
> #gsm
> $IPT -t nat -A POSTROUTING -m mark --mark 11 --out-interface $outif1 -j
> MASQUERADE

Маркер тут проверять вредно. Решение, маршрутизировать или нет в данный интерфейс, уже было принято на более другом уровне. Теперь надо уже выпускать пакет, а следовательно безусловно натить. Маркер - признак выбора маршрута, а вы делаете из него признак "натить или нет", закапывая себе грабли.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от rusya_rr (ok) on 16-Окт-12, 18:08 
>> #NAT OUR LAN
>> #gsm
>> $IPT -t nat -A POSTROUTING -m mark --mark 11 --out-interface $outif1 -j
>> MASQUERADE
> Маркер тут проверять вредно. Решение, маршрутизировать или нет в данный интерфейс, уже
> было принято на более другом уровне. Теперь надо уже выпускать пакет,
> а следовательно безусловно натить. Маркер - признак выбора маршрута, а вы
> делаете из него признак "натить или нет", закапывая себе грабли.

Неа, здесь просто подменяется адрес src ip на нужный для маркированных пакетов.


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от rusya_rr (ok) on 16-Окт-12, 18:26 
Решение, маршрутизировать или нет в данный интерфейс, уже
> было принято на более другом уровне.

Угу, только не маршрутизирует. Метка есть, правило есть, дефолтный гейт в таблице, на кот указывает правило - есть. И - не работает.

Кстати, если убрать маршрут по умолчанию из main
ip route del default

,то

telnet smtp.mail.ru 25
Trying 2a00:1148:1:1322::a1...
Trying 94.100.177.1...
telnet: Unable to connect to remote host: Network is unreachable

если нет шлюза по умолчанию, системе, как я погляжу, плевать и на метки, и на правила, и на то што default gateway есть в таблице beeline30, куда следовало бы по-правилу направить почту по метке.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

7. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от PavelR (ok) on 16-Окт-12, 19:24 
простое решение - при установлении исходящего соединения используйте опцию bind


telnet -b 1.2.3.4 ....

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

5. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от rusya_rr (ok) on 16-Окт-12, 18:12 
Да, и

cat /proc/sys/net/ipv4/conf/all/rp_filter
0

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "fwmark для локалхоста через недефолтный рут."  +/
Сообщение от rusya_rr (ok) on 19-Окт-12, 09:32 
> В однатысячапятьсяотдвацотседьмой раз про LARTS, iproutev2, nexthop и fwmark.
> ЧЯДНТ?

Короче, вдумчиво покурив вот [url=http://forum.ixbt.com/post.cgi?id=print:76:9522]это[/url], вернувшись к [url=http://www.opennet.me/docs/RUS/iptables/#TRAVERSINGOFTABLES&...истокам[/url]истокам, вспоминаем, что решение о маршрутизации пакетов, рожденных локалхостом, принимается ДО всяких там марков и прочего. Через откуда уходить, решается приложением, опцией его байндинга. если таковой нет - через шлюз по умолчанию. Моя же задача решается вот [url=http://www.linux.org.ru/forum/admin/4517322]так[/url].
Большое спасибо всем за участие.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру