Меню Рубрики

Как сделать роутер на freebsd

Роутер на Freebsd 10 для доступа в интернет

Дистрибутив фрюхи часто называют самым подходящим для решения прикладных сетевых задач в локальной сети. Сегодня мы займемся решением одной из сетевых задач — настройкой шлюза на Freebsd 10 для доступа в интернет из локалки. Это простой, популярный и востребованный функционал сервера, который можно расширять дополнительными возможностями.

Введение

Будем использовать следующую версию системы для решения нашей задачи по настройке шлюза:

Если вы еще не установили систему, то рекомендую мою статью с подробным описанием установки Freebsd 10 с видео в конце. Если вдруг будете устанавливать в качестве виртуальной машины на Hyper-V, то у меня есть отдельная заметка на эту тему с описанием поддержки ядром freebsd гипервизора Hyper-V.

На сервере установлены 2 сетевые карты:

  • hn0 — внешний интерфейс, получает интернет от провайдера, настройки по dhcp
  • hn1 — локальная сеть, адрес 10.20.30.1, установлен вручную

В нашу задачу по настройке программного freebsd роутера будет входить настройка маршрутизации на сервере, установка и настройка ipfw, включение nat, настройка локального dhcp и dns сервера.

Если у вас недостаточно опыта и вы не чувствуете в себе сил разобраться с настройкой шлюза самому с помощью консоли сервера — попробуйте дистрибутив на основе centos для организации шлюза и прокси сервера в локальной сети — clearos. С его помощью можно через браузер настроить весь необходимый функционал. В отдельной статье я подробно рассказал о настройке и установке clearos.

Подготовка сервера к настройке шлюза

Подробно вопрос настройки сервера Freebsd 10 я рассмотрел отдельно. Рекомендую ознакомиться с материалом. Здесь я не буду останавливаться на нюансах, а просто приведу команды, которые нам необходимы, без комментариев и подробных пояснений.

Любую настройку я предпочитаю начинать с обновления системы. Выполним его:

Теперь установим mc, я привык работать в нем:

Включаем синхронизацию времени. Для этого добавляем в /etc/rc.conf

И запускаем демон ntpd:

Теперь проверим сетевые настройки. Первый сетевой интерфейс я настроил еще во время установки, поэтому доступ в интернет на сервере уже есть. Вот мой конфиг сети:

Не забываем добавить dns сервер в /etc/resolv.conf.

Настройка ipfw и ядерного nat на Freebsd 10

Для того, чтобы включить firewall и nat на будущем freebsd маршрутизаторе можно просто подгрузить необходимые модули ядра. Так сделать проще всего и быстрее, но есть нюанс. Как только вы загружаете модуль ipfw, вы теряете доступ к серверу. Если вы работаете не за консолью, а скорее всего это так, тем более если у вас вообще нет доступа к консоли сервера, то делать так не рекомендуется по понятным причинам. Поэтому мы поступим по-другому. Добавим необходимые опции в ядро, в том числе и опцию, которая делает по-умолчанию фаервол открытым, соберем новое ядро и установим его. Так мы не потеряем удаленный доступ к серверу.

Перед сборкой ядра обновим исходники системы. Я предпочитаю это делать через svn. Если он у вас не установлен, то установите:

Теперь обновляем исходники:

Копируем стандартное ядро и добавляем туда новые строки:

Собираем и устанавливаем новое ядро:

Добавляем в файл /boot/loader.conf строку:

Добавляем в /etc/rc.conf следующие строки (комментарии уберите):

Идем в указанную папку и создаем там файл для правил ipfw:

Содержание этого конфига приведу в виде ссылки на скачивание уже готового файла с подробными комментариями. Думаю, вы без проблем разберетесь в настройках. Здесь не хочу на этом подробно останавливаться, все же тема настройки ipfw это отдельный разговор, у нас задача настроить роутер. Вот готовый набор правил — rc.firewall. Не забудьте указать свои интерфейсы и ip адреса. Если ошибетесь, потеряете доступ к серверу. Когда все настроите, отключите логирование. Там по-умолчанию стоит запись логов на правила nat и deny all.

Копируем скрипт безопасного редактирования правил и делаем его исполняемым:

Подробно о том, что это за скрипт и как он работает я рассказал в теме по настройке freebsd, ссылку на которую давал в начале. Активируем новые правила запуском скрипта:

Откроется список правил в редакторе по-умолчанию. Там уже будут все правила. Можете еще раз их проверить и если все в порядке, сохраняете файл и выходите из редактора. В консоли вы увидите следующее:

Проверим примененные правила:

Если доступ к роутеру не потеряли, значит все в порядке. Можно перезагрузить сервер и все добавленные параметры в rc.conf активируются. Сделайте это и попробуйте на каком-нибудь компьютере в сети пропинговать адрес в интернете по ip, к примеру 8.8.8.8. Если пинги пройдут, значит все в порядке.

Поле того, как убедитесь, что ipfw настроен корректно, правила применятся и доступ к серверу есть, можете перевести его из открытого режима работы (последнее правило автоматически устанавливается allow all from any to any) в закрытый. Для этого в файл /boot/loader.conf добавьте строку и перезагрузите сервер:

На этом основная настройка шлюза на Freebsd 10 окончена. Клиенты смогут выходить в интернет. Но для удобства необходимо на шлюз установить и настроить dhcp и dns сервер, для обслуживания запросов пользователей. Иначе придется вручную забивать сетевые параметры и использовать сторонний dns сервер.

Установка и настройка dnsmasq

Для нашего роутера на freebsd подойдет любой dns и dhcp сервер. Можно использовать традиционные named и dhcp-server. Но для простоты и удобства, когда не нужен дополнительный функционал, я предпочитаю использовать простой и быстрый в настройке dnsmasq.

Устанавливаем dnsmasq на Freebsd шлюз:

Приводим конфиг к следующему виду:

Добавляем в /etc/rc.conf:

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

Информацию о выданных leases dhcp сервера dnsmasq можно посмотреть в файле /var/db/dnsmasq.leases.

Анализ сетевой активности в freebsd с помощью iftop

Иногда хочется посмотреть, что происходит на роутере и кто использует интернет в данный момент. По-умолчанию, в системе нет готового средства для получения этой информации. На помощь нам придет простая программа iftop, которая позволяет в режиме реального времени посмотреть активность на сетевом интерфейсе.

Устанавливаем iftop на настроенный Freebsd шлюз:

Запускаем iftop с указанием интерфейса и отображением используемых портов:

Видим любопытную картину — кто, куда, по какому порту и с какой скоростью лезет.

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

Заключение

Подведем итог того, что сделали. За короткое время настроили полноценный шлюз (по сути программный роутер) на базе Freebsd 10 для обеспечения выхода в интернет клиентов за сервером. При этом обеспечили автоматическое получение настроек. Даже на скромном виртуальном сервере такой шлюз способен переварить достаточно большой траффик.

Вся настройка занимает буквально 10-15 минут. Основное время уходит на сборку ядра. Чем выше версия Freebsd, тем дольше оно собирается, несмотря на то, что скорости железа существенно возрастают.

Пройдемся по пунктам и разберемся с тем, что конкретно мы сделали:

  1. Подготовили сервер к настройке шлюза.
  2. Пересобрали ядро с необходимыми параметрами.
  3. Настроили ipfw и nat, включили маршрутизацию.
  4. Установили и настроили dnsmasq для раздачи сетевых настроек по dhcp и dns сервера.
  5. Установили iftop для простейшего анализа сетевой активности на внешнем интерфейсе.

Этого достаточно для полноценной работы шлюза на Freebsd 10. Если есть необходимость подсчета пользовательского траффика или ограничения доступа к определенным ресурсам, можно настроить прокси сервер squid и sams2 к нему.

Источник

Строим маршрутизатор на FreeBSD №1

