настройка NAT + BIND с форвардингом... [РЕШЕНО]

Благодаря joper, решил проблему форвардинга...
Если кому-то понадобится...
необходимые пакеты iptables, bind...
также необходимо настроить ядро для iptables...
Как настроить ядро можно прочитать тут http://www.gentoo.org/doc/ru/home-router-howto.xml
Сделал файл со скриптом ниже, установив его в загрузку

#!/bin/bash

IPT='/sbin/iptables'

###############################################


############## POLICES ##############################

# Drop all chains
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F

# Defauil polices
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

########## I/O polices############
# Allow trafic for lo interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

#If interfase not lo, ban  entering in list it adreses
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP

# Accept packets for established connections
$IPT -A INPUT -p ALL -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Accept outgoing "ping"
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# Accept imcoming "ping"
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

# Accept ssh connections
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT

# Сквид сам дпишешь, взависимости от порта на котором он слушается



########################## NAT and FORWARD ############################
echo 1 > /proc/sys/net/ipv4/ip_forward

# Outgoing connections from internal network 192.168.0.0/24 to internet
$IPT -A POSTROUTING -t nat -s 192.168.0.0/255.255.224.0 -o eth0 -j SNAT --to-source ТВОЙ_ВНЕШНИЙ_IP

# Accept forwarding from internal network
$IPT -A FORWARD -s 192.168.0.0/255.255.224.0 -i eth1 -p all -j ACCEPT

# Accept forwarding to us
$IPT -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

добавляем скрипт в автозагрузку при старте сервера
rc-update add /путь/к/нашему/скрипту default
далее ковыряем named.conf
/etc/bind/named.conf - для тех кто ставил бинд из портежей...
предположим у нас
iternet DNS = 217.40.12.1 и 217.40.12.21
intranet DNS = 192.168.0.3

options {
 directory "/var/bind";
 forward first;
 forwarders {
 217.40.12.1;
 217.40.12.21;
 };
 // по умолчанию все запросы передаются
 // на ДНС сервер вашего провайдера
};
//Стандартная локальная зона
zone "0.168.192.in-addr.arpa" {
 type master;
 file "named.local";
};
// Эти права более приоритетны!
zone "12.40.217.in-addr.arpa" in{
 type forward;
 forward first;
 forwarders {
 217.40.12.1;
 217.40.12.21;
 };
 // для этой зоны все запросы передаются
 // на ДНС сервера провайдера
};
zone "domain.name.net" in{
 type forward;
 forward first;
 forwarders {192.168.0.3;};
 // для этой зоны все запросы передаются
 // на ДНС сервера локальной сети
};

в коталоге /var/bind необходимо положить файл named.local (если у вас такового еще нет)
примерно такого содержания

$TTL    86400
@       IN      SOA     localhost. root.localhost. (
                        1997022700      ; Serial
                        28800           ; Refresh
                        14400           ; Retry
                        3600000         ; Expire
                        86400 )         ; Minimum
        IN      NS      localhost.
1       IN      PTR     localhost.

правим теперь файл /etc/conf.d/net
добавляем/меняем следующее содержание
dns_servers_lo=( "127.0.0.1" )
перезагружаем интерфейс
/etc/init.d/net.lo restart
проверяем файл
nano /ets/resolf.conf
на наличие данного содержания
nameserver 127.0.0.1
пробуем пингануть ваш сервер нетбиос именем...
ping domain.name.net
пингует?! Значит пашет форвард...
дальше на клиентской манише в настройках пишем
ипишник клиентской машины, маску вашей сети, шлюз вашего сервера на котором все прописывали, и днс где настраивали намед... Должно все работать!

Спасибо еще рас joper!

ывывыв

Скинь вывод

route -n

И ещё кинь содержание своего /etc/conf.d/net

Цитата:
/iptables -t nat -A POSTROUTING -s 192.168.0.5 -j SNAT --to-source

А это что ещё такое? Похоже на либо недописанное правило, либе неправильно перенесённое..
Мне кажется ты не очень разбираешься в айпитейблс... Вот изучи, мне оч помогло в своё время
http://www.opennet.ru/docs/RUS/iptables/

как просили

~ # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
85.21.46.192 0.0.0.0 255.255.255.240 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.224.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 85.21.46.193 0.0.0.0 UG 0 0 0 eth0

eth0 - internet
eth1 - intranet

содержимое /etc/cong.d/net

config_eth0=( "xx.xx.xx.xx netmask 255.255.255.240 brd xx.xx.xx.xx" )
routes_eth0=( "default gw шл.юз.провай.дера" )
config_eth1=( "192.168.0.9 netmask 255.255.224.0 brd 192.168.31.255" )
dns_servers_lo=( "127.0.0.1" )

да там в iptables я чето пропустил, недописал шлюз инета...

1

cactys1 написал(а):
config_eth1=( "192.168.0.9 netmask 255.255.224.0 brd 192.168.31.255" )

Меня смущает эта строчка... обычно маска для локалки берётся 255.255.255.0, ты уверен, что у тя указана именно нужная маска, как на локальных тачках?
А вообще если сеть правильно настроенна, и айпитейблс отключен всё должно пинговаться сразу.

Теперь по поводу скрипта для таблиц.
Попробуй следующий

#!/bin/bash

IPT='/sbin/iptables'

###############################################


############## POLICES ##############################

# Drop all chains
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F

# Defauil polices
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

########## I/O polices############
# Allow trafic for lo interface
$IPT -A INPUT -i $loface -j ACCEPT
$IPT -A OUTPUT -o $loface -j ACCEPT

#If interfase not lo, ban  entering in list it adreses
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP

# Accept packets for established connections
$IPT -A INPUT -p ALL -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Accept outgoing "ping"
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# Accept imcoming "ping"
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

# Accept ssh connections
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT

# Сквид сам дпишешь, взависимости от порта на котором он слушается



########################## NAT and FORWARD ############################
echo 1 > /proc/sys/net/ipv4/ip_forward

# Outgoing connections from internal network 192.168.0.0/24 to internet
$IPT -A POSTROUTING -t nat -s МАСКА_ТВОЕЙ_СЕТИ_ВИДА_192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source ТВОЙ_ВНЕШНИЙ_IP

# Accept forwarding from internal network
$IPT -A FORWARD -s МАСКА_ТВОЕЙ_СЕТИ_ВИДА_192.168.0.0/255.255.255.0 -i eth1 -p all -j ACCEPT

# Accept forwarding to us
$IPT -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

После твоего

После твоего скрипта теперь вообще ни один интерфейс не пашет :)
Вернее что-то с named случилось, сервер не останавливается :)

:)Ладно.Давай

:)
Ладно.
Давай по порядку...

1. разрешаем весь траф для айпитейблс.

#!/bin/bash

IPT='/sbin/iptables'

# Drop all chains
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F

# Defauil polices
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

2. останавливаем пока намед, ибо пока с сетью не разобрались.
Меняем dns_servers_lo на
dns_servers_lo=( "195.14.50.1 195.14.50.21" )
И перезапускаем интерфейс, если, конечно я правильно понял, что 195.14.50.1 и 195.14.50.21 - твои днс сервера.

3. Провеяем правильность настройки сети, ответь мне - таки на вопрос по-поводу подсетей:
config_eth1=( "192.168.0.9 netmask 255.255.224.0 brd 192.168.31.255" )
Меня смущает эта строчка... обычно маска для локалки берётся 255.255.255.0. Ты уверен, что у тя указана именно нужная маска, как на локальных тачках?

4. Проверяем пингуется-ли иинет.

ЗЫ: Ответь плиз по пунктам прямо.

1 сделано 2

1 сделано
2 сделано
3 сделано
иерархию сети не я делал, это уже было доменя все сделано :)... Да маска правильная!
4 сделал пингуеца...
Вот :)

Отлично. 5.

Отлично.

5. Пингуются-ли компы из локалки(тока пингуй по айпишнегам, а не по нетбиос именам)?

6. Пингуется-ли сервак с локальных компов?

5. да 6. да =)

5. да
6. да
=) такое ощущение что ты решил помоч мне настроить форвардинг? :) А то уже с понедельника никак разобраца не могу, первый раз шлюз на генту подымаю... да и вообще на линуксе :)

Намёк понял

Намёк понял :)

Значить, всё, сетка работает, след шаг- это дать клиентским компам инет.

