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

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

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

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

Введение

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

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

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

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

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

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

Подробно вопрос настройки сервера 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.

Я не рекомендую настраивать firewall, не имея доступа к консоли сервера. Насколько бы вы ни были опытными администраторами, шанс ошибиться есть всегда.

Хотя у меня многие вещи доведены до автоматизма и я настраиваю по отработанным шаблонам, все равно иногда возникают ситуации, когда я ошибаюсь и теряю доступ к серверу.

Так что в любом случае, при конфигурировании фаервола, убедитесь, что сможете подключиться к серверу и исправить ошибку в случае необходимости.

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

Подробно о том, что это за скрипт и как он работает я рассказал в теме по настройке 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, тем дольше оно собирается, несмотря на то, что скорости железа существенно возрастают.

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

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

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

Рекомендую полезные материалы по схожей тематике:

Источник: http://mobiandro.ru/2016/04/06/router-na-freebsd-10-dlya-dostupa-v-internet/

Шлюз в интернет на FreeBSD за полчаса

Допустим у нас встала задача быстро развернуть шлюз да выхода в интернет небольшой сети (домашней или небольшого офиса). Фактически задача сводится к установке операционной системы и развёртывании DHCP, DNS и NAT. Далее будет показано как можно быстро и легко решить эту задачу используя ОС FreeBSD 8.0.

Для начала нужно установить ОС на сервер. Ставить систему можно даже с bootonly CD докачивая необходимое по сети. Нужно поставить только самый минимум.

Допустим что у сервера два интерфейса: le0, который “смотрит” в интернет и em0, к которому подключена локальная сеть. В локальной сети мы будем использовать пространство 172.31.255.

0/24, причём первый адрес (172.31.255.1) будет использоваться сервером.

Первым делом нужно добавить в файл /etc/rc.conf строку:

gateway_enable=”YES”

Эта строка при загрузке сервера разрешает пересылку IP-пакетов. Без неё не возможно использование сервера в качестве маршрутизатора. Чтобы это изменение вступило в силу до перезагрузки нужно выполнить команду:

sysctl net.inet.ip.forwarding=1

Следующим шагом сконфигурируем DNS. Сначала нужно в файле /etc/namedb/named.conf заменить строку:

listen-on { 127.0.0.1; };

На:

listen-on { any; };

После этого разрешим запуск DNS-сервера добавив в /etc/rc.conf строку:

named_enable=”YES”

И запустим сервис:

/etc/rc.d/named start

Проверить работу DNS-сервера можно командой:

nslookup www.ylsoftware.com 127.0.0.1

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

Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: www.ylsoftware.com
Address: 89.108.78.131

Обновляем дерево портов:

portsnap fetch extract

Затем установим DHCP-сервер:

/usr/ports/net/isc-dhcp31-server && make install clean

Далее создадим файл /usr/local/etc/dhcpd.conf следующего содержания:

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
log-facility local7;
subnet 172.31.255.0 netmask 255.255.255.0 { range 172.31.255.100 172.31.255.200; option domain-name-servers 172.31.255.1; option domain-name “office.localdomain”; option routers 172.31.255.1; default-lease-time 600; max-lease-time 7200;
}

Конфигурация DHCP-сервера более подробно уже была рассмотрена ранее и сейчас останавливаться на ней мы не будем. Для запуска DHCP-сервера нужно добавить в /etc/rc.conf строки:

dhcpd_enable=”YES”
dhcpd_ifaces=”em0″
dhcpd_flags=”-q”

Запускаем DHCP-сервер:

/usr/local/etc/rc.d/isc-dhcpd start

Теперь осталось только настроить пакетный фильтр. Из всего многообразия оных во FreeBSD выберем pf. Создадим файл /etc/pf.rules следующего содержания:

# Базовые настройки
if_ext = “le0”
if_int = “em0”
net_int = “172.31.255.0/24”
set block-policy drop
set state-policy if-bound
scrub all reassemble tcp fragment reassemble
# NAT для локальной сети
nat pass on $if_ext from $net_int -> ($if_ext) static-port
# Запрещаем весь лишний трафик
block drop all
# Разрешаем всё на loopback-интерфейсе
pass quick on lo0 all
# Разрешаем исходящий трафик
pass out quick on $if_ext inet proto tcp from ($if_ext) to any flags S/SA keep state
pass out quick on $if_ext inet proto { udp, icmp } from ($if_ext) to any keep state
pass out quick on $if_int from ($if_int) to $net_int
# Разрешем любой трафик со стороны локальной сети
pass in quick on $if_int from $net_int to any keep state

Добавляем в /etc/rc.conf строки:

pf_enable=”YES”
pf_rules=”/etc/pf.rules”

Читайте также:  Звонок в asterisk через 8, +7 или 7, замена +7 на 8

Запускаем пакетный фильтр:

/etc/rc.d/pf start

Теперь компьютеры в локальной сети смогут получать сетевые настройки по DHCP и спокойно выходить в сеть. На этом всё. Приятной работы!

Источник

Источник: http://zenway.ru/page/gateway-freebsd

Настраиваем шлюз в Интернет на базе FreeBSD

Использование FreeBSD на небольших роутерах для связи с внешним миром уже давно перестало быть чем-то выдающимся. Эта простая в использовании, нетребовательная к ресурсам и обслуживанию операционная система почти идеально подходит для решения подобных задач.

Нам понадобится

Аппаратное обеспечение. Чтобы вывести внутреннюю сеть в Интернет, достаточно компьютера Pentium III 600 МГц, 256 Мб RAM, 10 Гб HDD, 2 сетевые карты.

