В однатысячапятьсяотдвацотседьмой раз про 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 mtsip 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.88ip 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 ppp1ip 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 ppp3ip 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 ESTABLISHEDiptables говорит,
iptables -L -vn -t mangle
Chain PREROUTING (policy ACCEPT 564 packets, 51992 bytes)
pkts bytes target prot opt in out source destinationChain INPUT (policy ACCEPT 564 packets, 51992 bytes)
pkts bytes target prot opt in out source destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destinationChain 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 0xbChain POSTROUTING (policy ACCEPT 364 packets, 42506 bytes)
pkts bytes target prot opt in out source destinationчто он-таки исправно маркирует пакеты.
ЧЯДНТ?
Пусть вас не смущает почтовик. Пусть это будет любое приложение, которое стучится на определенный порт. Видимость снаружи этого приложения не нужна. Нужно трафик с локалхоста определенного вида выпустить через определенный интерфейс.
>Почта упрямо ломится через ppp3Поясните, как вы определяете, куда идет почта?
Рекомендую открыть несколько (2) консолек, и в них запустить
tcpdump -ni ppp1 port 25
tcpdump -ni ppp3 port 25
>>Почта упрямо ломится через 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.
> #NAT OUR LAN
> #gsm
> $IPT -t nat -A POSTROUTING -m mark --mark 11 --out-interface $outif1 -j
> MASQUERADEМаркер тут проверять вредно. Решение, маршрутизировать или нет в данный интерфейс, уже было принято на более другом уровне. Теперь надо уже выпускать пакет, а следовательно безусловно натить. Маркер - признак выбора маршрута, а вы делаете из него признак "натить или нет", закапывая себе грабли.
>> #NAT OUR LAN
>> #gsm
>> $IPT -t nat -A POSTROUTING -m mark --mark 11 --out-interface $outif1 -j
>> MASQUERADE
> Маркер тут проверять вредно. Решение, маршрутизировать или нет в данный интерфейс, уже
> было принято на более другом уровне. Теперь надо уже выпускать пакет,
> а следовательно безусловно натить. Маркер - признак выбора маршрута, а вы
> делаете из него признак "натить или нет", закапывая себе грабли.Неа, здесь просто подменяется адрес src ip на нужный для маркированных пакетов.
Решение, маршрутизировать или нет в данный интерфейс, уже
> было принято на более другом уровне.Угу, только не маршрутизирует. Метка есть, правило есть, дефолтный гейт в таблице, на кот указывает правило - есть. И - не работает.
Кстати, если убрать маршрут по умолчанию из 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, куда следовало бы по-правилу направить почту по метке.
простое решение - при установлении исходящего соединения используйте опцию bind
telnet -b 1.2.3.4 ....
Да, иcat /proc/sys/net/ipv4/conf/all/rp_filter
0
> В однатысячапятьсяотдвацотседьмой раз про 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].
Большое спасибо всем за участие.