Главная > Администрирование, Linux > Internet Gateway on Ubuntu Server (chapter one — base, dns, nat, squid, dhcp)

Internet Gateway on Ubuntu Server (chapter one — base, dns, nat, squid, dhcp)


Сегодня займемся созданием шлюза на базе Ubuntu Server. Перед аналогичными решениями на базе Microsoft этот вариант имеет большую производительность, гибкость, безопасность и устойчивость. Перед интегрированными в железо решениями (кроме cisco) вариант имеет преимущество в производительности и опять же — гибкость. Перед специализированными решениями вроде SmoothWall или FRESCO вариант с Ubuntu Server имеет большую универсальность за счет полного ядра и всех новых библиотек, хотя вероятно меньшую надежность и производительность.

На момент написания статьи, последним стабильным релизом Ubuntu Server был Jaunty. Karmic, который еще на стадии преальфы, рассматривать пока что рано. Железо для шлюза есть следующее:

  • Процессор Pentium III 933 Mhz, ядро Coppermine;
  • 256 мегабайт оперативной памяти;
  • Материнская плата от Intel, старая, но рабочая;
  • 40 гигабайт НЖМД;
  • 2 сетевых адаптера (Base100)

Было желание раз и навсегда защитить шлюз от компьютеров локальной сети, снизить потребление электричества, получить стабильную систему, которую можно не трогать годами. Также был свободный денек и желание получить опыт.
Да-да, именно свободный денек. У читателей статьи весь процесс займет около получаса, вместе с установкой системы. У меня же не было подробного пошагового руководства, потому целый день собирал по крупицам сведения.
От читателя требуются такие же желания, базовые знания сетей и сетевых технологий, более или менее прямые руки, умение думать.
Также рекомендую не забывать делать резервные копии всех файлов, которые мы будем изменять.

cp path_to_file path_to_file-backup

К этой комманде можно прибавить лишь sudo, в том случае, если редактируется файлы, которые принадлежат пользователю root.


0. диск\образ

Ubuntu Server можно получить несколькими способами: скачать, купить или заказать бесплатно. У меня безлимитный интернет, и я выбираю первый способ.
Скачать можно тоже несколькими способами и первый из них — привычное скачивание с http\ftp сервера:
32bit ftp://ftp.corbina.net/pub/Linux/ubuntu-cd/jaunty/ubuntu-9.04-server-i386.iso
64bit ftp://ftp.corbina.net/pub/Linux/ubuntu-cd/jaunty/ubuntu-9.04-server-amd64.iso

Еще быстрее можно загрузить образ диска использую технологию BitTorrent:
32bit ftp://ftp.corbina.net/pub/Linux/ubuntu-cd/jaunty/ubuntu-9.04-server-i386.iso.torrent
64bit ftp://ftp.corbina.net/pub/Linux/ubuntu-cd/jaunty/ubuntu-9.04-server-amd64.iso.torrent

Загрузка с торрентов имеет преимуществ как для Вас, так и для Canonical. Для Вас основное преимущество заключается в скорости. Так как каналы интернет Сanonical и партнеров зеркальщиков не резиновые, то в часы пик скорость заметно снижается. Также, используя торренты, вы позволяете Canonical экономить деньги на сервера, зеркала и каналы. Лучше пускай эти деньги уйдут на спонсирование новых разработок.

После загрузки образа, запишите его на компакт диск.
Загрузив и записав, купив или получив Ubuntu Server, можно приступать к установке.

1. Установка
В целом, установка сервера не вызовет никаких проблем даже у начинающих пользователей. Даже разметка диска происходит в автоматическом режиме, хотя по желанию все можно сделать руками.
На последних шагах установщик попросит отметить галками предусмотренные наборы пакетов (у Microsoft это называется ролями). Выбираем только OpenSSH. Остальное мы сделаем ручками.
По окончании установки перезагрузите компьютер. Переходим ко второму пункту.

2. настраиваем сетевые карты
Установщик в процессе инсталяции предложит настроить только одну сетевую карту. Вторую и остальные нужно настраивать отдельно. Для этого нужно лишь отредактировать файл /etc/network/interfaces:

sudo nano /etc/network/interfaces

После редактирования файл должен иметь примерно такой вид:

# The loopback network interface
auto lo
iface lo inet loopback

# LAN
auto eth0
iface eth0 inet static
address 172.16.0.254
netmask 255.255.255.0

# ISP Network
auto eth1
iface eth1 inet dhcp

eth0 у меня смотрит в локальную сеть, а eth1 подключена к интернет провайдеру. Перезапускаем сеть:

sudo /etc/init.d/networking restart

Проверяем:

ping ya.ru

3. Удаленное администрирование.
В серверной, как обычно, кондиционер дует в полную — холодно. Теперь, когда сеть настроена, можно пересаживаться за ноутбук или рабочую машину в более теплом месте и настраивать сервер удаленно. Для этого на удаленной машине набираем:

