Показать полную графическую версию : NAT и маскарадинг
Имеются две сетки, одна домашняя (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...
Неправильно пишешь
надо так.
iptables -t nat -A POSTROUTING -s (eth0 network) -o eth1 - j SNAT --to-source (eth1 address)
т.е. в пакетах из сети eth0 подставлять адрес ip (интернетовский) машины-гейта
т.е. это надо настраивать именно на той машине, которая имеет ip в инете, а я так понял та настраиваешь на машине рутере между сетями
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
Спасибо, ребята! Только вот проблема осталась...
Попробую рассказать поподробней, что мне нужно. Имеются вот такие сетки:
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, модули загружаю прямо из скрипта без всяких ошибок.
возможно проблема в том, что необходимые 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
Я эти модули загружаю прямо из скрипта, в случае неудачи появлялась бы ошибка 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.
Моя проблема решилась очень просто: поставил IPTABLES 1.2.8 (вместо 1.2.7а), после чего на ядре 2.4.21 скрипт заработал (сам удивляюсь). Если кому-нибудь пригодится мой опыт объединения двух сетей с взаимным (или доверенным) доступом к их ресурсам и инету, всегда буду рад помочь: delalex@inbox.ru
маскарад - это частный случай SNAT. Используется когда машине присваивается внешний Динамический Ip.И только.
В твоем случае как я понимаю имеется две статичесеи сетки так что маскарад здесь не нужен а нужен SNAT.
Вот таое дополнение
Добавлено:
маскарад - это частный случай SNAT. Используется когда машине присваивается внешний Динамический Ip.И только.
В твоем случае как я понимаю имеется две статичесеи сетки так что маскарад здесь не нужен а нужен SNAT.
Вот таое дополнение
Вполне с этим согласен - я и использовал SNAT. *Маскарад здесь был упомянут лишь потому, что не работала именно функция подмены IP-адреса источника в исходящих пакетах, для чего, собственно, SNAT и маскарад и предназначены.
Можно применять маскарад и для статического IP-адреса, просто это является нецелесообразным, т.к. увеличивает нагрузку на систему... в чем между ними разница:
SNAT поставлена конкретная задача - менять адрес источника на явно указанный IP, a MASQUERADE после каждого пакета "забывает", что надо "подсовывать" в качестве исходящего IP и запрашивает адрес внешнего сетевого интерфейса по новой - отсюда и повышенная затребованность ресурсов.
..как приятно слушать разговор двух умных людей, особенно если один из них - ты сам.... ;-)
Barracuda
06-08-2003, 14:29
Delalex
Gorza
А вы это что тут делаете?
..как приятно слушать разговор двух умных людей, особенно если один из них - ты сам.... ;-)
Точно-точно... :)
Delalex
Gorza
А вы это что тут делаете?
Азбуку изучаем ( с картинками). Присоединяйся, если есть желание.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.