Эту статью снова посвящаю трансляции сетевых адресов (Network Address Translation). Однако речь пойдет о более «взрослом» трафике, чем в случае с ipnat, — это сотни мегабит в секунд, и , соответственно, pf в качестве «натилки». Сразу отвечу критикам: «Да, господа хорошие, NAT — это зло, дилетантское немасштабируемое потенциально проблемное решение и всё такое прочее…». Слабые стороны:

  • сложность (читай невозможность) получения статистики доступа абонентов к ресурсам, которые таковую статистику могут потребовать
  • повышенная нагрузка на «железо»
  • некоторое усложнения процесса обработки пакетов сервером доступа (практически иными словами следует «подружить» как минимум два пакетных фильтра: ipfw и pf)

Если оставить вопросы статистики и скрещивания ipfw с pf, то всё упирается в аппаратную часть нашего сервера. В начале тысячелетия для нужд маскарадинга был в моде демон пользовательского уровня natd, который на тогдашних первых и вторых pentium не позволял обработать более 10 Мбит/с. А с другой стороны, пакетов вроде «соточка за чирик» или «гигабит за бычок» тогда тоже не было — честные 128Кбит/с однозначно радовали счастливого абонента. К счастью (или к сожалению) эти черные годины миновали, если вы планируете использовать NAT, обеспечьте обработку хотя бы 100 Мбит/с. Между тем, «чёрт не так страшен, как его рисуют», при использовании относительно современного железа даже если трафик почти 1Гбит/с можно спокойно использовать NAT. Не буду голословным и приведу факты.

Итак, имеется полусерверная конфигурация четырехлетней давности:

CPU: Intel(R) Xeon(R) CPU X3360 @ 2.83GHz (2837.57-MHz K8-class CPU)
Intel 82576 Duo Server Adapter
igb0: port 0x3020-0x303f mem 0x83020000-0x8303ffff,0x82c00000-0x82ffffff,0x83044000-0x83047fff irq 16 at device 0.0 on pci1
igb0: Using MSIX interrupts with 5 vectors
igb0: [ITHREAD]
igb0: [ITHREAD]
igb0: [ITHREAD]
igb0: [ITHREAD]
igb0: [ITHREAD]

Общий тафик через сервер (igb0,1 и igb2,3 собраны в транки) составляет приблизительно 350Мбит/с

Name RX TX
────────────────────────────┬─────────────────────────┬───────────────────────────
nat.local.net (local) │ Rate # % │ Rate # %
0 igb0 │ 19.62MiB 18.97K │ 5.98MiB 15.29K
1 igb1 │ 23.16MiB 21.76K │ 7.54MiB 14.48K
2 igb2 │ 6.45MiB 15.36K │ 24.42MiB 22.86K
3 igb3 │ 7.24MiB 17.00K │ 18.31MiB 18.45K

В качестве «натилки» используется самое перспективное на мой взгляд решение — пакетный фильтр pf. Вот таким оригинальным образом можно получить текущее количество сессии трансляции:

nat# pfctl -sa | grep -c all
No ALTQ support kernel
ALTQ related functions disabled
82768

При этом загрузка системы всего 30%

Загрузка от NAT (pf + igb MSI-X)

С учетом того, что процессор далеко не самый современный, моё утверждение о возможности трансляции трафика 1Гбит/с на обычном практически десктопном железе вполне обосновано.

Приведу также графики количества сессий, которые строятся в cacti, собралась почти годовая статистика.

 

статистика NAT cacti

 

Интересно, что абоненты, как мы видим, активно с нарастающим темпом «запасаются контентом» зимой. То ли они ожидают конца света 21 декабря 2012 года, то ли просто бездумно качают порнографию :), то ли все таки при более подходящей погоде они всё-таки предпочитают просиживанию вконтакте другие занятия…

Подведем итоги. Я не призываю вас всегда и всенепременно использовать NAT, обязательно постарайтесь получить AS, блок адресов PI, как минимум 1024 адреса, такое удовольствие обойдется вам приблизительно в 1000 долларов США. С другой стороны, за эту же «штуку» можно модернизировать железо до уровня достаточного для обработки 1Гбит/с. Как говорится, думайте сами, решайте сами…

на сайте stryi-elektro.com.ua. .