Конфигурация взята с запасом, для полноценной работы сети малого офиса (около 50 пользователей) вполне хватило бы Pentium II 400 МГц, c 128 Мб RAM.

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

Операционная система: FreeBSD 5.5 или 6.1.

Дополнительно: из-за того, что данный компьютер подлежит непрерывному использованию, рекомендую доставить внутрь корпуса дополнительные вентиляторы чтобы обеспечить принудительное нагнетание/отток воздуха для охлаждения. Практически все современные корпусы ATX позволяют сделать это.

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

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

Будем считать, что уже имеется компьютер подходящей конфигурации с установленной нужной версией FreeBSD.

Необходимо уточнить имена интерфейсов сетевых карт, под которыми их распознает операционная система.

# ifconfig

Должно появиться что-то подобное:

rl0: flags=8843

В компьютере установлены две сетевые карты c именами интерфейсов rl0 и xl0.

В нашем случае интерфейс rl0 будет «смотреть» во внешний мир, а xl0 – во внутреннюю сеть. IP- адрес внутреннего интерфейса: 192.168.9.2 , маска подсети 255.255.255.0, имя интерфейса xl0; IP-адрес внешнего интерфейса 83.xxx.xxx.xxx, маска подсети 255.255.255.224, имя интерфейса rl0.

Уточнить, сетевым картам каких производителей соответствуют те или иные сетевые адреса, можно, заглянув в файл GENERIC в каталоге /usr/src/sys/i386/conf:

# more /usr/src/sys/i386/conf/ GENERIC

В нем находим соответствующие строчки:

Таким образом, интерфейс rl0 соответствует сетевой карте RealTek 8129/8139 и ее аналогам. Сетевой интерфейс xl0 соответствует сетевой карте 3Com.

Отдельно стоит упомянуть о файле GENERIC. Это файл конфигурации ядра, устанавливаемого по умолчанию при инсталляции FreeBSD. Он организован так, чтобы система могла поддерживать большинство наиболее используемых устройств, в том числе и указанные сетевые карты. Очень часто дальнейшие модификации ядра строятся на модифицированной копии этого файла. В данном случае, мы именно так и поступим:

Шлюз провайдера – по умолчанию 83.xxx.xxx.1. В сети присутствуют компьютеры пользователей – 192.168.9.31, 192.168.9.32. Наш домен (условно) – ourdomain.ru.

Имя хоста (компьютера) – ourhost.ourdomain.ru.

Выполняем настройку сетевых карт. Можно использовать утилиту sysinstall (/stand/sysinstall для FreeBSD 5.5 и /usr/sbin/sysinstall для FreeBSD 6.1) Но поскольку нам известны все необходимые параметры, то для упрощения процесса и экономии времени мы будем задавать параметры путем редактирования соответствующих конфигурационных файлов.

Для редактирования будем использовать текстовый редактор vi, присутствующий практически в любой системе UNIX. Для администраторов, пока незнакомых с редактором, могу порекомендовать замечательную статью Максима Мошкова http://www.lib.ru/unixhelp/vi.txt и http://www.lib.ru/unixhelp/vibegin.txt.

Настройки сетевых интерфейсов во FreeBSD хранятся в файле /etc/rc.conf. Открываем его на редактирование:

# vi /etc/rc.conf

И добавляем следующие строки:

# Задаем внутренний интерфейс ifconfig_xl0=”inet 192.168.9.2 netmask 255.255.255.0″ # Задаем внешний интерфейс ifconfig_rl0=”inet 83.xxx.xxx.xxx netmask 255.255.255.224″ # Задаем шлюз провайдера по умолчанию defaultrouter=”83.xxx.xxx.1″ # Имя хоста hostname=”ourhost.ourdomain.ru” # Указываем, что сервер будет работать как маршрутизатор

gateway_enable=”YES”

После чего перезагружаем компьютер:

# reboot

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

После загрузки проверяем:

# ifconfig

Вывод команды ifconfig:

rl0: flags=8843

Файл rc.conf, на мой взгляд, можно назвать ключевым файлом конфигурации. Очень большое число параметров, используемых системой, задается в виде соответствующих переменных в этом файле. В том числе настройки сетевых интерфейсов, файервола и NAT, используемых нами.

Настройка шлюза

Мы будем использовать «родной» для FreeBSD файервол IPFW. Для этого мы должны внести некоторые изменения в ядро системы. Если возникли дополнительные вопросы по перекомпиляции ядра, советую прочитать дополнительный материал: http://freebsd.org.ru/how-to/kernelconfig.html.

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

Исходники ядра по умолчанию лежат в каталоге /usr/src/sys/i386/conf. Соответственно переходим в данный каталог:

# cd /usr/src/sys/i386/conf

Как правило, изменяют файл GENERIC, содержащий опции ядра, устанавливаемого по умолчанию. Для этого делаем копию данного файла:

# cp GENERIC ourkernel

Открываем на редактирование новый файл ourkernel:

# vi ourkernel

и добавляем следующие опции:

# options IPFIREWALL #firewall options IPFIREWALL_VERBOSE ? #enable logging to syslogd(8) options IPFIREWALL_FORWARD ? #enable transparent proxy support options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default # options DUMMYNET # options IPDIVERT #divert sockets
После сделанных изменений можно приступать к перекомпиляции ядра.

Выполняем команды:

# config ourkernel # cd /usr/src/sys/i386/compile/ourkernel # make depend # make

# make install

