Настройка NAT в Red Hat, CentOS, ASP, Fedora Linux.

Общие сведения

Задача

Настроить NAT на Linux сервере.

Решение

Все необходимые средства для решения поставленной задачи уже есть в составе дистрибутива.

Договоренности

Для определенности будет полагать, что ethernet кабель, по которому поставщик услуг связи (провайдер) предоставляет свои услуги, подключен в сетевой интерфейс eth0. Провайдер выделяет нам один ip адрес 192.168.0.1, сетевая маска 255.255.255.252, шлюз 192.168.0.2.

Локальная сеть подключена к интерфейсу eth1.

На данном сетевой интерфейсе сетевой адрес 172.16.0.1, маска сети 255.240.0.0. На всех машинах локальной сети ip адрес 172.16.0.1 указан в качестве шлюза по умолчанию.

Разрешение пересылки пакетов между сетевыми интерфейсами

Для того чтобы разрешить пересылку сетевых пакетов между сетевыми интерфейсами в системе добавьте в конец файла /etc/sysctl.conf следующую строку

сохраните изменения и выполните

для того чтобы изменения вступили с силу.

Настрока сетевых интерфейсов

В каталоге /etc/sysconfig/network-scripts/ создайте файл ifcfg-eth0 следующего содержания

и файл ifcfg-eth1

перегагрузите сервис network с помошью команды

Установка дополнительных параметров ядра через sysctl

Наш роутер будет пропускать через себя большое количество сетевых соединений и нам необходимо внести некоторые коррективы в поведение сетевой подсистемы Linux ядра для того, чтобы заставить его работать в полную силу.

Данные параметры необходимо добавить в конец файла /etc/sysctl.conf

В первую очередь нам необходимо внести изменения в размеры буферов для приема и отправки данных через сокеты.

Включим защиту от «наводнения» syn пакетами.

Запретим принимать ICMP редиректы

Игнорируем широковещательные ICMP запросы

Игнорируем пакеты в которых указан путь до источника

Укажем диапазон портов которые разрешено использовать в качестве локальных. По умолчанию этот диапазон достаточно мал, и при высокой нагрузке вам их может просто не хватить

Уменьшим время которое используется для сообщений о поддержке keep alive соединений

Уменьшим время до закрытия TCP соединения, данный параметр стоит менять только на высоко нагруженных серверах.

Увеличиваем количество conntrack соединений, необходимо менять значение по умолчанию только на высоко нагруженных серверах.

Указываем время в секундах в течении которого следует ожидать приема FIN до закрытия сокета

Указываем количество пакетов проверки keepalive посылать, прежде чем TCP соединение будет закрыто.

Указываем максимальное количество начальных SYN и SYN+ACK повторов для установки TCP соединения. Данные параметры следует использовать с осторожностью на плохих линиях связи т.к. есть вероятность, что TCP сессии никогда не будут установлены.

Следующие параметры явно не влияют на производительность сетевой подсистемы.

В случае kernel panic производить перезагрузку роутера через 10 секунд.

Отключаем tcp_ timestamps чтобы сетевые сканеры не могли узнать uptime роутера по его сетевым откликам.

Более подробно о параметрах sysctl влияющих на сетевую подсистему Linux можно прочитать на этой странице http://ipsysctl-tutorial.frozentux.net/chunkyhtml/tcpvariables.html .

Для применения данных параметров выполните

Настройка iptables

Создайте файл /etc/sysconfig/iptables следующего содержания:

Внесите следующие изменения в файл /etc/sysconfig/iptables-config

Перезапустите iptables c помощью команды

Тестирование производительности

В качестве платформы для проведения тестов была взята обычная рабочая машина с совершенно заурядной конфигурацией:

Согласитесь, что система достаточно простая ?

Помимо NAT-а никаких иных функций машина не выполняла, так что можем с уверенностью сказать, что чистота эксперимента не нарушена.

Тестирование проводилось 1 месяц. За время тестирования машина была выключена 1 раз – для переноса ее в другое место.

Количество пользователей работающих через NAT 2500 человек.

Данные о проходящем сетевом трафике:

В среднем через сетевой интерфейс eth0 проходит:

Исходящих пакетов в секунду 3000-6000

Входящих пакетов в секунду 4000-8000.

Сетевой трафик:

Нагрузка на CPU:

Использование памяти:

Как мы видим, наш сервер прекрасно справляется в возложенной на него задачей, причем разница в цене между Linux роутером и самым простым аппаратным решением от брэновых производителей которые смогут справиться с подобной задачей может достичь несколько порядков.

Articles/DenisFrolov/NATConfiguration (last edited 2008-05-19 09:21:43 by DenisFrolov)