Маршрутизация ответа на проброшеные пакеты через интефейс входа, phantom74rus, 21-Янв-08, 23:04 [смотреть все]Добрый день, искал решение своей проблемы по форуму, но или плохо искал или не нашел, поэтому прошу помочь в решении следующей проблемы:Имеется шлюз (Linux) с тремя реальными адресами и внутр. сервер HTTP (Mail и т.д). На шлюзе маршрут по умолчанию выбирается в зависимости от условий т.е. не постоянно смотрит на какой-то один интерфейс. В днс прописаны все три адреса, для отказоустойчивости. Доступ к внутр веб-серверу реалезован с помощью Prerouting. (проброс запросов с помошью проксирования через апач отработан на основе таблиц и правил маршрутизации, но не совсем устраивает. да и нужно еще открыть доступ к почтовому серверу и т.п.) Вот тут возникает проблема - запросы, которые пришли с "недефолтового" интерфейса пробрасываются внутрь, обрабатываются веб-сервером и выплевываются наружу, но уже через дефолтовый маршрут... как итог - клиент не получает ответа с того интерфейса. на который послан запрос и ничего не видит. Как я понял - правила на основе источника запроса не проходят, т.к. €работают только в пределах самого шлюза(запрос покидает сам шлюз и шлюз забывает о том, откуда приходил запрос, хотя запросто могу ошибаться) Подскажите - как можно проброшеные запросы отправлять обратно через тот же интерфей, через который они пришли ?
|
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., PavelR, 06:04 , 22-Янв-08 (1)
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., phantom74rus, 08:49 , 22-Янв-08 (2)
>читай 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 eth2 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 Для остальных таблиц правила подобные...
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., PavelR, 09:23 , 22-Янв-08 (3)
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., phantom74rus, 09:40 , 22-Янв-08 (4)
>Для успешного лечения выведите пожалуйста результат команд: > >ip ro sh table InSYS >ip ro sh table is74 > >iptables -t nat -nvL --line > >iptables -nvL --line ip ro sh table InSYS 83.167.2.0 dev eth2 scope link src 83.167.2.120 default via 83.167.2.1 dev eth2 ip 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 eth1 iptables -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.1 Chain 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/0 Chain OUTPUT (policy ACCEPT 3 packets, 210 bytes) num pkts bytes target prot opt in out source destination iptables -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-unreachable Chain 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-unreachable Chain 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 и т.д.
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., PavelR, 15:59 , 22-Янв-08 (5)
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., phantom74rus, 17:13 , 22-Янв-08 (6)
Может я просто не до конца еще разобрался (совсем недавно взялся за это)?Вот мои размышления: Есть 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_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 # трафик, исходящий с 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
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., PavelR, 19:06 , 22-Янв-08 (7)
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., MVictorL, 20:46 , 22-Янв-08 (8)
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., MVictorL, 20:46 , 22-Янв-08 (9)
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., phantom74rus, 20:48 , 22-Янв-08 (10)
>[оверквотинг удален] >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 не должен быть включен ? (чувствую себя совершенным чайником :( )
- Маршрутизация ответа на проброшеные пакеты через интефейс вх..., PavelR, 06:47 , 25-Апр-08 (13)
|