Не получается настроить Debian-сервер интернет-шлюзом

Автор Neuro75, 10 апреля 2012, 11:55:35

« назад - далее »

0 Пользователи и 3 гостей просматривают эту тему.

Neuro75

Здравствуйте. Я только пару недель как пользуюсь 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.
Подскажите, пожалуйста, что я не так делаю и куда копать?

ihammers

Цитата: Neuro75 от 10 апреля 2012, 11:55:35
...
В итоге 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.
Подскажите, пожалуйста, что я не так делаю и куда копать?
Покажите вывод ip addr для сервера и локальной машины.  На локальной машине что написано в resolve.conf?
Пинг с локальной машины проверяете по имени или нет?

Возможно стоит оставить для начала в iptables: iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE и разкомментировать строчки в /etc/sysctl.conf

net.ipv4.ip_forward=1
...
net.ipv6.conf.all.forwarding=1
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290

duletant

Запущенно, однако.
Для начала, я бы настроил DHCP (стереть весь лишний хлам, указать в качестве DNS ваш интерфейс 168.168.111.1, указать маршрут по умолчанию), если в локальной сети DNS не нужен - настроить просто кэширующий DNS (можно отсюда http://www.k-max.name/linux/howto-dns-server-bind/). Затем, когда у вас локальная сеть имеет хать какое нибудь представление о том как ей реагировать на ya.ru, например, перейти к настройке маршрутизации на сервере!

Neuro75

Спасибо, решено.
Конкретно в моем случае было следующее: при установке системы я отключал root'а, а все действия делал от sudo-пользователя. Выполнение команд по одной показало, что не записывается "1" в  /proc/sys/net/ipv4/ip_forward, а изучение свойств файла - что изменять его может только root, от имени пользователей, даже через sudo что либо делать с ним бесполезно. Еще одна переустановка - и все работает :-)
Зато теперь понимаю, что и как делалось :-)

ihammers

Цитата: Neuro75 от 12 апреля 2012, 12:04:14
Спасибо, решено.
Конкретно в моем случае было следующее: при установке системы я отключал root'а, а все действия делал от sudo-пользователя. Выполнение команд по одной показало, что не записывается "1" в  /proc/sys/net/ipv4/ip_forward, а изучение свойств файла - что изменять его может только root, от имени пользователей, даже через sudo что либо делать с ним бесполезно. Еще одна переустановка - и все работает :-)
Зато теперь понимаю, что и как делалось :-)
Тогда ставьте в названии темы [РЕШЕНО].

PS: из под пользователя с правами рута (через sudo), нужно было поправить файл /etc/sysctl.conf.  И при следующей загрузки его уже не нужно будет изменять, то есть скрипт упроститься.
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290