1

Здравствуйте. Я только пару недель как пользуюсь Debian и вообще Linux, поэтому не до конца разобрался со всеми тонкостями.
Хочу настроить домашнюю сеть на выход в интернет не через роутер, а через сервер, на который поставил Debian.
Параметры сети: wan на eth3, соединение с провайдером pppoe, lan на eth2.
Локалка 192.168.111.0\24, eth2 статический 192.168.111.1, остальным адреса раздаются через поднятый на сервере dhcp-сервер.
В ходе установки debian сразу настроил pppoe, в итоге /etc/network/interfaces принял вид:

+ открыть спойлер

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth2 provider
iface lo inet loopback

# PPPoE connection
iface provider inet ppp
    pre-up /sbin/ifconfig eth3 up
    provider provider

Т.е. eth3 поднимается, получает IPv6, не имея IPv4. Подумал и не стал eth3 отдельно прописывать (получение IPv4 по dhcp от провайдера). По логике он вроде не нужен.

Поднял eth2:

+ открыть спойлер

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth2 provider
iface lo inet loopback

# PPPoE connection
iface provider inet ppp
    pre-up /sbin/ifconfig eth3 up
    provider provider

iface eth2 inet static
        address 192.168.111.1
    netmask 255.255.255.0
    broadcast 192.168.111.255
    network 192.168.111.0

На сервере поднял dhcp-сервер.
dhcpd.conf:

+ открыть спойлер

#
# Sample configuration file for ISC dhcpd for Debian
#
#

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

#subnet 10.152.187.0 netmask 255.255.255.0 {
#}

# This is a very basic subnet declaration.

#subnet 10.254.239.0 netmask 255.255.255.224 {
#  range 10.254.239.10 10.254.239.20;
#  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
#}

# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.

#subnet 10.254.239.32 netmask 255.255.255.224 {
#  range dynamic-bootp 10.254.239.40 10.254.239.60;
#  option broadcast-address 10.254.239.31;
#  option routers rtr-239-32-1.example.org;
#}

# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
#  range 10.5.5.26 10.5.5.30;
#  option domain-name-servers ns1.internal.example.org;
#  option domain-name "internal.example.org";
#  option routers 10.5.5.1;
#  option broadcast-address 10.5.5.31;
#  default-lease-time 600;
#  max-lease-time 7200;
#}

# Hosts which require special configuration options can be listed in
# host statements.   If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.

#host passacaglia {
#  hardware ethernet 0:0:c0:5d:bd:95;
#  filename "vmunix.passacaglia";
#  server-name "toccata.fugue.com";
#}

# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
#  hardware ethernet 08:00:07:26:c0:a5;
#  fixed-address fantasia.fugue.com;
#}

# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.

#class "foo" {
#  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}

#shared-network 224-29 {
#  subnet 10.17.224.0 netmask 255.255.255.0 {
#    option routers rtr-224.example.org;
#  }
#  subnet 10.0.29.0 netmask 255.255.255.0 {
#    option routers rtr-29.example.org;
#  }
#  pool {
#    allow members of "foo";
#    range 10.17.224.10 10.17.224.250;
#  }
#  pool {
#    deny members of "foo";
#    range 10.0.29.10 10.0.29.230;
#  }
#}
# 192.168.111.0
subnet 192.168.111.0 netmask 255.255.255.0 {
    option domain-name-servers 78.110.144.2 , 78.110.145.2;
    range 192.168.111.100 192.168.111.200;
    }

DNS BIND-сервер:

+ открыть спойлер

named.conf.options:

+ открыть спойлер

options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders. 
    // Uncomment the following block, and insert the addresses replacing
    // the all-0's placeholder.

    forwarders {
        78.110.144.2;
        78.100.145.2;
        8.8.8.8;
    };

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

, где 78.110.144.2, 145.2 - dns провайдера

naned.conf.local:

+ открыть спойлер

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "neurozone" {
    type master;
    file "/etc/bind/db.neurozone";
};

named.conf.default-zones:

+ открыть спойлер

// prime the server with knowledge of the root servers
zone "." {
    type hint;
    file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
    type master;
    file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
    type master;
    file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
    type master;
    file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
    type master;
    file "/etc/bind/db.255";
};

named.conf:

+ открыть спойлер

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

Немного подредактировал взятый у добрых людей скрипт nat-up:

+ открыть спойлер

#!/bin/sh

# переменные
IPTABLES="iptables"
ROUTE="route"
wan="ppp0"
lan="eth2"
ovpn="tap0"
PPTP="ppp0"
server="192.168.111.1"

# очищаем все настройки
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

#активируем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