Перегружаемся:

# reboot

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

Для организации работы файервола используются следующие переменные, добавляемые при необходимости в файл rc.conf.

Разрешает или запрещает использование файервола:

# Set to YES to enable firewall functionality
firewall_enable=”NO”

Имя и местоположение файла, отвечающего за инициализацию файервола.

# Which script to run to set up the firewall
firewall_script=”/etc/rc.firewall”

Файл rc.firewall не рекомендуется редактировать. Вместо этого лучше воспользоваться соответствующей переменной firewall_type или более простым способом, описываемым ниже.

При установке данного правила в «YES» подавляется вывод на дисплей:

firewall_quiet=”NO”

Разрешить/запретить ведение лога событий:

firewall_logging=”NO”

Тип настройки файервола:

firewall_type=”UNKNOWN”

по умолчанию FreeBSD использует правила из файла /etc/rc.firewall.

В нем есть несколько готовых шаблонов:

Эту же переменную в значении «filename» – «имя_файла» – можно использовать для задания собственного конфигурационного файла для файервола.

Например:

firewall_type=”/etc/rc.firewall.newconfig”

будет загружать настройки из созданного файла /etc/rc.firewall.newconfig.

«firewall_flags=””» – служит для передачи дополнительных аргументов при использовании firewall_type со значением filename.

Наша задача состоит в том, чтобы создать систему, отвечающую следующим критериям:

В нашем примере скрипта все компьютеры локальной сети делятся на две условные группы: одна группа привилегированная – это те, кому разрешен доступ в Интернет, используя наиболее употребительные сервисы, такие как:

HTTP – порт 80;
HTTPS – порт 443;
FTP – порты 20, 21 и от 1025 до 65535;
SMTP-протокол для пересылки почты – порт 25;
POP3-протокол для приема сообщений – порт 110.

Есть и другая группа, компьютерам из которой разрешен доступ только к внешнему корпоративному серверу c IP-адресом 83.xxx.xxx.2 (только протоколы SMTP и POP3).

Мы должны добиться, чтобы можно было изменять привилегированную группу, что называется, «на лету», по возможности не разрывая установленных соединений. Для этого мы из нашего скрипта вызываем дополнительный скрипт rc.firewall.local.inet. Достаточно отредактировать и перезапустить этот дополнительный скрипт, не затрагивая всех остальных настроек файервола.

Дополнительно мы должны предусмотреть ситуацию, когда меняются параметры сети, такие как IP-адрес шлюза провайдера. Для этого мы будем использовать в скрипте локальные переменные. Например, при изменении шлюза по умолчанию достаточно изменить значение переменной intgateway и перезапустить скрипт rc.firewall.run.

Вот наш пример скрипта:
# vi rc.firewall.run #!/bin/sh extip=”83.xxx.xxx.xxx” intip=”192.168.9.2″ intnet=”192.168.9.0/24″ mailserver=”83.xxx.xxx.2″ intgateway=”83.xxx.xxx.

1″ # /sbin/ipfw -f flush & # /sbin/ipfw add 180 divert natd ip from ${intnet} to any out xmit fxp0 /sbin/ipfw add 190 divert natd ip from any to ${extip} # ICMP /sbin/ipfw add 500 allow icmp from any to any # SSH /sbin/ipfw add 10000 allow tcp from any to any 22 /sbin/ipfw add 10010 allow tcp from any 22 to any # DNS /sbin/ipfw add 11000 allow tcp from any to any 53 /sbin/ipfw add 11010 allow tcp from any 53 to any /sbin/ipfw add 11020 allow udp from any to any 53 /sbin/ipfw add 11030 allow udp from any 53 to any # Web FTP /sbin/ipfw add 12000 allow tcp from me to any 20,21,80,443 /sbin/ipfw add 12010 allow tcp from any 20,21,80,443 to me /sbin/ipfw add 12020 allow udp from me to any 20,21 /sbin/ipfw add 12030 allow udp from any 20,21 to me # # Script for the privilege group /bin/sh /etc/rc.firewall.local.inet # Deny other computer of LAN /sbin/ipfw add 12960 deny tcp from ${intnet} to any 20,21,80,443 /sbin/ipfw add 12970 deny tcp from any 20,21,80,443 to ${intnet} /sbin/ipfw add 12980 deny udp from ${intnet} to any 20,21 /sbin/ipfw add 12990 deny udp from any 20,21 to ${intnet} # # /sbin/ipfw add 13000 allow tcp from ${intnet} to ${mailserver} 25,110 /sbin/ipfw add 13010 allow tcp from ${mailserver} 25,110 to ${intnet} # /sbin/ipfw add 55010 allow tcp from any to any 1024-65534 /sbin/ipfw add 55020 allow tcp from any 1024-65534 to any /sbin/ipfw add 55030 allow tcp from any 1024-65534 to any /sbin/ipfw add 55040 allow tcp from any to any 1024-65534 /sbin/ipfw add 55050 allow udp from any to any 1024-65534 /sbin/ipfw add 55060 allow udp from any 1024-65534 to any /sbin/ipfw add 55070 allow udp from any 1024-65534 to any /sbin/ipfw add 55080 allow udp from any to any 1024-65534 # Deny all

/sbin/ipfw add 65534 deny ip from any to any

Создаем и редактируем скрипт rc.firewall.local.inet для работы с привилегированной группой адресов:

# vi /etc/ rc.firewall.local.inet #!/bin/sh intnet=”192.168.9.

0/24″ privgroup={31,32} # /sbin/ipfw delete 12310 /sbin/ipfw delete 12320 /sbin/ipfw delete 12330 /sbin/ipfw delete 12340 # /sbin/ipfw add 12310 allow tcp from ${intnet}${privgroup} to any 20,21,80,443,1025-65535 /sbin/ipfw add 12320 allow tcp from any 20,21,80,443,1025-65535 to ${intnet}${privgroup} /sbin/ipfw add 12330 allow udp from ${intnet}${privgroup} to any 20,21,1025-65535

/sbin/ipfw add 12340 allow udp from any 20,21,1025-65535 to ${intnet}${privgroup}

В скрипте для изменения состава привилегированной группы необходимо отредактировать переменную privgroup, добавив/удалив в ней номер хоста в локальной подсети.
Например, чтобы добавить два компьютера с IP-адресами 192.168.9.33 и 192.168.9.45, нужно записать «privgroup={31-33,45}».

Использовать правила типа «/sbin/ipfw delete NNNNN» при старте системы, когда такого правила не было – немножко некрасиво. При попытке удалить несуществующее правило система выдает на консоль сообщение следующего вида:

При этом система продолжает нормально работать.

Если все делать строго, то нужно создавать два скрипта: один запускать при старте, второй – при изменениях на ходу. Но тогда нужно будет вносить соответствующие изменения в оба скрипта.Поскольку основная цель – создать простую в администрировании систему, то данной проблемой в нашем случае можно пренебречь.

Зато теперь мы можем после внесения соответствующих изменений просто перезапустить скрипт для привилегированной группы.

# /bin/sh rc.firewall.local.inet

Также мы можем вносить изменения и перезапускать скрипт rc.firewall.run, хотя, по замыслу, это нам придется делать гораздо реже, чем в случае со скриптом привелигированной группы.

# /bin/sh rc.firewall.run

Поскольку мы написали свой собственный скрипт, обнуляющий существующие правила и запускающий альтернативную конфигурацию файервола, нужно подумать, как его запустить.

Во FreeBSD есть замечательный механизм запуска пользовательских программ: файл rc.local. По умолчанию он отсутствует в системе.

Читайте также:  Backup linux сервера с помощью duplicity

Раз мы уже создаем данный файл, добавим в него команду запуска демона natd, который отвечает за поддержку NAT.

Демон natd запускается из файла rc.conf. (Опять этот файл, поистине он играет ключевую роль для всей системы FreeBSD в целом!)

Механизм запуска этого файла из rc.conf выполняется посредством следующих переменных:
# — путь к самому файлу natd natd_program=”/sbin/natd” # Разрешить NAT (если firewall_enable == YES) natd_enable=”YES” # Внешний интерфейс или IPaddress для использования natd_interface=”” # Дополнительный флаги запуска natd

natd_flags=””

Но в этом случае мы будем использовать вызов демона natd посредством rc.local. Команда:

# vi /etc/rc.local

автоматически создает файл /etc/rc.local и открывает его на редактирование.

Добавляем в него следующие строки:
# Команда запуска natd /sbin/natd -n rl0 # где «-n rl0» — имя интерфейса, на котором запускается NAT # # И запускаем наш скрипт для установки правил для файервола: /bin/sh /etc/rc.firewall.run
Перезагружаемся и проверяем доступ к нужным ресурсам Интернета с компьютера из локальной сети.

1. Эви Немет, Гарт Снайдер, Скотт Сибасс, Трент Р.Хейн. UNIX. Руководство системного администратора. «BHV», «Питер», 2004 г. 2. Алексей Федорчук, Алексей Торн. FreeBSD. Установка, настройка, использование. BHV, 2003 г.

3. Филипп Торчинский. Практическое пособие администратора UNIX. «Символ», 2003 г.

Источник: http://system-administrators.info/?p=97

Настройка роутера на базе FreeBSD

1. Конфигурирование ядра и опций запукаемых скриптов2. Конфигурирование ipfw

3. Предотвращение подделки MAC-адреса
4. Настройка статистики

Итак, посмотрим на ipfw, который в FreeBSD служит верой и правдой уже много лет, тем более что в последней версии в составе c FreeBSD 4.0 исправленны ошибки и добавленна корректная возможность ограничивать полосу пропускания по интерфейсу (использование pipe с опцией bw).

Предположим что мы имеет роутер с тремя сетевыми платами одна из которых (назовем ее vx0, IP 200.200.200.1) смотрит в сторону Интернета, а вторая (назовем ее vx1, IP 200.200.200.2) смотрит в сторону локальной сети с реальными 18 IP адресами (subnet 200.200.200.0/28 netmask 255.255.255.240). К третьей сетевой карточке (vx2 IP 192.168.1.1 и сеть 192.168.1.

0/28) подключена 10Mb сеть соседнего офиса.

Задачи перед нами поставленны следующие :

  1. Закрыть доступ во внутренюю сеть извне по портам 135,137,139
  2. Дать возможность пользователям локальной сети работать с почтой и работать с www- и ftp-серверами других компаний.
  3. Закрыть на роутере возможность атаки типа SYN Flood, ICMP Flood.
  4. Закрыть доступ к корпоративному www-, ftp-серверу (200.200.200.5) используемый для работы с отчетами выставленными на этот www-сервер только в пределах локальной сети и доступа из филиала который имеет IP 190.190.190.5
  5. Открыть доступ для конфигурирования этого роутера с определеного хоста системного администратора.
  6. Обеспечить подсчет трафика по IP адресам в локальной сети чтобы впоследствии доказать что Вася весь месяц только и занимался скачиванием c www.playboy.com картинок сомнительного содержания.
  7. Ограничить трафик 64Kb на третьей сетевой карточке для дружественного клиента находящегося в том же здании и подключенному по 10Mb к нашему роутеру и закрыть доступ с их стороны в локальную сеть нашей компании.

