Войти

Показать полную графическую версию : [решено] Помогите пожалуйста с роутингом


alive_corpse
06-08-2008, 15:29
Прошу прощения, проблема избитая, но сам разобраться так и не смог. :(

Предположим, есть две подсети и машина с двумя интерфейсами в обеих подсетях, для простоты и чтобы не путаться - 192.168.1.0/24 на интерфейсе eth1 (192.168.1.1) и 192.168.2.0/24 на интерфейсе eth2 (192.168.2.1). Эта же машина выдаёт через dhcp default gateway'ями в обе подсети адреса на своих интерфейсах, то есть, 192.168.1.1 и 192.168.2.1 соответственно.

Форвардинг включен:
monitor:~# cat /proc/sys/net/ipv4/ip_forward
1

Из обоих подсетей пингуются оба адреса на обоих интерфейсах машины. То есть, из подсети 192.168.1.0/24 я могу пинговать и 192.168.1.1 и 192.168.2.1 и наоборот.

Вопрос: как сделать роутинг между подсетями через эту машину без маскардинга? Для этого ведь не надо делать ip тунеллей? Или надо? Если да, то как?

route add -net 192.168.1.0/24 gw 192.168.2.1 и route add -net 192.168.2.0/24 gw 192.168.1.1 - не помогает.

Так же пытался делать (по аналогии с http://www.linux.org.ru/view-message.jsp?msgid=21652):

route add -net 192.168.1.0/24 dev eth2
route add -net 192.168.2.0/24 dev eth1

С тем же результатом. :(

В обоих вариантах при попытке пинговать узлы одной сети из другой, получается следующее:
From 192.168.1.1: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.2)
From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
From 192.168.1.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.2)
From 192.168.1.1: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.2)
From 192.168.1.1: icmp_seq=4 Redirect Host(New nexthop: 192.168.1.2)
From 192.168.1.1 icmp_seq=4 Destination Host Unreachable

С самого роутера 192.168.1.2 прекрасно пингуется.

alive_corpse
07-08-2008, 09:40
Большое спасибо моему знакомому Skiv'у, который подсказал, что нужно сделать. Проблема решается двумя правилами в iptables:
iptables -A FORWARD -i eth1 -o eth2 -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT

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

ruslandh
07-08-2008, 16:40
По-моему роутинг надо настраивать на клиентах, а не на шлюзе. При включённом разрешении форвардинга, всё должно и так проходить (если только файерволл не поднят).

alive_corpse
08-08-2008, 13:47
Роутинг, имхо, надо настраивать на роутере (он же шлюз), ибо это машина, которая принимает решение по прохождении пакетов по тому или иному маршруту. Клиенту в идеале должно хватать адреса дефолтного гейтвея, выдаваемого дхцп.




© OSzone.net 2001-2012