ssh 172.16.0.254

4. Обновления.
После установки рекомендуется получить актуальные версии всех пакетов:

sudo apt-get update
sudo apt-get upgrade

5. Настраиваем DNS.
Теперь начнем настраивать собственно серверное программное обеспечение. Первым из списка будет DNS сервер. Инсталлируем:

sudo apt-get install bind9

После инсталляции останавливаем, так как будем редактировать его конфигурацию:

sudo /etc/init.d/bind9 stop

Создаем и редактируем локальную зону локальной сети:

sudo touch /etc/bind/maxlan.conf
sudo nano /etc/bind/maxlan.conf

Содержимое:

zone «max.»{
type master;
file «/etc/bind/db.max»;
};

Далее описываем зону:

sudo touch /etc/bind/db.max
sudo nano /etc/bind/db.max

Содержимое:

$TTL 86400 ; 1 day
@ IN SOA server root.server (
2009032601 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
@ IN NS server

server A 172.16.0.1 ; адрес сервера в сети

Обратная зона:

sudo touch /etc/bind/local.rev
sudo nano /etc/bind/local.rev

Содержимое:

$TTL 604800
@ IN SOA server.max. root.server.max. (
2009032601 ; serial
604800 ; refresh
86400 ; retry
2419200 ; expire
604800 ; negative cache TTL
)
@ IN NS server.max.
1.0.16 IN PTR server.max.

Далее:

sudo nano /etc/bind/named.conf.options

Содержимое:

options {
directory «/var/cache/bind»;

version «Version»;
allow-recursion {«net»;};
allow-query {any;};
listen-on-v6 {none;};
};

Далее:

sudo nano /etc/bind/named.conf

Добавляем в начало:

acl «net» {
172.16.0.0/24;
127.0.0.1;
};

и в конец:

zone «172.in-addr.arpa» {
type master;
file «/etc/bind/local.rev»;
};

и последней командой:

include «/etc/bind/maxlan.conf»;

Дописываем домен поиска:

sudo nano /etc/resolv.conf

И добавляем в начало:

search server.max
nameserver 127.0.0.1

Указываем как резолвить самого себя:

sudo nano /etc/hosts

после «127.0.0.1 localhost» вписываем:

172.16.0.254 server.max server

Запускаем:

sudo /etc/init.d/bind9 start

Если не запустился — проверяем cat /var/log/syslog и исправляем ошибки.
Теперь на компьютере из локальной сети пробуем:

nslookup -172.16.0.254

ya.ru

Должно отдать Ip-адрес яндекса.

6. Настройка proxy.
Даже при широкополосном канале в сеть Интернет, более половины трафика от браузера повторяется от пользователя к пользователю. Частично с этим борется кеш самого браузера, но гораздо эффективнее и централизовано с этим справится серверный кеширующий прокси сервер. Также при помощи прокси сервера можно управлять доступом пользователей к определенным ресурсам, управлять скоростью, резать рекламные банеры и еще много чего. Сейчас мы сделаем лишь базовую настройку прокси. В качестве программы прокси сервера будем использовать Squid. На момент написания статьи в репозиториях Ubuntu лежала третья версия этого старейшего и лучшего прокси.

Устанавливаем, останавливаем:

sudo apt-get install squid
sudo /etc/init.d/squid stop

Открываем конфиг для редактирования:

sudo nano /etc/squid/squid.conf

ищем директиву http_port и переписываем:

http_port 3128 transparent

меняем:

cache_dir ufs /var/spool/squid 4096 32 256

ищем и коментируем строки:

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

и добавляем ниже:

acl localnet src 172.16.0.0/24 # ournet

ищем и раскомментируем строку

#http_access allow localnet

раскомментируем строку и даем 15 мегабайт

memory_pools_limit 5 MB

Задаем язык вывода ошибок для пользователя

error_directory /usr/share/squid/errors/Russian-koi8-r

Теперь строим кеш:

sudo /usr/sbin/squid -z

и запускаем

sudo /etc/init.d/squid start

7. настраиваем NAT
NAT — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Суть механизма состоит в замене адреса источника (source) при прохождении пакета в одну сторону и обратной замене адреса назначения (destination) в ответном пакете. Наряду с адресами source/destination могут также заменяться номера портов source/destination.

Так как я не нашел механизма в Linux, который сохранял бы все настройки iptables при перезагрузке сервера или сети, то его настройку вынесем в отдельный файл скрипт, который будет запускатся при активировании сети.
Создаем этот скрипт и открываем для редактирования:

sudo touch /etc/nat-up
sudo nano /etc/nat-up

Далее содержимое, с моими комментариями:

#!/bin/sh

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

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

# Всегда принимаем трафик на loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
# Разрешаем соединения, которые инициированы внутри (eth0)
iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state —state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state —state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем доступ из LAN-сети к внешнему миру
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Запрещаем форвардинг из внешнего мира во внутреннюю сеть
iptables -A FORWARD -i eth1 -o eth1 -j REJECT

# заворачиваем пакеты на 80 и 8080 порты на прокси. У кого нет — строчку удаляем.
iptables -t nat -A PREROUTING -i eth0 -d ! 172.16.0.0/24 -p tcp -m multiport —dport 80,8080 -j DNAT —to 172.16.0.254:3128

Теперь нам нужно, чтобы данный скрипт запускался при старте сети. Редактируем:

sudo nano /etc/network/interfaces

и в конец дописываем

post-up /etc/nat-up

Проверяем:

sudo /etc/init.d/networking restart

В локальной сети должен заработать Интернет.

8. DHCP

DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической конфигурации узла) — это сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP.

Устанавливаем и останавливаем:

sudo apt-get install dhcp3-server
sudo /etc/init.d/dhcp3-server start

Редактируем конфиг:

sudo nano /etc/default/dhcp3-server

Находим и заменяем на eth0 (интерфейс локальной сети):

INTERFACES=»eth0″

Открываем:

sudo nano /etc/dhcp3/dhcpd.conf

Теперь находим следующие директивы и редактируем. Тех, которых нет — создаем:

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

option subnet-mask 255.255.255.0;
option broadcast-address 172.16.0.255;
option routers 172.16.0.254;
option domain-name-servers 172.16.0.254;
option domain-name «max»;

В том же файле, в конце создаем нашу зону:

subnet 172.16.0.0 netmask 255.255.255.0 {
range 172.16.0.1 172.16.0.252;
}

Если мы хотим, чтобы определенным компьютерам всегда выдавался заданный ip-адрес — дописываем:

host power {
hardware ethernet 00:1F:3C:46:07:56;
fixed-address 172.16.0.13;
}

host thebest {
hardware ethernet 00:E0:4D:72:70:68;
fixed-address 172.16.0.1;
}

Запускаем:

sudo /etc/init.d/dhcp3-server

ВСЕ. Теперь наш сервер умеет раздавать «Интернет» в локальную сеть, а также кешировать http трафик. Также умеет преобразовывать интернет имена в ip, раздавать компьютерам локальной сети необходимые для работы настройки.
Это базовая настройка. В дальнейшем мы обязательно прикрутим фильтрацию рекламы, небольшой потоковый антивирус, управление и балансировку канала и трафика (QoS), и может быть что то еще хорошее.

Автор: Unbeliever 

Источник

  1. Alexei
    2 ноября, 2009 в 9:15 дп

    возник вопрос, в строке
    # Запрещаем форвардинг из внешнего мира во внутреннюю сеть
    iptables -A FORWARD -i eth1 -o eth1 -j REJECT

    ошибки нет? оба параметра eth1 ?

    • volvach
      16 декабря, 2009 в 5:19 пп

      Угу, оба параметра eth1

  2. Demon
    12 февраля, 2010 в 9:22 пп

    acl «net» {
    172.16.0.0/24;
    127.0.0.1;
    85.90.192.9;
    195.234.220.8;
    85.90.192.8;
    };

    Три последних IP-адреса не понятно откуда взялись?


    Статья не плохая, но местами не хватает хотя бы коротких комментариев к параметрам, что и зачем мы пишем. Просто тактика «ищем» -> «меняем» не приводит к пониманию. Можно конечно полезть в доки, но эт уже если дальше, если понравится 🙂

  3. Jakov
    21 апреля, 2010 в 7:33 дп

    у меня вопрос по настройке DNS:
    что означает строка «server A 172.16.0.1 ; адрес сервера в сети»?
    То, что в локальной сети есть еще DNS-сервер? Адрес какого сервера здесь указан?
    Если я правильно понимаю, мы поднимаем DNS-сервер на роутере -> здесь нужен IP роутера (172.16.0.254). Или я все-таки чего-то не понимаю? Спасибо.

  4. 19 августа, 2010 в 6:35 дп

    вот такая ошибка при запуске. это нормально?

    epashkov@DC2:/etc$ sudo ./iptables.rules.sh
    Bad argument `–state’
    Try `iptables -h’ or ‘iptables —help’ for more information.
    Bad argument `–state’
    Try `iptables -h’ or ‘iptables —help’ for more information.
    Bad argument `–state’
    Try `iptables -h’ or ‘iptables —help’ for more information.
    Using intrapositioned negation (`—option ! this`) is deprecated in favor of extrapositioned (`! —option this`).
    Bad argument `–dport’
    Try `iptables -h’ or ‘iptables —help’ for more information.
    epashkov@DC2:/etc$

  1. No trackbacks yet.

Ответить на Alexei Отменить ответ