Итак приступим. 

1. Конфигурирование ядра и опций запукаемых скриптов В ядро необходимо занести следующие опции :

options IPFIREWALL              # включает в ядро код

                                     # для фильтрации пакетов

options IPFIREWALL_VERBOSE               # включает возможность вести логи по

                                # правилам фильтрации и проходящих

                                # пакетов

options IPFIREEWALL_VERBOSE_LIMIT=10

                                # ограничение списка числа пакетов

                                # записываемых в лог для того чтобы не

                                # зафлудили syslog

options TCP_DROP_SYNFIN         # отбрасывает TCP пакеты с SYN и FIN

В итоге при перезагрузке системы мы получим Firewall, который по умолчанию закрывает прохождение любого IP трафика по всем интерфейсам. Далее мы определим правила которые откроют только те порты TCP или UDP которые нужны для работы пользователей. Если Вы придерживаетесь другого подхода – “сначала все откроем а потом будем закрывать” то вам необходимо указать следующую опцию в ядре:

options IPFIREWALL_DEFAULT_TO_ACCEPT

В /etc/defaults/rc.conf указываем следующее:

tcp_extensions=”NO”     # отключаем “опасные” из RFC1323 расширения TCP

tcp_drop_synfin=”YES”   # отбрасывем SYN + FIN

icmp_drop_redirect=”YES”   # игнорируем перенаправленные ICMP пакеты

icmp_log_redirect=”YES” # включаем логинг ICMP REDIRECT

firewall_enable=”YES”      # включаем использование firewall

firewall_type=”Company”    # указываем что наши настройки firewalla

                           # находятся в rc.firewall в разделе “Company”

defaultrouter=”199.199.199.1″ # шлюз до нашего ISP

2. Конфигурирование ipfw

Теперь приступаем к написанию правил ipfw. Более побдробное описание синтактиса можно прочитать в handbook или man ipfw. Поскольку мы создаем свою конфигурацию (“Company”) то делаем ее описание в rc.firewall :

[Cc][Oo][Mm][Pp][Aa][Nn][Yy]

     # Описываем сеть и интерфейсы

     fw=”200.200.200.1″

     local=”200.200.200.2″

     client=”192.168.1.1″

     net=”200.200.200.0/28″

     mask=”255.255.255.255.240″

     # Разрешаем трафик по local интерфейсу

     ${fwcmd} add pass all from any to any via lo0

     # Разрешаем трафик только в пределах локальной сети

     ${fwcmd} add pass all from any to any via vx1

     # Запрещаем прохождение фрагментированных пакетов

     ${fwcmd} add deny icmp from any to any frag

     # Разрешаем прохождение ICMP пакетов

     ${fwcmd} add pass ICMP from any to any

     # Разрешаем работу с SMTP протоколом

     ${fwcmd} add pass tcp from any to any 25 out

     ${fwcmd} add pass tcp from any 25 to any out

     # Разрешаем работу с HTTPS протоколом

     ${fwcmd} add pass tcp from any to any 443 out

     ${fwcmd} add pass tcp from any 443 to any out

     # Запрещаем работу снаружи с внутреним сервером компании

     ${fwcmd} add pass tcp from 199.199.199.10 to 200.200.200.5 80 via vx0

     ${fwcmd} add pass tcp from 200.200.200.5 80 to 199.199.199.10 via vx0

     # Запрещаем работу снаружи с внутреним сервером компании

     ${fwcmd} add deny tcp from any to 200.200.200.5 80 in via vx0

     # Разрешаем работу с HTTP протоколом

     ${fwcmd} add pass tcp from any to any 80 out via vx1

     ${fwcmd} add pass tcp from any 80 to any out via vx1

     # Разрешаем работу по всем протоколам в пределах

     # только локальной сети нашей компании

     ${fwcmd} add allow all from any to any via vx1

     # Разрешаем работу с DNS серверами

     ${fwcmd} add pass udp from any to any 53

     ${fwcmd} add pass udp from any 53 to any

     # Разрешаем работу с NEWS Серверами

     ${fwcmd} add pass udp from any to any 119 out via vx1

     ${fwcmd} add pass udp from any 119 to any out via vx1

     # Разрешаем забор почты по POP3 протоколу

     ${fwcmd} add pass udp from any to any 110

     ${fwcmd} add pass udp from any 110 to any

     # Разрешаем работу с FTP серверами

     # Обратите внимание что 20 порт протокола TCP используется для

     # передачи данных, помимо 21 порта.

     ${fwcmd} add pass tcp form any 21 to any

     ${fwcmd} add pass tcp from any to any 21

     ${fwcmd} add pass tcp from any 20 to any

     ${fwcmd} add pass tcp from any to any 20

     # Разрешаем доступ по ssh с домашней машины

     # администратора имеющей IP 200.200.200.15

     ${fwcmd} add pass tcp from 200.200.200.15 22 to {isp}

     ${fwcmd} add pass tcp from {isp} to 200.200.200.15 22

     # Ограничиваем трафик с сетевой карточки vx2 в локальную сеть

     # нашей компании

     ${fwcmd} add deny all from 192.168.1.0/24 to ${net}:${mask} via vx1

     ${fwcmd} add deny all from ${net}:${mask} to 192.168.1.0/24 via vx1

     # Разрешаем работу по базовым портам TCP на интерфейсе vx2

     ${fwcmd} add pass tcp from 192.168.1.0/24 to any 25 via vx2

     ${fwcmd} add pass tcp from any 25 to 192.168.1.0/24 via vx2

     ${fwcmd} add pass tcp from 192.168.1.0/24 to any 110 via vx2

     ${fwcmd} add pass tcp from any 110 to 192.168.1.0/24 via vx2

     ${fwcmd} add pass udp from 192.168.1.0/24 to any 53 via vx2

     ${fwcmd} add pass udp from any 53 to 192.168.1.0/24 via vx2

     ${fwcmd} add pass tcp from 192.168.1.0/24 to any 80 via vx2

     ${fwcmd} add pass tcp from any 80 to 192.168.1.0/24 via vx2

     # Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb.

     # для входящего трафика

     ${fwcmd} add pipe 1 ip from any to any in via vx0

     ${fwcmd} add pipe 1 config bw 64Kbit/s

     # Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb.

     # для исходящего трафика

     ${fwcmd} add pipe 2 ip from any to any out via vx0

     ${fwcmd} add pipe 2 config bw 64Kbit/s

