Добрый день, искал решение своей проблемы по форуму, но или плохо искал или не нашел, поэтому прошу помочь в решении следующей проблемы:Имеется шлюз (Linux) с тремя реальными адресами и внутр. сервер HTTP (Mail и т.д).
На шлюзе маршрут по умолчанию выбирается в зависимости от условий т.е. не постоянно смотрит на какой-то один интерфейс. В днс прописаны все три адреса, для отказоустойчивости. Доступ к внутр веб-серверу реалезован с помощью Prerouting. (проброс запросов с помошью проксирования через апач отработан на основе таблиц и правил маршрутизации, но не совсем устраивает. да и нужно еще открыть доступ к почтовому серверу и т.п.)
Вот тут возникает проблема - запросы, которые пришли с "недефолтового" интерфейса пробрасываются внутрь, обрабатываются веб-сервером и выплевываются наружу, но уже через дефолтовый маршрут... как итог - клиент не получает ответа с того интерфейса. на который послан запрос и ничего не видит.
Как я понял - правила на основе источника запроса не проходят, т.к. €работают только в пределах самого шлюза(запрос покидает сам шлюз и шлюз забывает о том, откуда приходил запрос, хотя запросто могу ошибаться)
Подскажите - как можно проброшеные запросы отправлять обратно через тот же интерфей, через который они пришли ?
читай LARTC - linux advanced routing how-tohttp://gazette.linux.ru.net/rus/articles/lartc/x348.html
запросы, которые приходят на твои внешние адреса _должны_ уходить с того же адреса и через тот же самый интерфейс, не зависимо от того, есть у тебя проброс в локалку или нет.
>читай LARTC - linux advanced routing how-to
>
>http://gazette.linux.ru.net/rus/articles/lartc/x348.html
>
>
>запросы, которые приходят на твои внешние адреса _должны_ уходить с того же
>адреса и через тот же самый интерфейс, не зависимо от того,
>есть у тебя проброс в локалку или нет.Эту статью читал...
Как я понял - на голой системе ничего само ходить не будет, нужны правила для маршрутизации. Правила есть и они работают, но только для самого шлюза.
А вот т.н. форвард пакеты отправлять обратно через интерфейс - это у меня не получается.192.168.1.0 dev eth3 scope link src 192.168.1.4
192.168.0.0 dev eth0 scope link src 192.168.0.5
83.167.2.0 dev eth2 scope link src 83.167.2.120
83.142.164.160/29 dev eth1 proto kernel scope link src 83.142.164.162
83.167.2.0/24 dev eth2 proto kernel scope link src 83.167.2.120
192.168.1.0/24 dev eth3 proto kernel scope link src 192.168.1.4
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.5
default via 83.167.2.1 dev eth232763: from 192.168.1.4 lookup ertelecom
32764: from 83.167.2.120 lookup InSYS
32765: from 83.142.164.162 lookup is74
32766: from all lookup main
32767: from all lookup default83.142.164.160/29 dev eth1 scope link src 83.142.164.162
default via 83.142.164.161 dev eth1
Для остальных таблиц правила подобные...
>32763: from 192.168.1.4 lookup ertelecom
>32764: from 83.167.2.120 lookup InSYS
>32765: from 83.142.164.162 lookup is74
>32766: from all lookup main
>32767: from all lookup defaultНесколько не понятен следующий набор букв и цифр:
>83.142.164.160/29 dev eth1 scope link src 83.142.164.162
>default via 83.142.164.161 dev eth1Для успешного лечения выведите пожалуйста результат команд:
ip ro sh table InSYS
ip ro sh table is74iptables -t nat -nvL --line
iptables -nvL --line
>Для успешного лечения выведите пожалуйста результат команд:
>
>ip ro sh table InSYS
>ip ro sh table is74
>
>iptables -t nat -nvL --line
>
>iptables -nvL --lineip ro sh table InSYS
83.167.2.0 dev eth2 scope link src 83.167.2.120
default via 83.167.2.1 dev eth2ip ro sh table is74
83.142.164.160/29 dev eth1 scope link src 83.142.164.162
default via 83.142.164.161 dev eth1iptables -t nat -nvL --line
Chain PREROUTING (policy ACCEPT 24 packets, 2612 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DNAT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:192.168.0.2
2 0 0 DNAT tcp -- eth2 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:192.168.0.2
3 0 0 DNAT tcp -- eth3 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:192.168.0.2
4 0 0 DNAT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 to:192.168.0.2
5 0 0 DNAT tcp -- eth2 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 to:192.168.0.2
6 0 0 DNAT tcp -- eth3 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 to:192.168.0.2
7 0 0 DNAT tcp -- * * 91.144.135.65 0.0.0.0/0 tcp dpt:1723 to:192.168.0.1
8 0 0 DNAT 47 -- * * 91.144.135.65 0.0.0.0/0 to:192.168.0.1
9 0 0 DNAT tcp -- eth1 * 91.144.135.65 0.0.0.0/0 tcp dpt:3389 to:192.168.0.1
10 0 0 DNAT tcp -- eth2 * 91.144.135.65 0.0.0.0/0 tcp dpt:3389 to:192.168.0.1
11 0 0 DNAT tcp -- eth3 * 91.144.135.65 0.0.0.0/0 tcp dpt:3389 to:192.168.0.1Chain POSTROUTING (policy ACCEPT 1 packets, 60 bytes)
num pkts bytes target prot opt in out source destination
1 2 150 MASQUERADE 0 -- * * 192.168.0.0/24 0.0.0.0/0Chain OUTPUT (policy ACCEPT 3 packets, 210 bytes)
num pkts bytes target prot opt in out source destinationiptables -nvL --line
Chain INPUT (policy ACCEPT 168 packets, 17140 bytes)
num pkts bytes target prot opt in out source destination
1 16 2082 ULOG 0 -- eth2 * 0.0.0.0/0 83.167.2.120 ULOG copy_range 0 nlgroup 2 queue_threshold 1
2 0 0 ULOG 0 -- eth1 * 0.0.0.0/0 83.142.164.162 ULOG copy_range 0 nlgroup 1 queue_threshold 1
3 0 0 ULOG 0 -- eth3 * 0.0.0.0/0 91.144.135.77 ULOG copy_range 0 nlgroup 3 queue_threshold 1
4 0 0 REJECT 0 -- * * 91.76.119.128 0.0.0.0/0 reject-with icmp-port-unreachable
5 0 0 REJECT 0 -- * * 200.88.104.71 0.0.0.0/0 reject-with icmp-port-unreachable
6 0 0 REJECT 0 -- * * 85.141.218.1 0.0.0.0/0 reject-with icmp-port-unreachable
7 0 0 REJECT 0 -- * * 81.181.81.114 0.0.0.0/0 reject-with icmp-port-unreachable
8 0 0 REJECT 0 -- * * 216.144.192.118 0.0.0.0/0 reject-with icmp-port-unreachable
9 0 0 REJECT 0 -- * * 216.144.192.118 0.0.0.0/0 reject-with icmp-port-unreachable
10 0 0 REJECT 0 -- * * 67.19.82.114 0.0.0.0/0 reject-with icmp-port-unreachable
11 0 0 REJECT 0 -- * * 66.207.47.66 0.0.0.0/0 reject-with icmp-port-unreachable
12 0 0 REJECT 0 -- * * 219.243.24.6 0.0.0.0/0 reject-with icmp-port-unreachable
13 0 0 REJECT 0 -- * * 202.130.106.89 0.0.0.0/0 reject-with icmp-port-unreachable
14 0 0 REJECT 0 -- * * 61.47.210.106 0.0.0.0/0 reject-with icmp-port-unreachable
15 0 0 REJECT 0 -- * * 208.73.226.254 0.0.0.0/0 reject-with icmp-port-unreachable
16 0 0 REJECT 0 -- * * 190.24.131.35 0.0.0.0/0 reject-with icmp-port-unreachable
17 0 0 REJECT 0 -- * * 80.93.212.74 0.0.0.0/0 reject-with icmp-port-unreachable
18 0 0 REJECT 0 -- * * 65.79.193.35 0.0.0.0/0 reject-with icmp-port-unreachable
19 0 0 REJECT 0 -- * * 210.51.173.105 0.0.0.0/0 reject-with icmp-port-unreachable
20 836 458K ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
21 0 0 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
22 0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
23 0 0 ACCEPT 0 -- * * 127.0.0.1 0.0.0.0/0
24 0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0
25 0 0 ACCEPT 0 -- * * 91.144.135.65 0.0.0.0/0
26 2 120 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
27 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10000
28 2 96 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
29 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
30 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
31 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:20 state RELATED,ESTABLISHED
32 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 state RELATED,ESTABLISHED
33 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:21 state NEW,ESTABLISHED
34 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 state RELATED,ESTABLISHED
35 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 state RELATED,ESTABLISHED
36 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:1024:65535 state RELATED,ESTABLISHED
37 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
38 45 2172 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
39 0 0 ACCEPT tcp -- * * 192.168.0.8 0.0.0.0/0 tcp dpt:5901
40 0 0 ACCEPT tcp -- * * 192.168.0.242 0.0.0.0/0 tcp dpt:5901
41 0 0 ACCEPT tcp -- * * 192.168.0.243 0.0.0.0/0 tcp dpt:5901
42 11 528 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 16 1611 ULOG 0 -- eth2 eth0 !83.167.2.120 0.0.0.0/0 ULOG copy_range 0 nlgroup 2 queue_threshold 1
2 16 768 ULOG 0 -- eth0 eth2 0.0.0.0/0 !83.167.2.120 ULOG copy_range 0 nlgroup 2 queue_threshold 1
3 6 363 ULOG 0 -- eth3 eth0 !192.168.1.4 0.0.0.0/0 ULOG copy_range 0 nlgroup 3 queue_threshold 1
4 5 412 ULOG 0 -- eth0 eth3 0.0.0.0/0 !192.168.1.4 ULOG copy_range 0 nlgroup 3 queue_threshold 1
5 0 0 ULOG 0 -- eth1 eth0 !83.142.164.162 0.0.0.0/0 ULOG copy_range 0 nlgroup 1 queue_threshold 1
6 0 0 ULOG 0 -- eth0 eth1 0.0.0.0/0 !83.142.164.162 ULOG copy_range 0 nlgroup 1 queue_threshold 1
7 41 3002 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
8 0 0 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0
10 0 0 ACCEPT 0 -- * gre 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
11 0 0 REJECT tcp -- * * 192.168.0.2 0.0.0.0/0 tcp dpt:135 reject-with icmp-port-unreachable
12 0 0 REJECT udp -- * * 192.168.0.2 0.0.0.0/0 udp dpt:135 reject-with icmp-port-unreachable
13 0 0 REJECT tcp -- * * 192.168.0.2 0.0.0.0/0 tcp dpts:6666:6669 reject-with icmp-port-unreachable
14 0 0 ACCEPT 0 -- * * 192.168.0.9 0.0.0.0/0
15 0 0 ACCEPT 0 -- * * 192.168.0.3 0.0.0.0/0
16 0 0 ACCEPT 0 -- * * 192.168.0.2 0.0.0.0/0
17 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.2 tcp dpt:110
18 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.2 tcp dpt:25
19 0 0 ACCEPT 0 -- * * 192.168.0.1 0.0.0.0/0
20 0 0 ACCEPT 0 -- * * 0.0.0.0/0 192.168.0.6
21 0 0 ACCEPT 0 -- * * 192.168.0.6 0.0.0.0/0
22 0 0 ACCEPT 0 -- * * 192.168.0.242 0.0.0.0/0
23 0 0 ACCEPT 0 -- * * 192.168.0.243 0.0.0.0/0
24 0 0 ACCEPT tcp -- * * 192.168.0.8 0.0.0.0/0 tcp dpt:5190
25 0 0 ACCEPT tcp -- * * 192.168.0.242 0.0.0.0/0 tcp dpt:5190
26 0 0 ACCEPT tcp -- * * 192.168.0.243 0.0.0.0/0 tcp dpt:5190
27 0 0 ACCEPT tcp -- * * 192.168.0.92 0.0.0.0/0 tcp dpt:5190
28 0 0 ACCEPT tcp -- * * 192.168.0.99 0.0.0.0/0 tcp dpt:5190
29 0 0 ACCEPT tcp -- * * 192.168.0.101 0.0.0.0/0 tcp dpt:5190
30 0 0 ACCEPT tcp -- * * 192.168.0.179 0.0.0.0/0 tcp dpt:5190
31 0 0 ACCEPT tcp -- * * 192.168.0.37 0.0.0.0/0 tcp dpt:5190
32 0 0 ACCEPT tcp -- * * 192.168.0.110 0.0.0.0/0 tcp dpt:5190
33 0 0 ACCEPT tcp -- * * 192.168.0.52 0.0.0.0/0 tcp dpt:5190
34 0 0 ACCEPT tcp -- * * 192.168.0.172 0.0.0.0/0 tcp dpt:5190
35 0 0 ACCEPT tcp -- * * 192.168.0.29 0.0.0.0/0 tcp dpt:5190
36 0 0 ACCEPT tcp -- * * 192.168.0.61 0.0.0.0/0 tcp dpt:5190
37 0 0 ACCEPT tcp -- * * 192.168.0.173 0.0.0.0/0 tcp dpt:5190
38 0 0 ACCEPT tcp -- * * 192.168.0.66 0.0.0.0/0 tcp dpt:5190
39 0 0 ACCEPT tcp -- * * 192.168.0.141 0.0.0.0/0 tcp dpt:5190
40 0 0 ACCEPT tcp -- * * 192.168.0.8 0.0.0.0/0 tcp dpt:25
41 0 0 ACCEPT tcp -- * * 192.168.0.99 0.0.0.0/0 tcp dpt:25
42 0 0 ACCEPT tcp -- * * 192.168.0.37 0.0.0.0/0 tcp dpt:25
43 0 0 ACCEPT tcp -- * * 192.168.0.8 0.0.0.0/0 tcp dpt:110
44 0 0 ACCEPT tcp -- * * 192.168.0.99 0.0.0.0/0 tcp dpt:110
45 0 0 ACCEPT tcp -- * * 192.168.0.37 0.0.0.0/0 tcp dpt:110
46 0 0 ACCEPT icmp -- * * 192.168.0.8 0.0.0.0/0
47 0 0 ACCEPT tcp -- * * 192.168.0.37 0.0.0.0/0 tcp dpt:5280
48 0 0 ACCEPT tcp -- * * 192.168.0.37 0.0.0.0/0 tcp dpt:4444
49 0 0 ACCEPT tcp -- * * 192.168.0.37 0.0.0.0/0 tcp dpt:443
50 0 0 ACCEPT tcp -- * * 192.168.0.79 0.0.0.0/0 tcp dpt:4444
51 0 0 ACCEPT tcp -- * * 192.168.0.79 0.0.0.0/0 tcp dpt:443
52 0 0 ACCEPT tcp -- * * 192.168.0.42 0.0.0.0/0 tcp dpt:4444
53 0 0 ACCEPT tcp -- * * 192.168.0.42 0.0.0.0/0 tcp dpt:443
54 0 0 ACCEPT tcp -- * * 192.168.0.40 0.0.0.0/0 tcp dpt:4444
55 0 0 ACCEPT tcp -- * * 192.168.0.40 0.0.0.0/0 tcp dpt:443
56 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.1 tcp dpt:1723
57 0 0 ACCEPT 47 -- * * 0.0.0.0/0 192.168.0.1
58 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.1 tcp dpt:80
59 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.2 tcp dpt:80
60 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.6 tcp dpt:80
61 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.2 tcp dpt:25
62 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.2 tcp dpt:21
63 0 0 ACCEPT tcp -- * * 192.168.0.8 0.0.0.0/0 tcp dpts:20:21
64 0 0 ACCEPT tcp -- * * 192.168.0.24 0.0.0.0/0 tcp dpts:20:21
65 2 152 REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachableChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 19 2166 ULOG 0 -- * eth2 83.167.2.120 0.0.0.0/0 ULOG copy_range 0 nlgroup 2 queue_threshold 1
2 0 0 ULOG 0 -- * eth1 83.142.164.162 0.0.0.0/0 ULOG copy_range 0 nlgroup 1 queue_threshold 1
3 0 0 ULOG 0 -- * eth3 192.168.1.4 0.0.0.0/0 ULOG copy_range 0 nlgroup 3 queue_threshold 1
4 925 505K ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0
5 0 0 ACCEPT 0 -- * * 127.0.0.1 0.0.0.0/0Прероутинг для веб-сервера сейчас отключен, но приводился в действие с помошью
-A PREROUTING -d 83.142.164.162 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.6
и т.д.
Честно говоря не особо понимаю в чем проблема. Описание маршрутизации через нескольких провайдеров, как это сделано у меня. Forward использовался некоторое время, сейчас не используется, так что не всё понятно.После того, как прогоняется стартовый скрипт (у меня)
ip ru sh должен быть в результате таким:
0: from all lookup local <- локальные интерфейсы
1000: from all lookup main <- основная таблица маршрутизации. Используется как таблица маршрутизации в directly-connected сетки. Шлюз по умолчанию из неё удаляетсяip ro del default
и потом добавляется в таблицу defaultip ro add devault via DEF_GW dev DEV_DEF_GW [src DEF_SRC если надо] table default
<!--
Обратите внимание на следующие правила. Они нужны, чтобы из локальных подсеток можно было обращаться на другие адреса нашего рутера.
Локальные подсетки - те сетки, у которых шлюз по умолчанию - этот роутер.
Иначе пакет будет идти вместо локальной сети на удаленный шлюз провайдера.
-->
2000: from net1_ip to net3 lookup main
2010: from net2_ip to net3 lookup main
<!-- дальше можно вставить кого куда рулить (NAT) из локалки принудительно -->
_на_ определенный айпи
3000: from all to some_ip lookup net1
3100: from all to some_ip2 lookup net2
3200: from all to some_ip3 lookup net3
_с_ определенного айпи, локального
4000: from some_ip4 lookup net1
4500: from some_ip5 lookup net2<!--теперь опишем наши интерфейсы и их адреса-->
5000: from net1_ip lookup net1
5050: from net2_ip lookup net2
5060: from net3_ip lookup net3
10000: from all lookup default <-- только вот тут пойдет по дефолт маршруту
Может я просто не до конца еще разобрался (совсем недавно взялся за это)?Вот мои размышления:
Есть 3 интерфейса торчащие в инет eth1, eth2, eth3 и локальный eth0. (на шлюзе)
Есть три таблици для сетей на этих интерфейсах и три правила from для сопоставления с этими таблицами, в зависимости откуда пришел запрос. (выше они приведены)дефолтовый маршрут смотрит на один из интерфейсов, допустим на eth1. Клиент цепляется к eth3, запрашивая ресурс, шлюз (по прероутингу) его пробрасывает через eth0 на внутр сервер, сервер отсылает ответ, который возвращается шлюзу, но шлюз не находит в правилах "from" этого источника (т.к. тут уже не from, а to (клиент из интернет и не относится ни к одной из трех внешних сетей))и направляет ответ на eth1... итог - клиент ничего не видит.
А правила у меня создаются следующие, но работают-то они только для самого шлюза (т.е. пакет пришел, обработался шлюзом, который отправил ответ обратно клиенту):
ip route add to $P1_NET dev $P1_IF src $P1_IP
ip route add $P1_NET dev $P1_IF src $P1_IP table $P1_TBL
ip route add default via $P1_GW table $P1_TBLip route add to $P2_NET dev $P2_IF src $P2_IP
ip route add $P2_NET dev $P2_IF src $P2_IP table $P2_TBL
ip route add default via $P2_GW table $P2_TBLip route add to $P3_NET dev $P3_IF src $P3_IP
ip route add $P3_NET dev $P3_IF src $P3_IP table $P3_TBL
ip route add default via $P3_GW table $P3_TBL# трафик, исходящий с ip интерфейса будет уходить соответствующему провайдеру
ip rule add from $P1_IP table $P1_TBL
ip rule add from $P2_IP table $P2_TBL
ip rule add from $P3_IP table $P3_TBL
# маршрут по-умолчанию
ip route add default via $P1_GW
Я когда настраивал - у меня всё получилось и проблем не возникло. Сейчас не использую, но времени на тестирование нет.>дефолтовый маршрут смотрит на один из интерфейсов, допустим на eth1. Клиент цепляется
>к eth3, запрашивая ресурс, шлюз (по прероутингу) его пробрасывает через eth0
>на внутр сервер, сервер отсылает ответ, который возвращается шлюзу, но шлюз
>не находит в правилах "from" этого источника (т.к. тут уже не
>from, а to (клиент из интернет и не относится ни к
>одной из трех внешних сетей))и направляет ответ на eth1... итог -
>клиент ничего не видит.сервер отсылает ответ, в фазе PREROUTING он проходит обратную трансляцию, и в пакете адрес отправителя становится не сервер, а тот айпишник, на который пришел запрос.
Дальше он должен пойти в маршрутизации по правилу "from".>[оверквотинг удален]
>ip route add to $P1_NET dev $P1_IF src $P1_IP
>ip route add $P1_NET dev $P1_IF src $P1_IP table $P1_TBL
>ip route add default via $P1_GW table $P1_TBL
>
>ip route add to $P2_NET dev $P2_IF src $P2_IP
>ip route add $P2_NET dev $P2_IF src $P2_IP table $P2_TBL
>ip route add default via $P2_GW table $P2_TBL
>ip route add to $P3_NET dev $P3_IF src $P3_IP
>ip route add $P3_NET dev $P3_IF src $P3_IP table $P3_TBL
>ip route add default via $P3_GW table $P3_TBLВот на этот момент я говорю:
если сделать некоторую рекомбинацию, то получимтри правила на directly-connected сетки. Эти правила не нужны, т.к. эти маршруты создаются при поднятии интерфейса. В таблице main, нужно только её использовать, с учетом удаления default.
ip route add to $P1_NET dev $P1_IF src $P1_IP
ip route add to $P2_NET dev $P2_IF src $P2_IP
ip route add to $P3_NET dev $P3_IF src $P3_IP
Эти три правила мне кажутся дублирующими два предыдущих.ip route add $P1_NET dev $P1_IF src $P1_IP table $P1_TBL
ip route add $P2_NET dev $P2_IF src $P2_IP table $P2_TBL
ip route add $P3_NET dev $P3_IF src $P3_IP table $P3_TBLВ нужности этих трех никто не сомневается.
ip route add default via $P1_GW table $P1_TBL
ip route add default via $P2_GW table $P2_TBL
ip route add default via $P3_GW table $P3_TBL
==============
Если входящие соединения устанавливать на адреса/порты открытые на router - все работает как надо и входит и уходит по правильным интерфейсам ?
Может тупо, но вдруг -- ip_forward включен?
;-)
>[оверквотинг удален]
>ip route add to $P2_NET dev $P2_IF src $P2_IP
>ip route add to $P3_NET dev $P3_IF src $P3_IP
>
>
>Эти три правила мне кажутся дублирующими два предыдущих.
>
>ip route add $P1_NET dev $P1_IF src $P1_IP table $P1_TBL
>ip route add $P2_NET dev $P2_IF src $P2_IP table $P2_TBL
>ip route add $P3_NET dev $P3_IF src $P3_IP table $P3_TBL
>Я представлял себе то, что это занесение данных в соответствующие таблицы, для последующего использования на основе нижеследующих правил.
>[оверквотинг удален]
>ip route add default via $P1_GW table $P1_TBL
>ip route add default via $P2_GW table $P2_TBL
>ip route add default via $P3_GW table $P3_TBL
>
>
>==============
>
>
>Если входящие соединения устанавливать на адреса/порты открытые на router - все работает
>как надо и входит и уходит по правильным интерфейсам ?Да, если работать не со внутр. серверами, а со шлюзом - все работает отлично, но опять же только с этими правилами. Без этих правил все сыпалось по дефолтовому маршруту. Видимо я просто не до конца еще осознаю механизм маршрутизации :(
P.S. Может возможно как-нибудь пообщаться? для перенятия опыта :) (например ICQ)
P.P.S А разве ip_forward не должен быть включен ? (чувствую себя совершенным чайником :( )
>P.S. Может возможно как-нибудь пообщаться? для перенятия опыта :) (например ICQ)
>P.P.S А разве ip_forward не должен быть включен ? (чувствую себя совершенным
>чайником :( )Отпиши аську на мыло test
в домене
termexlab_ru
>
>>P.S. Может возможно как-нибудь пообщаться? для перенятия опыта :) (например ICQ)
>>P.P.S А разве ip_forward не должен быть включен ? (чувствую себя совершенным
>>чайником :( )
>
>Отпиши аську на мыло test
>в домене
>termexlab_ruПообщаться не проблема, но, например, я себя не считаю большим спецом, т.ч. смысла большого не будет.
А по ip_forwarding см. файл /proc/sys/net/ipv4/ip_forward -- по умолчанию в Linux там '0', т.е. ip_forward запрещен. Включается перманентно он путем редактирования файла /etc/sysctl.conf:net.ipv4.ip_forward = 1
Вдруг поможет...
На форуме часто задается вопрос, по поводу маршрутизации сети, подключенной к двум провайдерам.
В частном случае проблема расширяется тем, что нужно осуществлять проброс соединений к сервисам, расположенным в локальной сети.
Это делается с помощью DNAT, и при этом снова возникает проблема - по каналу какого провайдера отправлять ответ.
Проблема усугубляется тем, что обратное преобразование адресов выполняется уже после принятия решения о маршрутизации,
т.е. примерно в районе цепочки POSTROUTING, но скрытно от пользователя (в отличие от явного заворота на диверт в ipfw@freebsd).Решить эту нерешаемую проблему поможет модуль CONNMARK. Принцип работы маршрутизатора для решения описанной задачи будет выглядеть примерно так:
Входящие соединения маркируются определенным флажком, после чего делается их проброс в нужное назначение.
Каждый обратный пакет соединения _до принятия решения о маршрутизации_ маркируется флажком соответствующего ему соединения (флажок восстанавливается).
На основании флажков принимается решение о маршрутизации пакета в соответствующую сеть.
В нижеописанном примере обеспечение доступности сервиса по двум каналам/провайдерам делалось для локального сервиса маршрутизатора.
В связи с этим маркировка исходящих пакетов делается в цепочке OUTPUT таблицы mangle. Для проброса порта к серверу в локальной сети
(в DMZ) проверку и восстановление маркера надо делать в цепочке PREROUTING.
Таким образом, "обратный DNAT" будет происходить когда пакет уже будет идти по нужному маршруту.Все не маркированные пакеты будут идти по маршруту по умолчанию. В моем случае это первый провайдер first и айпи интерфейса first_ip.
Входящие пакеты/соединения с порта второго провайдера (destination <second_ip>) будут помечены маркером и к ним будет применен DNAT.
Все исходящие (обратные) пакеты будут промаркированы значением маркера соединения в цепочке OUTPUT таблицы mangle.Более корректным вариантом, не зависящим от значения шлюза по умолчанию, является обязательная маркировка пакетов для соединений
от любого провадера и создание соответствующих правил маршрутизации.
[root@test z]# iptables -t nat -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 144M packets, 9659M bytes)
pkts bytes target prot opt in out source destination
1 52 CONNMARK tcp -- * * 0.0.0.0/0 <second_ip> tcp dpt:<port> CONNMARK set 0x1
1 52 DNAT tcp -- * * 0.0.0.0/0 <second_ip> tcp dpt:<port> to:<first_ip>:<port>
[root@test z]# iptables -t mangle -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 6745M packets, 7048G bytes)
pkts bytes target prot opt in out source destination
65915 8600K CONNMARK tcp -- * * <first_ip> 0.0.0.0/0 tcp spt:<port> CONNMARK restore
[root@test z]# ip ru sh
0: from all lookup local
1000: from all lookup main
3300: from all fwmark 0x1 lookup <second>
5000: from <first_ip> lookup <first>
5500: from <second_ip> lookup <second>
10000: from all lookup default
32766: from all lookup main
32767: from all lookup default