У тебя есть своя собственная локальная сеть,
ты решил, что тебе пора ее подключать к Интернету по выделенной лини. Ну, что же дело хорошее, сегодня я постараюсь тебе
помочь немного с этим 🙂 Начнем с установки FreeBSD, поскольку мы помешаны на
безопасности, о ней надо позаботиться заранее 🙂 Вырубай все, везде отвечай
твердо нет :), то что нам надо мы сами потом включим 🙂 Во время установки системы у тебя спросит
«Хотите ли вы посмотреть коллекцию портов?», отвечай да. Сейчас мы установим дополнительное
программное обеспечение. Лезем в раздел security и выбираем там программу с названием PortSentry, позже она нам пригодиться 🙂 После установки нам надо откомпилировать
ядро… За основу возьмем готовое ядро GENERIC. Оно лежит по адресу /sys/i386/conf. Пиши новое ядро для системы внимательно, удаляй все не нужное (например, удаляй нафиг поддержку USB, COM, LPT, SCSI, RAID и других устройств которые ты не будишь использовать в системе, USB тебе на фиг не надо ты же не собираешься к маршрутизатору подключать устройства с поддержкой USB, и так поступай со всем остальным, тем более это повысит быстродействие системы в целом. Более подробную информацию ты найдешь в файле LINT). Дальше в новое ядро добавляем следующие строчки:

Options IPFIREWALL #Включаем поддержку файрвола
Options IPDIVERT #это опция нужна для работы NAT
Options IPFIREWLL_VERBOSE #Пускай файрвол пишет логи
Options IPFIREWALL_VERBOSE_LIMIT=10 #Ограничение записей в лог, для событий
Options TCP_DROP_SYNFIN #Не будим принимать левые пакеты
Options ICMP_BANDLIMIT #Это опция для предотвращения DOS атак 🙂
Options ACCEPT_FILTER_DATA #Я обычно включаю эту опцию 🙂
Options TCP_RESTRICT_RST #Данную опцию тоже следует включить

После того как ты добавил и исправил все как надо,
сохрани файл под любым именем 🙂 К примеру proxy. После того как ты сохранил файл, ты даешь несколько команд:

config proxy, cd ../../compile/proxy, make depend, make, make install

Все, поздравляю, только что ты откомпилировал свое ядро, если что-то не пошло и компиляция
остановилась — посмотри, может ты что-то не так сделал, такое бывает и попробуй пересобрать ядро заново. После чего делаем ребут системы. И машина у нас должна загрузиться с новым ядром. Если же все таки этого не
произошло не расстраивайся — систему можно загрузить со старым ядром. Для этого при
загрузке, когда она скажет хотите ли вы войти в режим восстановления, нажми Enter, там
дай команду unload, потом load kernel.old и boot. Все, система загрузиться со старым ядром.

По умолчанию система перед загрузкой ждет 9 секунд.
Мы идем в папку /boot и правим там файл loader.conf, нам надо добавить туда следующую строчку
boot_autodelay=0, это делается чтобы системы не ждала 9 секунд ответ пользователя, нам же надо чтобы если что система при перезагрузке выходила быстро в онлайн 🙂 Дальше идем в
папку /etc и начинаем править фал rc.conf. Ниже привожу пример с комментариями, так что разобраться
будет не сложно:

hostname=»zlobix.evil.com» #Ссетевое имя твоей машины
firewall_enable=»YES» #Включаем файрвол
firewall_script=»/usr/local/etc/firewall.conf» #путь к файлу с политиками файрвола
firewall_type=»close» #Тип файрвола, данный тип запрещает все !
firewall_logging=»YES» #Тускай наш файрвол пишет логи
natd_program=»/sbin/natd» #Туть к демону natd
natd_interface=»ed0″ #Та каком интерфейсе у нас будит висеть NAT, интерфейс должен смотреть в сторону ISP (Inetrnet Service Provader)
tcp_extension=»NO» #Отрубаем опасные расширения для TCP/IP
tcp_keepalive=»YES» #Ставь эту опцию, твой роутер будит менее
подвержен DOS атакам.
tcp_drop_synfin=»YES» #Не принимаем левые пакеты
tcp_restrcit_rst=»YES» #Не помню что обозначает но включить рекомендую 🙂
icmp_drop_redirect=»YES» #Не работаем с ICMP
пакетами
icmp_log_redirect=»YES» #Ведем логи ICMP пакетов
ifconfig_lo0=»inet 127.0.0.1″ #настройка петлевого адреса,
оставь так как тут указано