7. Пробуем запустить айпитаблесы. На 1-ой из клиентских тачек пропиши пока шлюз- новый сервак и днсы провайдера, чтобы тестить инет.

#!/bin/bash

IPT='/sbin/iptables'

###############################################


############## POLICES ##############################

# Drop all chains
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F

# Defauil polices
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

########## I/O polices############
# Allow trafic for lo interface
$IPT -A INPUT -i $loface -j ACCEPT
$IPT -A OUTPUT -o $loface -j ACCEPT

#If interfase not lo, ban  entering in list it adreses
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP

# Accept packets for established connections
$IPT -A INPUT -p ALL -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Accept outgoing "ping"
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# Accept imcoming "ping"
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

# Accept ssh connections
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT

# Сквид сам дпишешь, взависимости от порта на котором он слушается



########################## NAT and FORWARD ############################
echo 1 > /proc/sys/net/ipv4/ip_forward

# Outgoing connections from internal network 192.168.0.0/24 to internet
$IPT -A POSTROUTING -t nat -s 192.168.0.0/255.255.224.0 -o eth0 -j SNAT --to-source ТВОЙ_ВНЕШНИЙ_IP

# Accept forwarding from internal network
$IPT -A FORWARD -s 192.168.0.0/255.255.224.0 -i eth1 -p all -j ACCEPT

# Accept forwarding to us
$IPT -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

8. После запуска айпитейблсов- проверь, пингуется ли с сервака инет?
9. пингуется ли инет с клиентской тачки, на которой ты прописывал шлюз и днс?

сразу такой

сразу такой вопрос... Мне нужно допустим 5 машин из 10 разрешить НАТ...
Правильно будет если я пропишу так

Цитата:
# Outgoing connections from internal network 192.168.0.0/24 to internet
$IPT -A POSTROUTING -t nat -s 192.168.0.1-192.168.0.5 -o eth0 -j SNAT --to-source ТВОЙ_ВНЕШНИЙ_IP

# Accept forwarding from internal network
$IPT -A FORWARD -s 192.168.0.1-192.168.0.5 -i eth1 -p all -j ACCEPT

Всмысле

Всмысле разрешить NAT?
Тебе надо чтобы в инет ходить могли?

мне надо чтобы

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

Ааааа, ясно. А

Ааааа, ясно. А сквид настроен и работает?

ага

joper написал(а):
Ааааа, ясно. А сквид настроен и работает?

да, настроен и работает! :)

Значит

Значит касательно сквида, и доступа для пользователей по айпишнекам, всё это рулится с помощью айпитейблс. Я мог бы тебе написать, но пора и самому поучится
прочти http://www.opennet.ru/docs/RUS/iptables/
Настоятельно рекомендую... Вопросов бует меньше намного...
Подсказка: тебе нужно запертить(достаточно его не разрешать, т.к. по-умолчанию он у тя запрещён) форвардинг для адресов которые не должны ходить в инте напрямую и сделать с !форвард портов(не путать с форвардом трафика общим)! с этих адресов с 80 на порт который слушает сквид.
Информация по свиду http://squid.opennet.ru/
Ещё подсказка: тебе нужен прозрачный прокси.

после запуска

после запуска скрипта выдает следующее

Bad argument `ACCEPT'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `ACCEPT'
Try `iptables -h' or 'iptables --help' for more information.

Ты запускал,

Ты запускал, скрипт какой? Который я тебе кинул в пункте 7 или поправил его как в своём передыдущем посте?

как в пункте 7 =)

как в пункте 7 =)

Тогда, попробуй

Тогда, попробуй все ACCEPT'ы заново переписать с клавиатуры, я мог случайно по-русски 1 из них написать, а судя по ругани написал даже 2 :)

непомагло :(

непомагло :(

А блин вроде

А блин вроде нашёл проблему.

$IPT -A INPUT -i $loface -j ACCEPT
$IPT -A OUTPUT -o $loface -j ACCEPT

Заменить на

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

отлично, все

отлично, все работает, в данный момент сижу через новый сервер...
на клиентской машине прописал шлюз новой тачки а днс оставил интернета...

Отлично. теперь

Отлично. теперь разбирайся в айпитейбс, сквиде и bind'e.
Поставь [РЕШЕНО] в теме.

спасибо

спасибо большое...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".