Мы хотим, чтобы машины из локальной сети имели доступ к 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. Настройка кэширующего прокси-сервера.