ifconfig_ed0=»inet 167.65.89.147 nemask 255.255.255.192″ #в данном примере у нас этот
интерфейс смотрит в сторону провайдера, где ed0 имя интерфейса, inet
IP — адрес выданный провайдером, netmask маска подсети.

ifconfig_ed1=»inet 192.168.0.1 netmask 255.255.255.0″ #настройка внутреннего интерфейса, то есть который смотрит в сторону локальной сети

ifconfig_ed1_alias0=»inet 192.168.1.1 netmask 255.255.255.0″ # на один сетевой интерфейс можно повесить сразу несколько
IP адресов (IP-алиасинг), в данном примере предполагается, что сеть у нас поделена логически на две подсети 192.168.0.0/24 и 192.168.1.0/24 где /24
— код по маски по методу CIDR, который соответствует
маске подсети 255.255.255.0

syslogd_enable=»YES» #Включаем демон, который
будет отвечать за логи
inetd_enable=»NO» #Выруби этот сервис обязательно !
named_enable=»NO» #этот тоже выруби, ты же не будишь юзать свой маршрутизатор в качестве DNS сервера 🙂
nfs_client_enable=»NO» # Ниже три параметра отвечают за подержку Network File System, мой тебе совет отруби ее тоже
nfs_server_enbale=»NO»
nfs_reserved_port_only=»NO»
fsck_y_enable=»YES»
portmap_enbale=»NO» #отключаем портмапер
sshd_enbale=»YES» #Включаем ssh, чтобы мы могли управлять нашим маршрутизатор удаленно 🙂
sshd_programm=»/usr/sbin/sshd/» #путь до демона ssh
sshd_flags=»» #Флаги запуска sshd, если не знаешь оставь так как есть
defaultrouter=»167.65.89.1″ #Вышестоящий маршрутизатор нашего провайдера
getaway_enbale=»YES» #Включаем шлюз на нашей машине
icmp_bmcastecho=»NO» #Вырубаем ответы на сообщения echo протокола ICMP, это нам сэкономит нервы 🙂
cron_enable=»NO» #Не знаю, но большинство людей включает Cron, я же его вырубаю, поскольку на маршрутизаторе он мне нафиг не нужен.
clear_tmp_enable=»YES» #Очищаем директорию tmp при каждой загрузки системы
lpd_enable=»NO» #Печатать ты тоже не будишь с маршрутизатора, так что отрубай тоже
usbd_enable=»NO» #Вырубаем демон для поддержки USB устройств
sendmail_enable=»NO» #Отрубаем sendmail, самое дырявое место во FreeBSD, постоянно находят какие-то ошибки :))))
kern_securelevel_enable=»YES» #Включаем защиту
kern_securelevel=»0″ #Устанавливаем тип защиты

Так, после того как мы разобрались с rc.conf, надо настроить наш Маршрутизатор на работу с ДНС, для этого открывай файл resolv.conf в этой же папке и пиши туда это:

nameserver=»167.65.88.18″ #Адрес DNS сервера нашего провайдера
nameserver=»167.65.88.17″ #Адрес резервного DNS сервера нашего провайдера

Как ты уже понял после nameserver=»» в кавычках указывается
IP адрес DNS сервера. DNS сервера локальной сети лучше не добавляй, береженого бог бережет 🙂 Дошло дело до ssh.
Его нам надо обезопасить 🙂 и повысить защиту,
поэтому идем в папку /etc/ssh и открываем файл sshd_config. И правим следующие:

#sshd_config
Port 666 #На данном порте у нас будит весеть ssh 🙂
Protocol 2 #Используем более безопасный метод передачи данных
PermitRootLogin no #Отключаем возможность входа в систему пользователю root, для наших нужд мы создадим специального пользователя 🙂
PrintLastLog yes #Отображает дату последнего входа в систему
PermitEmptyPasswords no #Запрещаем вход пользователей с пустым паролем

После того как разобрались, преступим к файрволу.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Как сделать роутер видимым для устройств
  • Как сделать роутер асус репитером
  • Как сделать розетку для роутера в коридоре
  • Как сделать рестарт роутера
  • Как сделать разные ip адреса с одного роутера