Проблемы

Существует очень-очень много вещей, которые могут неправильно работать после использования такого простого документа, как этот, потому что почти в каждом случае бывают какие-то исключения или хитрости. Большинство проблем возникает при настройке и конфигурировании внутренних и внешних сетевых устройств. Я буду пытаться отвечать на все вопросы, выяснять, что пошло не так, и добавлять ссылки здесь, чтобы те, у кого возникли проблемы, могли найти соответствующую документацию. Не стесняйтесь писать мне по адресу pramsey@refractions.net.

Не работает ICQ

Некоторые свойства ICQ прекрасно работают с маскарадингом. Другие не работают совсем. Существует экспериментальный модуль поддержки ICQ(beta quality ICQ module) для ядра, все еще находящийся в стадии разработки, однако с ним некоторые, ранее не работавшие, свойства ICQ начинают работать с маскарадингом. Файл README в исходных текстах этого модуля описывает, как его собрать и установить. После его сборки и установки, загрузите модуль командой /sbin/modprobe ip_masq_icq.

А у меня Caldera 2.X, а не Red Hat 6.X

Во-первых, большое спасибо за пожертвования на хорошее дело! Во-вторых Nelson Gibbs (ngibbs@pacbell.net) пишет, что многие из этих советов будут работать и у вас. Правда, существуют достаточно серьезные отличия:

  1. Опция GATEWAY=xxx.xxx.xxx.xxx в файле настройки интерфейсов /etc/sysconfig/network-scripts/ifcfg-eth0 и eth1 (для локального интерфейса надо проставить адрес внешнего, а для внешнего - адрес IP-шлюза провайдера).

  2. Убедитесь в том, что в скрипте /etc/sysconfig/daemons/dhcpd опция ROUTE_DEVICE указывает на eth1, а не на eth0.

  3. /etc/dhcpd.conf необходимо внести указание подсети для обоих интерфейсов (Я не знаю почему, но после того, как я добавил команду subnet 216.102.154.201 netmask 255.255.255.255 { } без опций, сервер DHCP начинает работать на обоих интерфейсах eth0 и eth1, и даже на lo0). Если же указать только одну подсеть, то DHCP-сервер не работает, выдавая ошибку.

  4. Не добавляйте маршрут на машину 255.255.255.255, скрипт /etc/rc.d/init.d/dhcpd. Caldera сам исправляет эту проблему. Убедитесь в том, что изменили в скриптах все ссылки на eth0 на eth1.

Я хочу, чтобы одна из моих внутренних машин была Web-сервером

Очень просто! Однако для этого вам надо иметь статический IP-адрес, чтобы использовать эти советы. Если же у вас динамический IP-адрес, то вам понадобятся дополнительные скрипты, меняющие IP-адреса в командах переназначения портов.

Вам также надо помнить, что переназначение внешнего порта на внутреннюю машину делает вашу "внутреннюю" машину менее "внутренней", но это можно сделать достаточно просто без потери производительности. Одним из побочных эффектов IP-маскарадинга, встроенного в ядро Linux, является возможность вносить достаточно веселые изменения в пакеты, проходящие по сети - этим занимается утилита ipmasqadm.

По каким-то причинам ipmasqadm не поставляется в комплекте Red Hat и Mandrake, поэтому вам придется взять его с веб-сайта создателя -- существует и RPM-пакет, и исходный текст.

После того, как вы получите RPM, установите его и добавьте следующие строки в скрипт /etc/rc.d/rc.local:

/usr/sbin/ipmasqadm portfw -f /usr/sbin/ipmasqadm portfw -a -P tcp -L x.x.x.x 80 -R 192.168.1.x 80

Первая команда очищает таблицу правил переназначения портов, а вторая добавляет переназначение порта 80 с внешнего интерфейса на порт 80 внутренней машины. Заметьте, что вместо x.x.x.x надо подставить внешний статический IP-адрес, а вместо 192.168.1.x.- IP-адрес внутренней машины.

Теперь внешние запросы на порт 80 будут переназначаться на порт 80 внутренней машины. Вы можете проверить эту настройку следующим образом: используйте команду telnet или ей подобную на внешний IP-адрес вашего шлюза: код переназначения портов обрабатывает только запросы, идущие с внешнего интерфейса. Now external requests for port 80 will be transparently sent to port 80 of the internal machine. Note that you cannot test this by telnetting or connecting to your gateway's port 80 from one of your inside machine: the port forwarder only honors requests coming in on the external interface.