LINUX.ORG.RU

роутинг и его неправильное понимание оффтопиком


0

0

Есть локальная сеть, где роутинг организован следующим образом:

10.0.0.5 - роутер (default gw && dhcp) для всех компьютеров в локальной сети /24
А для 10.0.0.5 роутером является уже 10.0.0.1, находящийся в той же (/24) подсети. На 10.0.0.5 адреса не модифицируются NAT-ом

Т.е. получается такая цепочка

INTERNET ===== 10.0.0.1(NAT) ----- 10.0.0.5(def gw for all) ----- LAN 10.0.0.0/24

На виндовс машинах default gw прописан как 10.0.0.5, а адрес 10.0.0.1 вообще нигде не фигурирует.

Но стоит любой windows машине отправить или получить что-то из Интернет, у нее в таблице роутинга появляется новая запись до того хоста в интернет, куда она обращалась. И запись глосит:
host_in_internet/32 gw 10.0.0.1
Т.е. любая машина из LAN теперь отправляет свои пакеты через 10.0.0.1, хотя в конфиге у нее и прописан default gw 10.0.0.5

Получается, что туда пакеты идут через 10.0.0.1, возвращаются через 10.0.0.5 и конечно ничего не работает.

Как избавится от такой интеллектуальонсти оффтопика (проверялось на winxp)?
anonymous

почитай как работает NAT , в руководстве есть подробное описание твоей проблеммы , ну а как выход тебе придётся делать нат на 10,0,0,5

anonymous
()
Ответ на: комментарий от anonymous

О каком именно руководстве идет речь?

Как работает NAT, я знаю. На 10.0.0.5 (default gw for all) нельзя делать NAT (POSTROUTING -j SNAT --to-source 10.0.0.5 как раз спасает, но не подходит).
Нельзя его делать потому, что 10.0.0.1 является vpn сервером с несколькими туннелями к удаленным сетям, поэтому ip адреса локальной сетки 10.0.0.0/24 нельза NAT-ить на 10.0.0.5.  

Конечно, можно заNAT-ить их на 10.0.0.5 во что нить типа 10.10.0.0/24 (один к одному), а на 10.0.0.1 разNAT-тить обратно, но на мой взгляд это решение через задницу.

Пожалуйста, укажи руководство, которое надо почитать. Там точно есть решение ситуации с появлением новых маршрутов в таблице роутинга?

anonymous
()

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

sasha999 ★★★★
()
Ответ на: комментарий от victorb

Точно не лечится? Очень жаль :(

Хотелось вылечить со стороны серверной части, ибо прописывать все у клиентов это большой геморрой и потери времени.

Придется делать Нат, просто этож дополнительные и бесполезные траты ресурсов - пару тысяч адресов заNAT-ить сначала с 10.0.0.0-255 -> 10.10.0.0-10.10.0.255 (на 10.0.0.5 машине), а потом на 10.0.0.1 в обратную сторону разNAT-тивать придется.

anonymous
()

А не запущены ли на серверах демоны routed/gated? Аналогичная вешь есть на Вин2000-образных системах, что-то вроде службы динамической маршрутизации.

А 10.0.0.5 вероятно отправляет ICMP-сообщение о перенаправлении. Это сообщение можно и отфильтровать.

Клиент может узнать о смене маршрута от двух вещей: ICMP-сообщение от 10.0.0.5; или оттого, что ответные пакеты приходят от 10.0.0.1. Стало быть на второй случай, можно попытаться сделать хитрую маршрутизацию на 10.0.0.1

Или уже на крайняк разнести сервера в разные адресные пространства.

ansky ★★★★★
()
Ответ на: комментарий от ansky

Нет, такие демоны не запущены, как и любые другие, 
реализующие динамическую маршрутизацию.

Насчет icmp сообщения это мысль, порою в этом направлении.

Реально пользователям сети ответные пакеты приходят от 10.0.0.5 
(на 10.0.0.1 прописан маршрут для таких пакетов через 10.0.0.5).

А пока решил проблему именно при помощи "виртуальной подсети".

10.0.0.0/24 ---> (10.0.0.1) ===>[10.10.0.0/24===10.0.0.0/24] ===> (10.0.0.5) ---->

т.е. у пакетов исходящих с 10.0.0.5  меняется src адреса один-к-одному в подсеть 10.10.0.0/24, 
а на 10.0.0.1 восстанавливается правильная адресация

Проще всего это делается через NETMAP
iptables -t nat -A POSTROUTING/PREROUTING -s 1.2.3.4/24 -j --to 5.6.7.8/24


Но конечно такой способ кушает память на NAT таблицах, что не очень здорово.

anonymous
()
Ответ на: комментарий от anonymous

iptables -t nat -A POSTROUTING/PREROUTING -s 1.2.3.4/24 -j NETMAP --to 5.6.7.8/24

вот так правильно:)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.