FreeBSD 9
Як інтернет-шлюз (роутер) сервер з ОС FreeBSD використовують досить часто. Для того, щоб використовувати наш сервер як інтернет-шлюз необхідно наявність двох мережевих інтерфейсів (строго кажучи, можна і одним обійтися, але тоді обладнання, що підключається, має підтримувати VLAN, і це вже зовсім інша історія). Спочатку глянемо на стан мережевих інтерфейсів нашого сервера, для цього існує «чарівна» команда:
$ ifconfig
результат виконання команди:
Як не важко здогадатися, у нашому сервері є два фізичні мережеві інтерфейси -em0 іem1 (інтерфейсlo0 називають«петлевим», його поки що розглядати не будемо).
ifconfig_em0="DHCP"ifconfig_em0="SYNCDHCP"
$netstat -rn
Нас цікавить тільки секціяinetrnet: (відповідає протоколуIPv4 ). Найпильнішу увагу ми маємо звернути на наступні рядки:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.77.77 UGS 0 7 em0
1-й рядок - це назва стовпців таблиці маршрутизації, означають наступне (перерахуємо тільки цікаві для нас):
Destination — напрямок
Gateway - шлюз
Flags — прапори
Use — використання, вказує скільки разів був задіяний маршрут
Netif - мережний інтерфейс
Expire — вказує, чи маршрут не закінчив маршрут
2-й рядок визначає основний маршрут. Варто запам'ятати, щоосновний маршрут (його ще називаютьмаршрут за замовчуванням ) — необхідна умова доступу в інтернет на сервері! Пояснимо вміст рядка:
default — власне і вказує на те, що маршрут є основним (за замовчуванням)
em0 — мережний інтерфейс, на який надсилатимуться запити на основний шлюз.
Тепер ми переконалися, що шлюз за замовчуванням у нас отримано. Залишилося перевірити чи є у нас DNS - сервер, для цього подивимося вміст файлу/etc/resolv.conf, в ньому присутня такий рядок:
nameserver 192.168.77.77
status: active
це означає, що мережевий інтерфейс активний і працездатний.
Саме час перевірити наявність інтернету на сервері, пропінгуємо який-небудь сайт:
$ping-t3 adobe.ru
результат виконання команди наступний:
PING adobe.ru (213.252.95.237): 56 data bytes64 bytes від 213.252.95.237: icmp_seq=0 ttl=116 time=25.497 ms64 bytes від 213.252.95.237: icmp_seq=1 ttl=116 time=25.307 ms64 bytes від 213.252.95.237: icmp_seq=2 ttl=116 time=
— = 25.307/25.845/26.731/0.631 ms
Поза всякими сумнівами інтернет на сервері є, маршрутизація і розшернення імен працюють нормально. Переходимо до наступного мережного інтерфейсу.
ifconfig_em1=» inet 172.16.0.100 netmask 255.255.255.0″
Стан мережного інтерфейсу (status: active )em1 не викликає підозр. Приходимо до висновку, що обидві карти працюють нормально і можна приступати до налаштування сервера.
Щоб сервер виконував функції інтернет-шлюзу, до файлу/etc/rc.conf додамо наступний рядок (це робиться від імені користувачаroot ):
gateway_enable="YES"
Цей параметр набуде чинності після перезавантаження сервера, але перезавантаження будемо робити після налаштування NAT та Firewall.
Приступимо до реалізації основного завдання - налаштування NAT. І NAT і Firewall можна реалізувати як штатними засобами ОС, і з допомогою сторонніх програм. На даний момент до складу ядра ОС FreeBSD 9.x входить ipfw2 який і firewall (ipfw), і NAT (ipfw nat) Одна з основних переваг - швидкодія (оскільки ipfw2 реалізований в ядрі ОС - працює дуже швидко, ресурсів «їсть» мало) . Один із недоліків — не найлегший для розуміння та налаштування інструмент (у зв'язку з чим багато хто не використовуєipfw2, замінюючи його чимось більш «дружнім» у налаштуванні). Firewall можна використовувати і без перескладання ядра, але функцію NAT потрібно обов'язково включити в ядро системи. Так що перезбирати ядро все одно доведеться, плюс до всього продуктивність системи буде вищою (та й конфігурувати її можна буде більш гнучко). Спочатку скопіюємо файл конфігурації ядра під новим ім'ямROUTER (мається на увазі, що ОС працює на платформіi386, якщо платформа вашого сервераamd64 — скоригуйте команди з урахуванням цього) , не забуваємо все це виконувати від імені користувачаroot :
testrouter# cd /sys/i386/conf/ && cp GENERIC ROUTER
редагуємо конфігураційний файлROUTER нашого майбутнього ядра, до нього потрібно додати наступні рядки:
options IPFIREWALL #включаємо ipfw
options IPDIVERT #можливість загортати пакети,
#без цього NAT (NATD) не запрацює
options IPFIREWALL_VERBOSE #включаємо логування роботи ipfw
options IPFIREWALL_VERBOSE_LIMIT=5 #обмеження на кількість
#однакових логів — захист проти
# атак
optionsIPFIREWALL_NAT #включаємо ipfw NAT
options LIBALIAS #включаємо в ядро необхідні
#бібліотеки libalias
options ROUTETABLES=2 #дві таблиці маршрутизації
options DUMMYNET #включаємо функцію шейпера трафіку
options HZ="1000" #прискорення роботи гігабітного мережевого адаптера
ВАЖЛИВО! Перед збиранням ядра, перевірте наявність рядка:
device bpf
у конфігураційному файліROUTER, якщо такого рядка немає — додайте! Цей рядок визначає наявність так званого пристрою bpf (Berkeley Packet Filter ), вкомпілованого в ядро. Пристрійbpf необхідний роботи DHCP сервера, реалізація якого ще належить. Як правило, пристрійbpf вже присутній в конфігураційному файлі ядраGENERIC, але, щоб згодом не перезбирати ядро ще раз, варто перевірити вищезазначений параметр заздалегідь.
testrouter#cd /usr/src && make buildkernel KERNCONF=ROUTER
Час складання ядра займає від 20 хвилин і більше, залежно від продуктивності вашої платформи. І заважати йому в цьому не варто — поки що збирається ядро весело ганяємо чаї з плюшками. Встановлюємо нове ядро (на відміну від попередньої, ця процедура виконується значно швидше):
testrouter#make installkernel KERNCONF=ROUTER
Нове ядро зібрано та встановлено, для використання нового ядра потрібно перезавантажити сервер, але поки що цього робити не варто. На даний момент правилаfirewall не задані, а значить усі можливості мережного доступу до нашого серверу будуть закриті (і віддаленого доступу теж не буде, і PuTTY Вам не допоможе!). Взагалі, початкове налаштуванняfirewall потрібно робити в безпосередній близькості від сервера - бо помилки неуникнути.
Налаштовуємо запуск ipfw і NAT при старті системи, для чого файл/etc/rc.conf додаємо рядки:
firewall_enable=»YES»
firewall_nat_enable="YES"
firewall_script="/etc/fw_script.01"
До файлу/etc/sysctl.conf додамо наступні рядки:
# для роботи ipfw NAT
net.inet.ip.fw.one_pass=1
# для ведення логів ipfw
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5
Створюємо початковий файл скрипта конфігурації:
touch /etc/fw_script.01
Не забуваймо зробити скрипт виконуваним:
testrouter#chmod u+x /etc/fw_script.01
Зазначу, що вказаний вище скрипт з набором правил ipfw2 є мінімально робочим, і, звичайно, він не ідеальний. Схрестимо пальці та перезавантажимо сервер:
testrouter# reboot
Якщо сервер завантажився без помилок, вже не погано. Якщо при цьому вдалося на нього віддалено зайти (з локальної мережі, звичайно, бо з-за ми доступ не відкривали) - то все дуже навіть добре. Перевіряємо таблицю маршрутизації та доступність інтернету (це ми вже робили раніше).
Перевіряємо роботуfirewall, для чого виведемо список правил:
testrouter# ipfw list
результат має бути таким:
00100
00200 deny ip від 127.0.0.0/8
00300 deny ip від 127.0.0.0/8
00400 allow ip from any to any via em1
01030 nat 1 ip from any to any via em0
65535 deny ip from any to any
далі перевіримо роботу NAT, навіщо відобразимо його стан:
testrouter# ipfw nat show
результат буде приблизно таким:
nat 1: icmp=0, udp=1, tcp=3, sctp=0, pptp=0,proto=0, frag_ >
Ось тепер настав урочистий момент – настроювання клієнтів локальної мережі!
Ось (як приклад) налаштування мережевої карти одного з ПК у локальній мережі:
Що ж, можна перевіряти доступність інтернету на ПК у локальній мережі. На комп'ютері з операційною системою Microsoft Windows® Натискаємо клавіші+, у вікні«Запуск програми» набираємо командуcmd :
Натискаємо кнопку , відкриється вікно командного рядка:
ping 172.16.0.100
і натискаємо клавішу , якщо сервер доступний:
Можна перевіряти доступність віддалених ресурсів, вводимо команду:
ping adobe.ru
і натискаємо клавішу , дивимося результат:
Якщо зовнішній ресурс в інтернеті доступний (пінгується) - можете сміливо відкривати браузер та серфити в інтернеті! Якщо замість нормального пінгу виходить це:
ping 213.252.95.237