[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: маскарадинг на роутинг



Dmitry E. Oboukhov wrote:
есть хост развязывающий домашнюю локалку с провайдерской

ситуация такая: провайдер развивает локалку, периодически добавляя
локальные сети и гейты на них, кроме того есть гейты на инетовские
ресурсы, которые бесплатные.
вход в инет через pptp

итак имеем на хосте:

eth0 смотрит в локалку провайдера и видит некоторые бесплатные ресурсы
инета

eth1 смотрит в мою локалку

ppp0 смотрит в инет

кроме того есть необходимость чтобы из локалки провайдера мою локалку
было не видно, поэтому используется маскарадинг а не роутинг

проблема собственно в том, что на гейте приходится прописывать таблицу
куда какой пакет - два раза:

сперва роутинг (чтобы с гейта все было видно)
что-то вроде:

nets="10.0.0.0/8 192.168.0.0/16 и так далее"
for net in $nets; do
	route add -net $net gw 10.4.0.1
done

а потом нат и маскарадинг (чтобы из локалки все было видно):
вот я что-то никак не пойму зачем настраивать и нат и маскарадинг. Обычно используют что-то одно (вообще NAT Network Adress Translation - это подмена любого дреса на любой), а под MASQUERADE понимают подмену вирт. адреса из внутренней сети на адрес внешнего интерфейса.. т.е. это фактически частный случай nat)
Теперь попытаемся разобраться, читая маны, что же нам нужно.
Итак, man iptables
Сначала разберемся, что же Вы там такое творите с SNAT
###
SNAT
This target is only valid in the nat table, in the POSTROUTING chain. It specifies that the source address of the packet should be modified (and all future packets in this con- nection will also be mangled), and rules should cease being examined. It takes one
       option:
###
т.е. source адрес будет менятся на тот, который мы попросим. Как я понимаю, это нас не очень устраивает ... Лень нам указывать адрес на который менять ip. смотрим дальше
###
  MASQUERADE
[...]  Masquerading is equivalent to specifying a mapping to the
IP address of the interface the packet is going out, but also has the effect that connec-
       tions are forgotten when the interface goes down.
[...]
###
Вообщем... (вдруг кто не поймет). Тут так и написано, что source адрес будет заменяться на ip адрес исходящего интерфейса.
Тут. Надо прыгать и стучаться головой об потолок, потому что мы нашли что нам нужно.

Осталось разобраться, почему указанный ниже пример не работает (а ведь там используется MASQUERADE!). Дело в том, что пакет уходит в первую цель (target), в которую он подходит по параметрам и в остальные уели не попадает. Другими словами, все пакеты у Вас уходят в SNAT и про MASQUERADE не подозревают.
Я думаю, что уже понятно что надо сделать, но, на всякий случай, скажу конкретно:

***

for net in $nets; do
        $IPT -d $net  -s $LOCAL_NET/$LOCAL_NETMASK -p ALL\
 		 -t nat -A POSTROUTING \
                 -o $NET_IFACE -j SNAT --to-source $NET_IP
done
***
то что между *** удалить!
$IPT -s $LOCAL_NET/$LOCAL_NETMASK -t nat -A \
	 POSTROUTING -o $INET_IFACE  -j MASQUERADE

А вот это _заменить_ на $IPT -s $LOCAL_NET/$LOCAL_NETMASK -t nat -A \
	POSTROUTING -j MASQUERADE
Исходящий интерфейс будет опредяляться route`ом.
вопрос: можно ли настроить нат и маскарадинг, чтобы пакеты отправлял в
направлении таблицы роутинга?
чтобы не было двух одинаковых таблиц?
да :-)



Спасибо, что вам не лень было прочитать все это :-)

--
WBR, .Nick
--
USU-Lug (Ural State University Linux Users Group)
http://usu-lug.org.ru/	mailto:info@usu-lug.org.ru



Reply to: