Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Глава 5. Как раздать интернет на локальную сеть

Мы хотим, чтобы машины из локальной сети имели доступ к Internet. В данном случае наш сервер должен выполнять функции роутера (маршрутизатора). В нем должно быть как минимум два интерфейса:

  • один подключен к интернет-провайдеру (пусть это eth0);
  • а второй включен во внутреннюю сеть (пусть это eth1);

Для “раздачи” интернет во внутреннюю сеть часто используется IP маскарадинг (IPMASQUARADE). Работает это, вкратце, следующим образом: пакет, [4] поступающий из локальной сети на роутер, в своем заголовке содержит IP адрес создавшего его компьютера (далее ip-источника) и IP-адрес пункта назначения (далее ip-получателя). Роутер в этом случае подменяет ip-источника на свой ip и отправляет этот пакет получателю. Получатель формирует ответный пакет для роутера. Роутер принимает этот пакет, но он знает, что этот пакет предназначен не ему (путем запоминания номера пакета) и, заменяет в нем ip-получателя на ip-источника, затем отправляет этот пакет локальной машине в сети. Таким образом, получается, что машины во внутренней сети получают доступ в интернет от имени роутера. Отсюда и название “IP-маскарадинг”, так как маршрутизатор маскирует своим IP машины внутри локальной сети. Это дает возможность серьезно повысить защищенность рабочих станций внутри сети и обеспечить их интернетом без раздачи им реальных IP адресов.

В отличии от прокси сервера (например SQUID), этот способ позволяет хорошо работать не только http, но и ftp/pop3/smtp/ssh/telnet/...... практически ЛЮБОМУ сервису. При этом не нужно объяснять сервису, что он работает через прокси.

Полное описание того, что такое IP-Masquarade и как его настраивать на английском языке, можно получить здесь: http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html/IP-Masquerade-HOWTO-html.tar.gz. В частности, оттуда нас интересует раздел: 3.4.1. Выбираем оттуда первый примерчик (выделенный серым цветом), копируем его в файл и делаем этот файл запускаемым.

В адаптированном для Linux Mandrake 9.1 виде этот скрипт можно получить здесь: http://lafox.net/docs/masq/. Для других дистрибутивов, вероятно, нужно поправить пути в переменных : IPTABLES, DEPMOD, MODPROBE.

В сокращенном виде (без комментариев и нефункциональных выводов сообщений) скрипт выглядит так:

#!/bin/sh
# полная версия находится здесь: http://lafox.net/docs/masq/
IPTABLES=/sbin/iptables
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe

EXTIF="eth0"
INTIF="eth1"

$DEPMOD -a

$MODPROBE ip_tables
$MODPROBE ip_conntrack
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_conntrack_irc
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
$MODPROBE ip_nat_irc

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

$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT 
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT 
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD 
$IPTABLES -t nat -F

$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -j LOG

$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

echo -e "done.\n"

Давайте сохраним это в файлик и назовем его, к примеру masq.sh. Далее поправляем переменные:

EXTIF="eth0"
INTIF="eth1"

  • EXTIF - это название интерфейса, который “смотрит” в сторону провайдера.
  • INTIF - это название интерфейса, который “смотрит” во внутреннюю сеть.

Также, возможно, следует закомментировать строку:

$IPTABLES -A FORWARD -j LOG

Этим мы отключим логирование. Иначе, в больших сетях могут возникнуть проблемы с огромными размерами log файлов.

Далее просто запускаем этот скрипт и радуемся тому, что локальная сеть получила интернет. :-)

Посмотреть на то, что сделал этот скрипт с iptables, можно командочками:

# iptables -L
# iptables -L -t nat

IP-маскарадинг часто используется совместно с кэширующим прокси-сервером. О том, как его настроить читайте здесь: Глава 6. Настройка кэширующего прокси-сервера.



[4] IP пакет также часто называют datagram.