Ничего необычного в моих конфах нет.
cat ipt
#!/bin/bash
iptables -t mangle --flush
iptables -t nat --flush
MARK="222"
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 443 -j MARK --set-mark $MARK
iptables -t nat -A POSTROUTING -m mark --mark $MARK -j SNAT --to-source $1
exit 0
cat rt
#!/bin/sh
IP_INET1="172.22.22.22"
IP_INET2="$1"
IF_INET1="eth0"
IF_INET2="ppp0"
NET_INET1="172.22.22.0/24"
NET_INET2="10.64.64.64/32"
GW1="172.22.22.2"
GW2="10.64.64.64"
ip route flush table T1
ip route flush table T2
ip rule delete table T1
ip rule delete table T2
ip rule delete table T1
ip rule delete table T2
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add default via $GW1 dev $IF_INET1 table T1
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T2
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table T2
ip route add 127.0.0.0/8 dev lo table T2
ip route add default via $GW2 dev $IF_INET2 table T2
ip rule add from $IP_INET1 table T1
ip rule add from $IP_INET2 table T2
ip rule add fwmark 111 table T1
ip rule add fwmark 222 table T2
ip route flush cache
exit 0
Скрипты специальные, тестовые. Поскольку на боевом сервере маршрутизация по этой схеме не заработала по причине невозможности получения обратного пакета, я решил проверить на клиенте, подключив второй канал (gprs). После подключения канала запускаются по очереди эти 2 скрипта с полученным от gprs ip в параметре и делается telnet на 443 порт сервера. Задача -- получить обратный пакет, вообще установить соединене через альтеративный шлюз.
Выводы скриптов я приводил, у меня только один главный вопрос, почему не устанавливается соединение?
ip route list table main
10.64.64.64 dev ppp0 proto kernel scope link src 172.19.106.144
172.22.22.0/24 dev eth0 proto kernel scope link src 172.22.22.22
default via 172.22.22.2 dev eth0
ip route list table T1
10.64.64.64 dev ppp0 scope link src 172.19.106.144
172.22.22.0/24 dev eth0 scope link src 172.22.22.22
127.0.0.0/8 dev lo scope link
default via 172.22.22.2 dev eth0
ip route list table T2
10.64.64.64 dev ppp0 scope link src 172.19.106.144
172.22.22.0/24 dev eth0 scope link src 172.22.22.22
127.0.0.0/8 dev lo scope link
default via 10.64.64.64 dev ppp0
ip rule list
0: from all lookup local
32762: from all fwmark 0xde lookup T2
32763: from all fwmark 0x6f lookup T1
32764: from 172.19.106.144 lookup T2
32765: from 172.22.22.22 lookup T1
32766: from all lookup main
32767: from all lookup default
таблица mangle
Chain OUTPUT (policy ACCEPT 29379 packets, 1773K bytes)
pkts bytes target prot opt in out source destination
9 540 MARK tcp -- any any anywhere anywhere tcp dpt:https MARK xset 0xde/0xffffffff
таблица nat
Chain POSTROUTING (policy ACCEPT 106 packets, 6440 bytes)
pkts bytes target prot opt in out source destination
5 300 SNAT all -- any any anywhere anywhere mark match 0xde to:172.19.106.144
все остальное в акцепт.
8 20.997404 172.19.106.144 94.25.208.252 TCP 39729 > https [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=984384 TSER=0 WS=6
9 21.809393 94.25.208.252 172.19.106.144 TCP https > 39729 [SYN, ACK] Seq=4164072487 Ack=1 Win=8190 Len=0 MSS=1380
и на этом финиш, все начинается с начала
Почему я не получаю обратный пакет, а?
PS.
Так выглядят пакеты, если поменять в схеме ТОЛЬКО дефолт роут в таблице main на 10.64.64.64
14 1722.582111 172.19.106.144 94.25.208.252 TCP 57112 > https [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=1409780 TSER=0 WS=6
15 1723.141393 94.25.208.252 172.19.106.144 TCP https > 57112 [SYN, ACK] Seq=0 Ack=1 Win=8190 Len=0 MSS=1380
16 1723.141426 172.19.106.144 94.25.208.252 TCP 57112 > https [ACK] Seq=1 Ack=1 Win=5840 Len=0
17 1762.553447 172.19.106.144 94.25.208.252 SSL Continuation Data
18 1765.553405 172.19.106.144 94.25.208.252 SSL [TCP Retransmission] Continuation Data
19 1766.121389 94.25.208.252 172.19.106.144 TCP https > 57112 [RST] Seq=1 Win=9838 Len=0