Войти

Показать полную графическую версию : NAT и маскарадинг


Delalex
29-07-2003, 19:22
Имеются две сетки, одна домашняя (172.20.0.0, eth0), другая внешняя с выходом в инет (192.168.2.0, eth1). Требуется подставить IP адаптера внешней сети в пакеты домашней. При попытке занести в таблицу nat следующую строку:
iptables -t nat -A POSTROUTING -s 172.20.0.(хост) -o eth1 - j SNAT --to-source 192.168.2.(хост)
или
iptables -t nat -A POSTROUTING -s 172.20.0.(хост) -o eth1 -j MASQUERADE
выдает ошибку 'iptables: Invalid argument'. В чем дело, подскажите?
Ради интереса: iptables -t nat -A POSTROUTING -s 172.20.0.(хост) ошибки не выдает. ASPLinux 9, ядро 2.4.21, сконфигурировано с поддержкой NAT...

Demige
29-07-2003, 23:01
Неправильно пишешь
надо так.
iptables -t nat -A POSTROUTING -s (eth0 network) -o eth1 - j SNAT --to-source (eth1 address)

т.е. в пакетах из сети eth0 подставлять адрес ip (интернетовский) машины-гейта
т.е. это надо настраивать именно на той машине, которая имеет ip в инете, а я так понял та настраиваешь на машине рутере между сетями

JeweL
30-07-2003, 10:36
Demige
ну почему же? пусть себе будет межсетевой nat (если именно это требуется). Просто маршруты настроить надо правильно.
Команда имхо будет правильно выглядеть так:
iptables -t nat -A POSTROUTING -s 172.20.0.10/32 -o eth1 - j SNAT --to-source 192.168.2.1
где 172.20.0.10/32 - адрес того, кого хотим выпустить вовне, 192.168.2.1 - адрес eth1

Delalex
30-07-2003, 17:30
Спасибо, ребята! Только вот проблема осталась...
Попробую рассказать поподробней, что мне нужно. Имеются вот такие сетки:
Home_host (172.20.0.2)<->((172.20.0.1,eth0)Main_home_host(eth1,192.168.2.145))<->((192.168.2.254)Gate(Inet IP)) - Provider
Main_home_host - мой комп, подключенный к муниципальной сети, соответственно, все исходящие пакеты должны содержать адрес источника 192.168.2.145, иначе о доступе в инет и к ресурсам локалки не будет и речи (платная сетка-то).
Gate - системный шлюз в инет, все адреса источников маскарадятся на выделенный инетовский IP.
Home_host - еще один мой комп, с которого я хочу иметь доступ к ресурсам сети и инета.
Вот такая вот картинка получается... как вы посоветовали - я уже делал, перепробовал все, но в итоге все та же ошибка 'Invalid argument'. Методом "тыка" определил, что ошибку вызывает все действия после '-j',  будь то SNAT --to-source IP или простой MASQUERADE. Вот и не пойму, в чем дело... ядро сконфигурировано с поддержкой ipv4, модули загружаю прямо из скрипта без всяких ошибок.

JeweL
31-07-2003, 09:48
возможно проблема в том, что необходимые iptables модули автоматом не подгружаются. Посмотри lsmod. Если какие-то из нижеприведенных модулей отсутствуют (второй блок по мере надобности) - действуй modprobe
ip_tables
ip_conntrack
iptable_filter
iptable_mangle
iptable_nat
ipt_state
ipt_REJECT
ipt_MASQUERADE

ipt_LOG
ipt_limit
ip_conntrack_ftp
ip_conntrack_irc
ip_nat_ftp
ip_nat_ircip_nat_irc
ipt_owner

Delalex
31-07-2003, 19:24
Я эти модули загружаю прямо из скрипта, в случае неудачи появлялась бы ошибка modprobe, а ее нет. Что интересно, сегодня сконфигурировал и поставил ядро 2.4.20 и все заработало на том же скрипте :) Попробовал переконфигурировать ядро 2.4.21 (мало ли что... все мы люди) - вылезает та же ошибка при использовании аргумента SNAT или MASQUERADE в таблице NAT - 'Invalid argument'. А с ядром 2.4.20 у меня другие проблемы: фиговато работает чипсет nForce2, в частности, IDE - контроллер, да и с тв-тюнером Pinnacle PCTV Pro не все ладно, впрочем, с ним и в 2.4.21 проблемы... но это отдельный вопрос.
Спасибо всем за помощь! Если есть какие-нибудь соображения по этому поводу, буду очень рад их выслушать, тема пока открыта!

glassMonk
02-08-2003, 11:35
Огромное спасибо JeweL. Так как мне почти не приходилосб работать с NAT.

Delalex
03-08-2003, 11:01
Моя проблема решилась очень просто: поставил IPTABLES 1.2.8 (вместо 1.2.7а), после чего на ядре 2.4.21 скрипт заработал (сам удивляюсь). Если кому-нибудь пригодится мой опыт объединения двух сетей с взаимным (или доверенным) доступом к их ресурсам и инету, всегда буду рад помочь: delalex@inbox.ru

Gorza
05-08-2003, 13:05
маскарад - это частный случай SNAT. Используется когда машине присваивается внешний Динамический Ip.И только.
В твоем случае как я понимаю имеется две статичесеи сетки так что маскарад здесь не нужен  а нужен SNAT.
Вот таое дополнение

Добавлено:

маскарад - это частный случай SNAT. Используется когда машине присваивается внешний Динамический Ip.И только.
В твоем случае как я понимаю имеется две статичесеи сетки так что маскарад здесь не нужен  а нужен SNAT.
Вот таое дополнение

Delalex
06-08-2003, 05:43
Вполне с этим согласен - я и использовал SNAT. *Маскарад здесь был упомянут лишь потому, что не работала именно функция подмены IP-адреса источника в исходящих пакетах, для чего, собственно, SNAT и маскарад и предназначены.
Можно применять маскарад и для статического IP-адреса, просто это является нецелесообразным, т.к. увеличивает нагрузку на систему... в чем между ними разница:
SNAT поставлена конкретная задача - менять адрес источника на явно указанный IP, a MASQUERADE после каждого пакета "забывает", что надо "подсовывать" в качестве исходящего IP и запрашивает адрес внешнего сетевого интерфейса по новой - отсюда и повышенная затребованность ресурсов.

Gorza
06-08-2003, 09:43
..как приятно слушать разговор двух умных людей, особенно если один из них - ты сам.... ;-)

Barracuda
06-08-2003, 14:29
Delalex
Gorza
А вы это что тут делаете?

Delalex
06-08-2003, 21:13
..как приятно слушать разговор двух умных людей, особенно если один из них - ты сам.... ;-)
Точно-точно... :)

Delalex
Gorza
А вы это что тут делаете?
Азбуку изучаем ( с картинками). Присоединяйся, если есть желание.




© OSzone.net 2001-2012