Для проверки работы правил вы можете воспользоваться популярным сканером TCP/IP nmap (входит в состав FreeBSD) дав например команду :

        nmap 200.200.200.1 или nmap 200.200.200.2

находясь за пределами диапазона адресов вашей сети, или попросив об этом вашего ISP.

3. Предотвращение подделки MAC-адреса

Нам необходимо обезопасить наш роутер от возможности принятия пакетов с IP-адресами которые могут попасть в локальную сеть извне под видом легальных пакетов TCP/IP входящие в диапазон сети 200.200.200.0/28.

Даже если это произойдет то на этот случай у нас есть жестко привязанная таблица IP-адресов к MAC-адресам сетевых карт и роутера нашего ISP.

Иногда это бывает необходимо как мера от нечистоплотных сотрудников которые меняют IP адресс своего хоста на адрес другого ПК, владелец которого например находится в отпуске и шишки соотв. посыплятся на него 😉 Для начала вам нужно построить таблицу MAC-адресов , где формат ее будет примерно таким:

petya 00:20:af:4a:3e:e3

vasya 00:20:fg:3a:3e:21

sasha 00:20:fg:3a:3e:21

marina 00:20:fg:3a:3e:21

и сохранить ее в файле например /etc/ethers.

Для того чтобы узнать Ethernet адрес хоста достаточно на нем набрать arp -a.

При запуске на роутере arp -f /etc/ethers вся информация о соответствии IP-адреса и MAC-адреса сетевой карточки при работе протокола ARP будет браться из файла /etc/ether и замораживаться.

Это процесс можно автоматизировать запустив на роутере arpwatch (он есть в портах FreeBSD) и сделав на каждом хосте файл /etc/hosts с описанием пары name_hosts IP_adress и /etc/ethers с вышеприведенным форматом.

Когда появляется факт подмены IP-адресса то arpwatch посылает письмо с описанием проишедшего и таблица arp замораживается.

4. Настройка статистики

Для создания стратистики мы будем использовать ipfm входящий в состав пакетов FreeBSD. При инсталяции в /usr/local/etc/rc.d создается файл ipfm.sh а в /usr/local/etc файл ipfm.conf. Его то как раз нам и нужно отредактировать. Итак приступим :

##### FIRST LOGGING CONFIGURATION #####

# Описывем внутреннюю сеть с которой снимаем статистику

LOG 200.200.200.0/255.255.255.240 NOT WITH 200.200.0.0/255.255.0.0

# Присваиваем название файлу для сбора статистики

FILENAME /var/log/ipfm/local_net-%d.%m-%H.%M.%S

# Устанавливаем период записи в лог в нашем случае лог будет обновляться

# еженедально

TIME 7 day

SORT IN

RESOLVE

##### SECOND LOGGING CONFIGURATION #####

NEWLOG

# Описывем внутреннюю сеть нашего клиента 192.168.1.0/24

subnet 192.168.1.0/255.255.255.0 NOT WITH 192.168.0.0/255.255.0.0

# Задаем период записи в лог в данном случае 1 день

Читайте также:  Движение - жизнь. привыкаем с детства жить на ногах, а не попе.

FILENAME /var/log/ipfm/ipfm-%d.%m-%H.%M.%S

# Log on a period of one week

TIME 1 day

SORT IN

RESOLVE

# Если же требуется более детальная информация по протоколам

# и количеству передаваемых пакетов то можно воспользоваться опцией count в ipfw:

# Подсчитываем входящий и исходящий трафик по HTTP протоколу

ipfw add count tcp from any to any 80 in via vx0

ipfw add count tcp from any to any 80 out via vx0

# Подсчитываем входящий и исходящий трафик по HTTP протоколу для клиентов

ipfw add count tcp from any to any 80 in via vx2

ipfw add count tcp from any to any 80 out via vx2

ipfw add count tcp from any to any 21 in via vx2

ipfw add count tcp from any to any 21 out via vx2

# Еcли же вас интересует статистика с конкретного IP адреса то вы просто указываете так:

ipfw add count tcp from any to 200.200.200.3 in via vx1

# где 200.200.200.3 это IP адрес пользователя например Васи который ежемесячно

# скачивает с www.playboy.com графические файлы. Вы можете также закрыть доступ

# к этому сайту например таким способом:

