The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка NAT в Red Hat, CentOS, ASP, Fedora Linux (redhat nat)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: redhat, nat,  (найти похожие документы)
From: Denis Frolov Date: Mon, 3 Aug 2010 17:02:14 +0000 (UTC) Subject: Настройка NAT в Red Hat, CentOS, ASP, Fedora Linux Оригинал: http://www.redhat-club.org/Articles/DenisFrolov/NATConfiguration Общие сведения Задача Настроить 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 следующую строку net.ipv4.ip_forward = 1 сохраните изменения и выполните # sysctl -p для того чтобы изменения вступили с силу. Настрока сетевых интерфейсов В каталоге /etc/sysconfig/network-scripts/ создайте файл ifcfg-eth0 следующего содержания DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.0.1 NETMASK=255.255.255.252 NETWORK=192.168.0.0 GATEWAY=192.168.0.2 ONBOOT=yes и файл ifcfg-eth1 DEVICE=eth1 BOOTPROTO=static IPADDR=172.16.0.1 NETMASK=255.240.0.0 NETWORK=172.16.0.0 ONBOOT=yes перегагрузите сервис network с помошью команды # service network restart Установка дополнительных параметров ядра через sysctl Наш роутер будет пропускать через себя большое количество сетевых соединений и нам необходимо внести некоторые коррективы в поведение сетевой подсистемы Linux ядра для того, чтобы заставить его работать в полную силу. Данные параметры необходимо добавить в конец файла /etc/sysctl.conf В первую очередь нам необходимо внести изменения в размеры буферов для приема и отправки данных через сокеты. net.core.rmem_default = 16777216 net.core.rmem_max = 16777216 net.core.wmem_default = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 16777216 16777216 net.ipv4.tcp_wmem = 4096 16777216 16777216 Включим защиту от <<наводнения>> syn пакетами. net.ipv4.tcp_syncookies = 1 Запретим принимать ICMP редиректы net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 Игнорируем широковещательные ICMP запросы net.ipv4.icmp_echo_ignore_broadcasts=1 Игнорируем пакеты в которых указан путь до источника net.ipv4.conf.all.accept_source_route=0 Укажем диапазон портов которые разрешено использовать в качестве локальных. По умолчанию этот диапазон достаточно мал, и при высокой нагрузке вам их может просто не хватить net.ipv4.ip_local_port_range = 16384 61000 Уменьшим время которое используется для сообщений о поддержке keep alive соединений net.ipv4.tcp_keepalive_time = 1800 Уменьшим время до закрытия TCP соединения, данный параметр стоит менять только на высоко нагруженных серверах. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 200000 Увеличиваем количество conntrack соединений, необходимо менять значение по умолчанию только на высоко нагруженных серверах. net.ipv4.ip_conntrack_max = 64000000 Указываем время в секундах в течении которого следует ожидать приема FIN до закрытия сокета net.ipv4.tcp_fin_timeout = 30 Указываем количество пакетов проверки keepalive посылать, прежде чем TCP соединение будет закрыто. net.ipv4.tcp_keepalive_probes = 2 Указываем максимальное количество начальных SYN и SYN+ACK повторов для установки TCP соединения. Данные параметры следует использовать с осторожностью на плохих линиях связи т.к. есть вероятность, что TCP сессии никогда не будут установлены. net.ipv4.tcp_synack_retries = 3 net.ipv4.tcp_syn_retries = 3 Следующие параметры явно не влияют на производительность сетевой подсистемы. В случае kernel panic производить перезагрузку роутера через 10 секунд. kernel.panic = 10 Отключаем tcp_ timestamps чтобы сетевые сканеры не могли узнать uptime роутера по его сетевым откликам. net.ipv4.tcp_timestamps=0 Более подробно о параметрах sysctl влияющих на сетевую подсистему Linux можно прочитать на этой странице http://ipsysctl-tutorial.frozentux.net/chunkyhtml/tcpvariables.html Для применения данных параметров выполните # sysctl -p Настройка iptables Создайте файл /etc/sysconfig/iptables следующего содержания: *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] ### Здесь могут располагаться ваши правила для фильтрации ### -A FORWARD -d 0.0.0.0/8 -j DROP -A FORWARD -d 127.0.0.0/8 -j DROP -A FORWARD -d 255.255.255.255 -j DROP -A FORWARD -d 224.0.0.0/4 -j DROP -A FORWARD -d 240.0.0.0/5 -j DROP -A FORWARD -d 239.255.255.0/24 -j DROP -A FORWARD -p tcp --tcp-flags ALL ALL -j DROP -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP -A FORWARD -p icmp -m icmp --icmp-type address-mask-request -j DROP -A FORWARD -p icmp -m icmp --icmp-type timestamp-request -j DROP -A FORWARD -p icmp --fragment -j DROP # COMMIT # *nat -A POSTROUTING -o eth0 -s 172.16.0.0/12 -j SNAT --to 192.168.0.1 # COMMIT Внесите следующие изменения в файл /etc/sysconfig/iptables-config # Подгружаем дополнительные модули чтобы через NAT работали протоколы ftp и irc IPTABLES_MODULES="ip_nat_ftp ip_nat_irc" # Не выгружать модули iptables при рестарте IPTABLES_MODULES_UNLOAD="no" Перезапустите iptables c помощью команды service iptables restart Тестирование производительности В качестве платформы для проведения тестов была взята обычная рабочая машина с совершенно заурядной конфигурацией: * Процессор: Atlhon XP 1600 Mhz * Память: 2 модуля DIMM DDR400 по 256 МБ * Сеть: 2 сетевые карты 3Com Corporation 3c905B 100BaseTX Согласитесь, что система достаточно простая ? Помимо NAT-а никаких иных функций машина не выполняла, так что можем с уверенностью сказать, что чистота эксперимента не нарушена. Тестирование проводилось 1 месяц. За время тестирования машина была выключена 1 раз - для переноса ее в другое место. Количество пользователей работающих через NAT 2500 человек. Данные о проходящем сетевом трафике: В среднем через сетевой интерфейс eth0 проходит: Исходящих пакетов в секунду 3000-6000 Входящих пакетов в секунду 4000-8000. Сетевой трафик: Нагрузка на CPU: Использование памяти: Как мы видим, наш сервер прекрасно справляется в возложенной на него задачей, причем разница в цене между Linux роутером и самым простым аппаратным решением от брэновых производителей которые смогут справиться с подобной задачей может достичь несколько порядков.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Verhoum (?), 23:55, 07/08/2010 [ответить]  
  • +/
    На рисунке eth1 -  ip адрес не согласовывается с RFC 1918
     
     
  • 2, geks (ok), 23:27, 17/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Поменять надо eth0 и eth1 местами
     

  • 3, dodo1 (ok), 19:34, 30/09/2011 [ответить]  
  • +/
    Как в эту схему включить поддержку vlan на пользователя?
     
  • 4, Алексей (??), 20:17, 04/12/2011 [ответить]  
  • +/
    vconfig
     
  • 5, pkuutn (?), 19:55, 10/04/2012 [ответить]  
  • +/
    в RedHat маршрутизацию православно включать не через   sysctl, а через /etc/sysconfig/network
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру