Роутер на Freebsd 10 для доступа в интернет
Дистрибутив фрюхи часто называют самым подходящим для решения прикладных сетевых задач в локальной сети. Сегодня мы займемся решением одной из сетевых задач — настройкой шлюза на Freebsd 10 для доступа в интернет из локалки. Это простой, популярный и востребованный функционал сервера, который можно расширять дополнительными возможностями.
Содержание:
Введение
Будем использовать следующую версию системы для решения нашей задачи по настройке шлюза:
1 2 |
# uname -v FreeBSD 10.2-RELEASE-p8 #0 r292756M: Sat Dec 26 22:49:34 MSK 2015 root@freebsd:/usr/obj/usr/src/sys/GENERIC |
Если вы еще не установили систему, то рекомендую мою статью с подробным описанием установки 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 я рассмотрел отдельно. Рекомендую ознакомиться с материалом. Здесь я не буду останавливаться на нюансах, а просто приведу команды, которые нам необходимы, без комментариев и подробных пояснений.
Любую настройку я предпочитаю начинать с обновления системы. Выполним его:
1 2 |
# freebsd-update fetch # freebsd-update install |
Теперь установим mc, я привык работать в нем:
1 |
# pkg install mc |
Включаем синхронизацию времени. Для этого добавляем в /etc/rc.conf
1 |
ntpd_enable="YES" |
И запускаем демон ntpd:
1 |
# service ntpd start |
Теперь проверим сетевые настройки. Первый сетевой интерфейс я настроил еще во время установки, поэтому доступ в интернет на сервере уже есть. Вот мой конфиг сети:
1 2 3 4 |
hostname="freebsd" ifconfig_hn0="SYNCDHCP" ifconfig_hn1="inet 10.20.30.1 netmask 255.255.255.0" defaultrouter="192.168.1.1" |
Не забываем добавить dns сервер в /etc/resolv.conf.
Настройка ipfw и ядерного nat на Freebsd 10
Для того, чтобы включить firewall и nat на будущем freebsd маршрутизаторе можно просто подгрузить необходимые модули ядра. Так сделать проще всего и быстрее, но есть нюанс. Как только вы загружаете модуль ipfw, вы теряете доступ к серверу. Если вы работаете не за консолью, а скорее всего это так, тем более если у вас вообще нет доступа к консоли сервера, то делать так не рекомендуется по понятным причинам. Поэтому мы поступим по-другому. Добавим необходимые опции в ядро, в том числе и опцию, которая делает по-умолчанию фаервол открытым, соберем новое ядро и установим его. Так мы не потеряем удаленный доступ к серверу.
Перед сборкой ядра обновим исходники системы. Я предпочитаю это делать через svn. Если он у вас не установлен, то установите:
1 |
# pkg install subversion |
Теперь обновляем исходники:
1 |
# svn checkout https://svn0.ru.freebsd.org/base/release/10.2.0 /usr/src |
Копируем стандартное ядро и добавляем туда новые строки:
1 |
# cp /usr/src/sys/amd64/conf/GENERIC /usr/src/sys/amd64/conf/GATE |
1 2 3 4 5 6 7 |
options IPFIREWALL # включаем ipfw options IPFIREWALL_DEFAULT_TO_ACCEPT # делаем по-умолчанию ipfw открытым options IPFIREWALL_VERBOSE # включение логирования ipfw options IPFIREWALL_VERBOSE_LIMIT=50 # ограничение на количество записей в лог от одного правила options IPDIVERT # для форварда пакетов options IPFIREWALL_NAT # для nat options LIBALIAS # просто надо, не помню зачем |
Собираем и устанавливаем новое ядро:
1 2 |
# cd /usr/src # make kernel -s -j4 KERNCONF=GATE |
Добавляем в файл /boot/loader.conf строку:
1 2 |
# mcedit /boot/loader.conf net.inet.ip.fw.one_pass=1 |
Перезагружаем сервер:
1 |
# reboot |
Добавляем в /etc/rc.conf следующие строки (комментарии уберите):
1 2 3 4 5 |
gateway_enable="YES" # разрешаем пересылку пакетов между сетевыми интерфейсами firewall_nat_enable="YES" # включаем ядерный nat firewall_nat_interface="hn0" # указываем внешний интерфейс для nat firewall_enable="YES" # включаем ipfw firewall_script="/usr/local/etc/ipfw/rc.firewall" # указываем путь, где будут лежать настройки ipfw |
Идем в указанную папку и создаем там файл для правил ipfw:
1 |
# mkdir /usr/local/etc/ipfw && touch /usr/local/etc/ipfw/rc.firewall |
Содержание этого конфига приведу в виде ссылки на скачивание уже готового файла с подробными комментариями. Думаю, вы без проблем разберетесь в настройках. Здесь не хочу на этом подробно останавливаться, все же тема настройки ipfw это отдельный разговор, у нас задача настроить роутер. Вот готовый набор правил — rc.firewall. Не забудьте указать свои интерфейсы и ip адреса. Если ошибетесь, потеряете доступ к серверу. Когда все настроите, отключите логирование. Там по-умолчанию стоит запись логов на правила nat и deny all.
Копируем скрипт безопасного редактирования правил и делаем его исполняемым:
1 2 |
# cp /usr/share/examples/ipfw/change_rules.sh /usr/local/etc/ipfw_change_rules # chmod 0700 /usr/local/etc/ipfw_change_rules |
Подробно о том, что это за скрипт и как он работает я рассказал в теме по настройке freebsd, ссылку на которую давал в начале. Активируем новые правила запуском скрипта:
1 |
# /usr/local/etc/ipfw_change_rules |
Откроется список правил в редакторе по-умолчанию. Там уже будут все правила. Можете еще раз их проверить и если все в порядке, сохраняете файл и выходите из редактора. В консоли вы увидите следующее:
Проверим примененные правила:
1 |
# ipfw show |
Если доступ к роутеру не потеряли, значит все в порядке. Можно перезагрузить сервер и все добавленные параметры в rc.conf активируются. Сделайте это и попробуйте на каком-нибудь компьютере в сети пропинговать адрес в интернете по ip, к примеру 8.8.8.8. Если пинги пройдут, значит все в порядке.
Поле того, как убедитесь, что ipfw настроен корректно, правила применятся и доступ к серверу есть, можете перевести его из открытого режима работы (последнее правило автоматически устанавливается allow all from any to any) в закрытый. Для этого в файл /boot/loader.conf добавьте строку и перезагрузите сервер:
1 |
net.inet.ip.fw.default_to_accept=0 |
На этом основная настройка шлюза на Freebsd 10 окончена. Клиенты смогут выходить в интернет. Но для удобства необходимо на шлюз установить и настроить dhcp и dns сервер, для обслуживания запросов пользователей. Иначе придется вручную забивать сетевые параметры и использовать сторонний dns сервер.
Установка и настройка dnsmasq
Для нашего роутера на freebsd подойдет любой dns и dhcp сервер. Можно использовать традиционные named и dhcp-server. Но для простоты и удобства, когда не нужен дополнительный функционал, я предпочитаю использовать простой и быстрый в настройке dnsmasq.
Устанавливаем dnsmasq на Freebsd шлюз:
1 |
# pkg install dnsmasq |
Приводим конфиг к следующему виду:
1 |
# mcedit /usr/local/etc/dnsmasq.conf |
1 2 3 4 5 |
domain-needed bogus-priv interface=hn1 resolv-file=/etc/resolv.conf dhcp-range=10.20.30.100,10.20.30.200,24h |
Добавляем в /etc/rc.conf:
1 |
dnsmasq_enable="YES" |
Запускаем программу:
1 |
# /usr/local/etc/rc.d/dnsmasq start |
Все, теперь наш шлюз полностью готов. Настраиваем на клиентах получение настроек по dhcp и проверяем работу интернета.
Информацию о выданных leases dhcp сервера dnsmasq можно посмотреть в файле /var/db/dnsmasq.leases.
Анализ сетевой активности в freebsd с помощью iftop
Иногда хочется посмотреть, что происходит на роутере и кто использует интернет в данный момент. По-умолчанию, в системе нет готового средства для получения этой информации. На помощь нам придет простая программа iftop, которая позволяет в режиме реального времени посмотреть активность на сетевом интерфейсе.
Устанавливаем iftop на настроенный Freebsd шлюз:
1 |
# pkg install iftop |
Запускаем iftop с указанием интерфейса и отображением используемых портов:
1 |
# iftop -i hn1 -P |
Видим любопытную картину — кто, куда, по какому порту и с какой скоростью лезет.
Я для примера на одном из компьютеров запустил генератор трафика интернета. Он занял почти весь канал и это стало отлично видно на роутере с помощью iftop. Конечно, эта простая утилита не решает всех вопросов по мониторингу сетевой активности, но для представления текущей картины подходит, если вам не нужно что-то большее.
Заключение
Подведем итог того, что сделали. За короткое время настроили полноценный шлюз (по сути программный роутер) на базе Freebsd 10 для обеспечения выхода в интернет клиентов за сервером. При этом обеспечили автоматическое получение настроек. Даже на скромном виртуальном сервере такой шлюз способен переварить достаточно большой траффик.
Вся настройка занимает буквально 10-15 минут. Основное время уходит на сборку ядра. Чем выше версия Freebsd, тем дольше оно собирается, несмотря на то, что скорости железа существенно возрастают.
Пройдемся по пунктам и разберемся с тем, что конкретно мы сделали:
- Подготовили сервер к настройке шлюза.
- Пересобрали ядро с необходимыми параметрами.
- Настроили ipfw и nat, включили маршрутизацию.
- Установили и настроили dnsmasq для раздачи сетевых настроек по dhcp и dns сервера.
- Установили iftop для простейшего анализа сетевой активности на внешнем интерфейсе.
Этого достаточно для полноценной работы шлюза на Freebsd 10. Если есть необходимость подсчета пользовательского траффика или ограничения доступа к определенным ресурсам, можно настроить прокси сервер squid и sams2 к нему.
Помогла статья? Есть возможность отблагодарить автора
не мне – на исходный адрес перейдите
Дополнительные материалы по Freebsd
Рекомендую полезные материалы по Freebsd: |
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.
|
статье лет 10, сейчас на основе этой операционки сделали pfsense – программный впн с маршрутизатором . Скачать pfsense – надо найти (в гугле например ) телефон мобильный любого студента из Нью Йорка, это есть такой город – новый амстердам. Написать ему в вотцап – помоги дружище, дай код из смски. Подключаю firewall и сброшу тебе десятку долларов, давай адрес Монеро.
С полученым дистрибутивом – надо купить на рынке системник, у кого нет – и поставить его туда, через флешку. Вторая – ответная часть – может находиться, например, в Лондоне или Нью Йорке, а лучше в Амстердаме. Там наших немало. В результате – комп стоит в Киеве, а лучше в Москве, а адрес интернета показывает Американский ну или Голландский. Небольшой квест, восстановить только документ Яна Байера из Айндховена, и забрать из ячейки слитки золота Буров – за волонтерство в Южной африке. Надо только сумку на 32 кило. * События реальные, не со мной конечно, 1989 год, фамилия совпадающая но не точная, интернет уже начинался, как раз Голландия, впн конечно не было, делалось без него.
как можно торенты по скорости ограничить при такой настройке?
к моему коменту выше, поподробнее настройки фаерволла, поглядеть решения по ограничению скорости.
komron
Привет! Братан Я тебя очень благодарен за то, что ты мужик. За то что ты приведешь в статье это РЕАЛЬНО есть и когда делаю у меня получается. Я тебя уважаю.
Советую всем новичкам, что это актуальная статья.
Но я как новичок кое чье не понял или понял карочи сам не знаю ?
1) Что такое проброс портов, кстати когда я его убрал из ipfw после перезагрузки сервера клиент не смог подключиться к интернету. Было бы хорошо, если автор посоветовал меня кое чье.
2) У меня клиенты выходят в Интернет, но не пингуют например, 8.8.8.8 или ya.ru почему ???
Я использую FreBSD 11
ядро была собрано и поднято вот из этой статьи http://mediaunix.com/prostoj-sposob-razdachi-interneta-v-seti/
Вот листинг
#!/bin/sh
#### Переменные ####
wan=»re0″
wan_ip=»192.168.0.224″
lan=»rl0″
lan_ip=»192.168.1.1″
cmd=»ipfw -q»
#### Правила ####
$cmd -f flush
# Разрешаем весь траффик по внутреннему интерфейсу
$cmd add 100 allow ip from any to any via lo0
# Запрещаем доступ из вне к нутреннему интерфейсу
$cmd add 200 deny ip from any to 127.0.0.0/8
$cmd add 300 deny ip from 127.0.0.0/8 to any
# Разрешаем подключение по ssh
$cmd add 400 allow tcp from any to $wan_ip 22 in via $wan
$cmd add 410 allow tcp from $wan_ip 22 to any out via $wan established
# Разрешаем DNS запросы
$cmd add 500 allow udp from any to $wan_ip 53 in via $wan
$cmd add 510 allow udp from $wan_ip 53 to any out via $wan established
# Разрешаем UDP (для синхронизации времени — 123 порт)
$cmd add 600 allow udp from any to $wan_ip 123 in via $wan
$cmd add 610 allow udp from $wan_ip 123 to any out via $wan established
# Разрешаем ftp снаружи (если необходимо)
#$cmd add 700 allow tcp from any to $wan_ip 20,21 in via $wan
#$cmd add 710 allow tcp from $wan_ip 20,21 to any out via $wan established
#$cmd add 720 allow tcp from any to $wan_ip 49000-55000 in via $wan
# Разрешаем некоторые типы ICMP траффика — эхо-запрос, эхо-ответ и время жизни пакета истекло
$cmd add 800 allow icmp from any to any icmptypes 0,8,11
# Разрешаем все соединения на локальном интерфейсе
$cmd add 900 allow all from any to any via $lan
# Пример проброса портов 3389 и 80 в локальную сеть на два разных компьютера
$cmd nat 1 config log if $wan reset same_ports deny_in redirect_port tcp 192.168.1.2:3389 3389 redirect_port tcp 192.168.1.2:80 80
# Включаем NAT
$cmd add 1000 nat 1 log ip from any to any via $wan
# Запрещаем все, что не разрешено
$cmd add 65534 deny log all from any to any
Прикольная игра
Популярное
Как расшифровать файл с расширением vault после вируса шифровальщика
12.08.2015 249,890
CentOS 7 настройка сервера
20.12.2015 125,727
Как настроить микротик routerboard RB951G-2HnD
20.12.2015 100,320
Сетевые настройки в CentOS 7
23.08.2015 94,963
Mikrotik настройка простого Firewall
28.02.2015 63,720
Рубрики