ipfw add log deny all from any to http://www.playboy.com/

Графическая статистика строится с применением пакета MRTG (Multi Router Transfeer Grapheer) при использовании агента snmp, запущенного на роутере. Также необходимо установить на роутере средства обнаружения атак, но это уже тема для другой статьи.

Страница сгенерирована за 0,0295 s

Источник: http://FAQed.ru/computers/unix/configuring-the-router-based-on-freebsd.htm

Маршрутизатор (Router) и Файервол (Firewall) на FreeBSD x.x штатными средствами — natd и ipfw

Как гласит второе правило нормального системного админа — «Нет ничего лучше и надежнее штатных программ, если они решают поставленные задачи!».

Про первое правило напомню  тем, кто забыл — «Работает!, не трогай и во время смазывай!»

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

То уже устарело наглухо, то написано — не разобрать, то сказано «А», а про «Б» забыли, в общем решил сам наваять, такую важную на любом предприятии или месте где нужно надежно раздать инет на непонятное множество компутеров, статью.

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

Пользоваться, как понятно из преамбулы, будем естественно только штатными средствами, такими как: 1. демон NAT — natd; 2. Родной файервол — ipfw v.2 3. Самая надежная и непрожорливая до аппаратных ресурсов ОС — FreeBSD.

Версию ОС возьмем последнюю  9-ую, дабы актуальность статьи была самой длительной, хотя  все действия будут аналогичны хоть для 8, хоть для 7, хоть для 6.

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

1.

Первое, что необходимо, это установка ОС на что-нибудь аппаратное с двумя физическими сетевыми интерфейсами (сетевыми картами). Как это сделать, можно порыть здесь Установка FreeBSD 9.0 на зеркало Gmirror
и здесь Установка руками FreeBSD 8.

x на раздел/зеркало с ZFS. Можно также прогуглить яндекс.

2. Затем рекомендую обновить исходные коды ОС и портов до последних стабильных. Как, смотрим тут Обновление портов и исходников FreeBSD 8.x используя CSUP.

3. Крайне рекомендую пересобрать ядро ОС с включением файервола ipfw и других необходимых опций в него по умолчанию. Как енто сделать, можно подрыть тут Сборка ядра (Kernel), а также разные опции (OPTION) и устройства (device) ядра для FreeBSD 8 – *.

4. Непосредственно сконфигурировать ОС под работу демонов. Чем собственно и займемся дальше, об этом сейчас и начнется речь:

Раскрываем 4 пункт, при условии, что первые три уже выполнены и Вы находитесь в локальной консоли непосредственно за клавиатурой и монитором (рекомендованные пункты выполнять не обязательно, но очень рекомендовано для оптимизации потребления ресурсов):

1. подключить интернет к одному из сетевых интерфейсов выбранным Вами способом. Самый одеяльный вариант — это тупо статический адрес со всеми реквизитами для конфигурации сети. Но на практике обычно это либо pppoe, либо VPN pptp, l2tp.

В первом случае все можно просто и легко настроить через ppp-клиента (/etc/ppp/ppp.conf), во втором придется конкретно пошурупить мозгом и провайдером, чтобы поймать подключение, здесь можно воспользоваться например mpd5 (есть в портах).

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

2. Подключить локальную сеть  с явным пониманием какой сетью IP адресов Вы будете в ней пользоваться, какие статические локальные адреса кому назначены и т. п.

3. Конфигурим подключение по локальной сети и подключение к провайдеру инета.

Для того, чтобы это сделать, нужно определить соответствующие названия устройств сетевых карт и что к ним подключено. Это должно быть уяснено еще на этапе сборки ядра, там Вы должны были поубирать лишние драйвера сетевых карт. Просим вывод ifconfig и смотрим что у нас есть:

router# ifconfig rl0: flags=8843 metric 0 mtu 1500 options=3808 ether 00:50:22:39:5a:37 inet 0.0.0.0 netmask 0xffffff00 broadcast 0.0.0.0 media: Ethernet autoselect (100baseTX ) status: active rl1: flags=8843 metric 0 mtu 1500 options=3808 ether 00:0d:61:46:c7:b7 inet 0.0.0.0 netmask 0xffffff00 broadcast 0.0.0.0 media: Ethernet autoselect (100baseTX ) status: active plip0: flags=8810 metric 0 mtu 1500 lo0: flags=8049 metric 0 mtu 16384 options=3 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 nd6 options=3 ………………………….

В моем случае тут две сетевые карты rl0 и rl1, обе на довольно неплохом чипе Realtek 8139D по цене 150 рэ за штуку в базарный день. Чтобы понять, что куда подключено, нужно просто выдернуть из сетевой карты кабель, например локалки и повторно вывести эту команду. На одном из интерфейсов в строке status: будет значение «no carier» вместо «active».

У нас это вышло на интерфейсе rl1, следовательно локальная сеть подключена к этому интерфейсу, а провайдер к rl0. Крайне рекомендую на системнике сверху четко написать, например так rl0 — WAN, rl1 — LAN. На подходящих кабелях скотчем примотать бумажки с указанием: что это и откуда, например «WAN-inet 89.107.88.256/29 провайдер Имя провайдера».

Для внятности обсуждения нарисовал вот такую картинку

Далее назначаем rl1 необходимые реквизиты сети например ip 192.168.5.1 маску 255.255.255.0. Интерфейсу rl0 смотрящего в провайдера также назначаем выданные им ip и маску в случае обычного статического подключения по ethernet.