# Всегда отвечать на ping, но не больше чем на 10 пакетов на wan интерфейс
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -I INPUT -i $wan -p icmp -m icmp -m recent --set --name PING --rsource
$IPTABLES -I INPUT -i $wan -p icmp -m icmp -m recent --update --seconds 180 --hitcount 10 --name PING --rsource -j DROP

# Всегда принимаем трафик на loopback-интерфейсе
$IPTABLES -A INPUT -i lo -j ACCEPT

# Разрешить соединение OpenVPN клиентов с внутренней сетью и обратно
$IPTABLES -A FORWARD -i $ovpn -o $lan -j ACCEPT
$IPTABLES -A FORWARD -i $lan -o $ovpn -j ACCEPT

# Разрешить соединение PPTP клиентов с внутренней сетью и обратно
#$IPTABLES -A FORWARD -i $PPTP -o $lan -j ACCEPT
#$IPTABLES -A FORWARD -i $lan -o $PPTP -j ACCEPT

# Разрешаем соединения, которые инициированы внутри PPTP, OVPN сетей
#$IPTABLES -A INPUT -m state --state NEW -i $PPTP -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -i $ovpn -j ACCEPT

# Разрешаем соединения, которые уже активны
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем соединения, которые инициированы внутри lan сети
$IPTABLES -A INPUT -m state --state NEW -i $lan -j ACCEPT
$IPTABLES -A FORWARD -i $wan -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем доступ из LAN-сети к внешнему миру
$IPTABLES -A FORWARD -i $lan -o $wan -j ACCEPT

# Masquerade скрываем внутрених клиентов от провайдера
$IPTABLES -t nat -A POSTROUTING -o $wan -j MASQUERADE
$IPTABLES -t mangle -A PREROUTING -i $wan -j TTL --ttl-set 64

# Запрещаем форвардинг из внешнего мира во внутреннюю сеть
$IPTABLES -A FORWARD -i $wan -o $lan -j REJECT

# заворачиваем пакеты из внутренней сети lan на 53 порты на сервера
#$IPTABLES -t nat -A PREROUTING -i $lan -p udp -m multiport --dport 53 -j DNAT --to $server:53

# заворачиваем пакеты на 80 и 8080 порты на прокси. У кого нет - строчку удаляем.
#$IPTABLES -t nat -A PREROUTING -i $lan -p tcp -m multiport --dport 80,8080 -j DNAT --to $server:3128

# Перенаправляем пакеты на OpenVPN клиентов
#$IPTABLES -t nat -A PREROUTING -s 192.168.111.0/24 -j DNAT --to 10.10.10.50
#$ROUTE add -net 192.168.111.0 netmask 255.255.255.0 gw 10.10.10.50 $ovpn
# $IPTABLES -t nat -A PREROUTING -i $lan -s 192.168.0.0/24 -p tcp -j DNAT --to 10.10.10.20

# Разрешаем соединения с наружи с wan
# SSH но не больше 3 новых подключений с одного внешнего IP
$IPTABLES -I INPUT -i $wan -p tcp --dport 22 -j ACCEPT
$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name SSH --rsource -j DROP

# FTP но не больше 3 новых подключений с одного внешнего IP
$IPTABLES -I INPUT -i $wan -p tcp --dport 21 -j ACCEPT
$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 21 -m state --state NEW -m recent --set --name FTP --rsource
$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 21 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name FTP --rsource -j DROP

# DNS
#$IPTABLES -I INPUT -i $wan -p tcp --dport 53 -j ACCEPT
$IPTABLES -I INPUT -i $wan -p udp --dport 53 -j ACCEPT

# HTTP
$IPTABLES -I INPUT -i $wan -p tcp --dport 80 -j ACCEPT

# OpenVPN но не больше 3 новых подключений с одного внешнего IP
$IPTABLES -I INPUT -i $wan -p tcp --dport 1777 -j ACCEPT
$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 1777 -m state --state NEW -m recent --set --name OpenVPN --rsource
$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 1777 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name OpenVPN --rsource -j DROP

# PPTPd но не больше 3 новых подключений с одного внешнего IP
#$IPTABLES -I INPUT -i $wan -p tcp --dport 1723 -j ACCEPT
#$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 1723 -m state --state NEW -m recent --set --name PPTP --rsource
#$IPTABLES -I INPUT -i $wan -p tcp -m tcp --dport 1723 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name PPTP --rsource -j DROP

echo firewall rules accepted

и вставил его запуск в /etc/network/interfaces:

+ открыть спойлер

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth2 provider
iface lo inet loopback

# PPPoE connection
iface provider inet ppp
    pre-up /sbin/ifconfig eth3 up
    provider provider