Если подключение идет через DSL модем, то тогда нужно сконфигурить ip адрес интерфейса rl0 на 192.168.1.2 например, а на модеме ip адрес LAN интерфейса назначить 192.168.1.1.

Для DSL это можно вообще не делать, но лучше сконфигурить, будет можно управлять модемом через его LAN порт без отключения с любого хоста в локальной сети по набору в брАузере http://192.168.1.1.

Конфигурирование ip адресов и масок интерфейсов лучше делать на постоянку через /etc/rc.conf

router# ee /etc/rc.conf #Ко всему прочему дописываем либо корректируем уже существующие строки hostname=”router.net.local” ifconfig_rl1=”inet 192.168.5.1 netmask 255.255.255.0″ # rl0 если чистая статика конфигурим на реквизиты выданные провайдером, если DSL или просто pppoe то, тогда как тут ifconfig_rl0=”inet 192.168.1.2 netmask 255.255.255.0″

Локальную сеть вроде бы отконфигурили, а вот с подключением к инету еще не все. Идем в файл /etc/resolv.conf, если его нет, создаем его и прописываем DNS сервера.

router# ee /etc/resolv.conf #Если есть DNS server внутри локальной сети, указываем его первым например у него адрес 192.168.5.2 nameserver 192.168.5.2 #DNS сервера выданные провайдером nameserver 212.16.193.34 nameserver 212.16.215.234

Теперь настройки разделятся для статичного чистого IP адреса и для подключения по pppoe.
Для чистой статики по ethernet в rc.conf указываем следующее

gateway_enable=”YES” # IP адрес шлюза, выданный провайдером defaultrouter=”89.107.88.хх”

При статичном подключении для получения инета на этой машине больше ничего настраивать не нужно, чего не скажешь про DSL или просто pppoe.
Для ppppoe конфигурим ppp-клиента. В /etc/rc.conf пишем:

gateway_enable=”YES” defaultroute_delay=”30″ ppp_enable=”YES” ppp_mode=”ddial” ppp_nat=”NO” ppp_profile=”provider”

Первая строка gateway_enable=»YES» говорит машине, что она теперь шлюз и должна работать базой по перевалке пакетов между вашими и нашими. defaultrouter=»89.107.88.хх» — добавляет в таблицу маршрутизации маршрут по умолчанию, аналог команды «route add net default 89.107.88.

хх», вместо default можно написать 0.0.0.0/0 — Это тоже самое. Значением этого параметра должен быть ip адрес, являющийся шлюзом в (локальной) сети провайдера. Выдается он вместе с другими реквизитами подключения, провайдером.

Во втором случае его нет, потому что ррр-клиент сам добавляет маршрут по умолчанию при создании сессии рррое. Строки начинающиеся на ррр_ конфигурят клиента ppp, т. е. как ему работать.

У клиента ррр есть свой NAT внутри него реализованный, но мы им пользоваться не будем, потому как хотим все через natd, поэтому отказываемся от него строкой ppp_nat=»NO».

При прогрузке машины, часто оказывается так, что сессия рррое не успела еще подняться и маршрут по умолчанию не прикрутился, а система уже во всю орет что дефолтного маршрута нету. Так вот чтобы она раньше времени не кипишила, есть в конфиге такая строка defaultroute_delay=»30″, которая дает 30-ти секундную задержку на появление дефолтного маршрута.

Таперича чешем настраивать поднятие клиента ррр в /etc/ppp/ppp.conf. Там собстна и наваяем куда создавать подключение по pppoe, какие имена пароли и прочие подобные параметры какие есть необходимость указать.

router# eet /etc/ppp/ppp.conf ################################################################# # PPP Configuration File # created by rudkovskij.pv # # $FreeBSD: src/etc/ppp/ppp.conf,v 1.11.2.2.2.1 2010/06/14 02:09:06 kensmith Exp $ ################################################################# default: set log Phase tun command set ifaddr 0.0.0.0/0 0.0.0.0/0 vtc: set device PPPoE:rl0 set authname ***LOGIN*************************** set authkey ****PASSWORD*********************** set dial set login disable ipv6cp enable lqr echo set reconnect 3 5 set redial 3 10 set lqrperiod 45 add default HISADDR

Подключения конфиг, абсолютно типичен для большинства провайдеров, за исключением механизма lqr.
Теперь нужно перегрузить маршруттер и посмотреть лог прогрузки в консоли, если есть ошибки — исправить.

router# shutdown -r now # или просто router# reboot

Если чего-то не пошло, можно почитать типичные проблемы с ррр тута.
Работает эта штука примерно так. На внешний(ие) DNS ip адрес(а) по времени указанному в lqr_period каждые 45 секунд посылается эхо запрос.

Ответ получен сидим и работаем ровно, если нет, подключение гасится (tun0 умирает) и подымается заново принудительно. До реализации такого вот механизма дергали постоянно, что инета нету, ныли, доставали. Но как только прикрутил lqr, сразу же перестали теребить постоянно, уже почти 4 года радуюсь =).

Будем надеяться, что инет на машине у Вас появился, проверить сей факт довольно просто.

Если ядро собрали с ipfw, то убедитесь, что есть разрешающие правила.

router# ipfw show 100 4983020 457392839 allow ip from any to any 65535 2955818 886049092 deny ip from any to any

Если файер пока не настроен, можно добавить одно правило для тестирования, разрешающее хождение любых пакетов куда заблагорассудится, для того чтоб файервол пока не мешал:

Источник: http://rudkovskij.com/articles/?p=473

Ссылка на основную публикацию