iface eth2 inet static
        address 192.168.111.1
    netmask 255.255.255.0
    broadcast 192.168.111.255
    network 192.168.111.0
    post-up /etc/init.d/nat-up

В итоге dhcp-сервер адреса в локалку раздает. В качестве dns-сервера дает 192.168.111.1. Скрипт nat-up работает, если судить по тому что введенная в него в качестве индикатора строка "echo firewall rules accepted" при загрузке отображается после configuring network interfaces (Configuring network interfaces... firewall rules accepted). На самом сервере интернет есть (пинг на сайты идет, пакеты обновлений качаются). Из локалки 192.168.111.1 пингуется, а присвоенный ppp0 IP уже нет (ну и соответственно больше ничего не пингуется, ни днс-провайдера, ни любые адреса). Судя по отсутствию пинга, дело не в настройках DNS.
Подскажите, пожалуйста, что я не так делаю и куда копать?

2

Neuro75 пишет:

Немного подредактировал взятый у добрых людей скрипт nat-up:

Готовые решения в Debian GNU/Linux
.

Neuro75 пишет:

ну и соответственно больше ничего не пингуетс

Попробуй указать на клиентах DNS гугла, чтобы понять в чем проблема (8.8.8.8 и 8.8.4.4)
.
ы. Bind для чего используешь?

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

3

DNS гугла я использовать пробывал. Но бестолку. Он их даже не пингует с клиента, как же он с ними работать будет.
BIND использую чтобы DNS на клиентах работал. Разве не надо?

4

За ссылку отдельное спасибо. Написано гораздо проще и понятнее чем то что я до этого читал. Углубился в изучение.

5

Neuro75 пишет:

BIND использую чтобы DNS на клиентах работал. Разве не надо?

Если нет необходимости прописывать свои зоны, то bind не нужен, сначала подойдет dnsmasq, он и будет раздавать клиентам.
Вообще сначала настрой NAT, используя гугло-dns, потом dnsmasq, но лучше использовать unbound в качестве кэширующего dns-сервера.

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

6

А если использовать скрипт, указанный по твоей ссылке, в  /etc/sysctl.conf нужно разкомментировать строчки

net.ipv4.ip_forward=1
...
net.ipv6.conf.all.forwarding=1

или он сам это делает?

7

echo "1" > /proc/sys/net/ipv4/ip_forward

или

Neuro75 пишет:

/etc/sysctl.conf нужно разкомментировать строчки
net.ipv4.ip_forward=1

Результат одинаков.

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

8 (11.04.2012 02:53:33 отредактировано singles123)

Neuro75 пишет:

Параметры сети: wan на eth3, соединение с провайдером pppoe, lan на eth2.
Локалка 192.168.111.0\24, eth2 статический 192.168.111.1, остальным адреса раздаются через поднятый на сервере dhcp-сервер.

Т.е. eth3 поднимается, получает IPv6, не имея IPv4. Подумал и не стал eth3 отдельно прописывать (получение IPv4 по dhcp от провайдера). По логике он вроде не нужен.

Все таки надо представлять, что вы делаете и зачем.
eth3 конечно вручную подымается, только он не содержит адреса, а ipv6 это у вас link-local.
Чтобы eth3 правильно подымался, в интерфейсах надо указать
auto eth3
iface eth3 inet dhcp.
В результате он сам подымется при загрузке(или при перезапуске сети) и получит адрес от провайдера.
А уже потом настраивать pppoe- потому как он работает "поверх" eth3.

После всех манипуляций ждем от вас результат команд ifconfig , route.

9

Два дня и не менее 10 переустановок системы в попытках настроить шлюз.
Не работал и хоть ты тресни. Огромное спасибо Newzenon за пошагово разжеваный процесс в http://linuxforum.ru/viewtopic.php?id=13140. Повторял все как как они там делали с первого поста и все получилось.
Конкретно в моем случае было следующее: при установке системы я отключал root'а, а все действия делал от sudo-пользователя. Выполнение команд по одной как расписано в указанном посте показало, что не записывается "1" в  /proc/sys/net/ipv4/ip_forward, а изучение свойств файла - что изменять его может только root, от имени пользователей, даже через sudo что либо делать с ним бесполезно. Еще одна переустановка - и все работает :-)
Зато теперь понимаю, что и как делалось :-)

10

Neuro75 пишет:

при установке системы я отключал root'а, а все действия делал от sudo-пользователя

В Debian идеологически правильно не отключать рута, можно sudo не настраивать, когда надо править системные файлы,

$ su -

Дефис говорит о смене домашнего каталога на /root

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