Настройка шлюза на freebsd 11. Настройка маршрутизатора под управлением системы FreeBSD
Не так давно нужно было поставить гейт в Интернет для одного интернет-кафе. Кафе имело доступ к Интернету через ADSL-модем с Ethernet интерфейсом и локалку на 50 компьютеров со статическими адресами. Решено было поставить именно шлюз, а не купить обычной роутер с NAT, так как в роутерах все равно крутится урезанный линукс, а шлюз на базе ПК имел гораздо больше возможностей. К тому с таким количеством компьютеров использование прокси-сервера для кеширования веб-страниц давало определенную экономию траффика. Машинка имела параметры уровня Pentium2-600 с 256 Mb оперативной памяти. Вариант установки оффтописка отпадал из-за слабых мощностей и ненадежности и отсутствия гибкости. К тому же FreeBSD идеально подходит для гейтов в силу малой требовательности ресурсов и надежности работы. Насколько мне известно по хоум-провайдингу, гейты на FreeBSD могут спокойно натить полосу до 500-600 mbit/sec
Итак, дано - установить FreeBSD на компьютер, настроить NAT, настроить прозрачный прокси.
Не буду утомлять читателей описанием установки, благо это подробно описано и иллюстрировано в .
После установки я , включив в него дополнительные опции, а именно
options IPFIREWALL #добавил поддержку файрволла
options IPFIREWALL_VERBOSE #логгирование
options IPFIREWALL_VERBOSE_LIMIT=100 #органичение количества записей в лог
options IPFIREWALL_DEFAULT_TO_ACCEPT #файерволл "открыт" по умолчанию
options IPFIREWALL_FORWARD
options IPDIVERT #включение поддержки перенаправления пакетов
options DUMMYNET #может понадобится для ограничения скорости
После пересборки ядра настала очередь правки /etc/rc.conf для включения NAT. NAT будет использовать в виде отдельного демона. У меня на шлюзе стояло 2 сетевые карточки, одна смотрела в интернет через модем (настроенный в режиме моста), вторая в локальную сеть.
Соотвественно, первая была re0 и имела адрес вида 213.230.x.x, вторая rl0 - адрес 192.168.0.1
Правим /etc/rc.conf
defaultrouter=213.230.x.x #указываем основной шлюз
ifconfig_re0="inet 213.230.x.x netmask 255.255.255.252" #задаем внешний интернетовский адрес
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0" #задаем внутренний адрес
gateway_enable="YES" #зайдествуем режим шлюза
natd_enable="YES" #включем NAT
nat_interface="re0" #указываем натируемый интерфейс
nat_flags="-f /etc/natd.conf" #файл настройки демона NAT
firewall_enable="YES"
nameserver 195.158.0.1
nameserver 195.158.0.3
После сохранения и перезагрузки (это не обязательно, можно поднять интерфейсы и демон не перезагружая, но проверить как что поднимается все же нужно), проверяем доступность в обоих сетках, пропинговав локальные машины и хосты в интернете.
Уже на данном этапе интернет доступен локальным компьютерам, единственное что нужно дополнительно настроить на них, так это указать на них шлюз по умолчанию 192.168.0.1 и в строке DNS-сервера также прописать 192.168.0.1
Пришла очередь поставить squid. Для начала обновляем .
После успешного обновления переходим собственно к установке.
#cd /usr/ports/www/squid31/
#make install clean
После окончания установки идем править файл настройки squid, находящегося по адресу /usr/local/etc/squid/squid.conf
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#Здесь указываются подсетки, которые имеют доступ к нашей проксе, у нас подсетка 192.168.0.0, потому оставляем только ее
#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/24 # Указываем сеть 192.168.0.1-254
#IPv6 Not Available:acl localnet src fc00::/7 # RFC 4193 local private network range
#IPv6 Not Available:acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # https
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # httpss
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # https-mgmt
acl Safe_ports port 488 # gss-https
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling https
acl CONNECT method CONNECT
#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
https_access allow manager localhost
https_access deny manager
# Deny requests to certain unsafe ports
https_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
https_access deny CONNECT !SSL_ports
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#https_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
https_access allow localnet
https_access allow localhost
# And finally deny all other access to this proxy
https_access deny all
# Squid normally listens to port 3128 - Порт, на котором будет висеть прокси
https_port 127.0.0.1:3128 intercept #transparent для версий ниже 3.1
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/squid/cache 500 16 256
cache_mem 256 MB
# Leave coredumps in the first cache dir
coredump_dir /var/squid/cache
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320
#/usr/local/sbin/squid -z
Стартуем его
#/usr/local/etc/rc.d/squid -start
Если Squid успешно запустился - открываем любой бразуер, указываем нашу проксю вида 192.168.0.1:3128 и пробуем открыть например тот же google.com.
Открылся? Замечательно, вписываем в /etc/rc.conf
squid_enable="YES"
И делаем его прозрачным, добавив правило в файрволл.
ipfw add fwd 192.168.0.1,3128 tcp from 192.168.0.0/24 to any 80
После этого, на клиентском компьютере убираем прокси с браузера и пробуем открыть другую страницу. Паралелльно можно смотреть файл /var/log/squid/access.log, в котором фиксируются обращения к прокси. Если все работает, в логи появляются записи - поздравляю. Теперь все веб-запросы от клиентских компьютеров будут прозрачно кешироваться, экономя вам траффик.
На этом первоначальная настройка гейта завершена.
UPD. Иногда нужно раздавать интернет не всем в локальной сети, а некоторым пользователям. Тогда можно прикрутить к сквиду авторизацию. Это делается путем добавления в конфиг
auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/internet_users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl squidusers proxy_auth REQUIRED
# htpasswd -c /etc/squid/internet_users synergix
New password: *******
Re-type new password: *******
Adding password for user synergix
Ключ -с необходимо указывать только один раз, при создании файла с паролями. В последующем добавлять пользователей нужно без этого ключа. Итак, мы получили файл с примерно таким содержимым.
synergix:89XzEEI/P0e56
Где synergix - имя пользователя, а 89XzEEI/P0e56 - хеш его пароля. Для добавления нового пользователя в существующий файл необходимо выполнить следующую команду
# htpasswd -b /etc/squid/internet_users second_user 1234567
Adding password for user second_user
Посмотрим -
# cat /etc/squid/internet_users
syenrgix:89XzEEI/P0e56
second_user:EAJezc5eLXrV2
Выставим права для файла
# chmod 440 /usr/local/etc/squid/internet_users
# chown squid:squid /usr/local/etc/squid/internet_users
#/usr/local/etc/rc.d/squid reload
В связи с появившимся в обилии свободным временем могу подтянуть все свои стародавние статейки относительно различных фрёвых сервисов, которые уже лет 6-7 валялись у меня на диске в ожидании когда же до них наконец то дойдут руки, и вот потихоньку это время настало.
Так что не боясь предстать капитаном очевидность в этот раз я распишу как организовать программный маршрутизатор средствами FreeBSD. И хотя писалось все это еще под 4.2, но тем не менее и под 7.4 все эти же рецепты применимы, разве только с той разницей, что все пакеты отличаются версиями с большую сторону. Сказать откровенно, я предпочитаю программные маршрутизаторы за их дешевизну, простоту и быстроту в настройке, поскольку для программного маршрутизатора сгодится любая древняя машинка, главное чтобы в ней была возможность поставить дополнительные сетевухи. При этом программный маршрутизатор отличается от аппаратных аналогов тем, что произведя один раз настройку маршрутизатора вы следующий настроите уже за полчаса, а не будите копаться в мануалах нового для вас агрегата, купленного клиентом с оказией, не понимая почему це фича вдруг оказалась багой. К тому же вменяемый аппаратный маршрутизатор стоит не малых денег и вполне сопоставим по стоимости с хорошим компом, который помимо того что будет с сотни раз мощнее, также при этом сможет, естественно при желании, стать принт-сервером, фаерволом, проксей, поточным антивирем и еще чем угодно, и что самое основное- это решение маштабируемое, то есть добавление нового интерфейса сопряжено с гораздо меньшими затратами, нежели при попытке расширения аппаратного маршрутизатора, главное подобрать материнку с 2-3 слотами под сетевуху, ибо найти две интегрированные не проблема. И естественно формула скорость работы/цена для программного маршрутизатора будет на порядки ниже аппаратного, так как стоимость гигабитного маршрутизатора уже будет сопоставима с покупкой мощного сервера для офиса. Ну это просто вода относительно того за что я люблю программные рутеры, а теперь собственно перейдем к самой настройке маршрутизатора.
Для начала устанавливаем систему FreeBSD 7.4 и настраиваем её в соответствии с нашими требованиями, то есть можно настроить как если она торчит в инет, или служит для защиты серверной фермы от локалки; ну а ленивцы могут ограничиться просто установкой нужных пакетов, если она будет служить просто для маршрутизации пакетов между сетями внутренней сети предприятия.
Собственно для начала имеем две сетки: 192.168.0.0/24 (основная) и 192.168.10.0/24 (дополнительная) которые нам и надо совокупить посредством нашего настроенного сервера FreeBSD, в который мы же загодя воткнули две-три-четыре и более сетевых карт (максимум который у меня прекрасно существовал было 5 сопряженных сетей, не считая вирутальных интерфейсов). Предположим что для сетевых интерфейсов мы выбрали IP адреса: 192.168.0.1 и 192.168.10.1
Смотрим что за интернерфейсы установлены в системе:
# ifconfig
тут нам главное понять какой интерфейс какой, для чего не плохо было бы ознакомиться с чипами карт. Порядок интерфейсов обычно идет от проца к периферии, а у дополнительных интерфейсов в зависимости от нумерации слотов, возрастая от видюхи. Но проверить все это можно эмперическим путем просто воткнув рабочий кабель в систему, посе чего интерфейс перейдет из статуса status: no carrier в status: active. Предположим у нас в системе два интерфейса rl0 и rl1.
Поняв какие интерфейсы будем сопрягать, идем в /etc/rc.conf и добавляем необходимый интерфейс, так как там уже должен присуствовать один из интерфейсов, если в процессе настройки системы FreeBSD мы поднимали сетку.
##### /etc/rc.conf #####
ifconfig_rl0=”inet 192.168.0.1 netmask 255.255.255.0″
ifconfig_rl1=”inet 192.168.10.1 netmask 255.255.255.0″
#####################
Чтобы поднять теперь интерфейс, выполним
# /etc/netstart
Второй интерфейс rl1 ожил и теперь пингуется из подсети 192.168.10.1, но для того чтобы сервер настроить как маршрутизатор необходимо в ядре разрешить пересылку пакетов между пакетами, за что отвечает парметр net.inet.ip.forwarding. Его значение в системе в данный момент:
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
где значение 0 означает что маршрутизация запрещена, поэтому для включения функционала маршрутизации, нам необходимо присвоить этому значению 1, для чего выполняем:
# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1
Теперь настройка маршрутизации завершена и маршрутизатор будет фурычить до перезагрузки системы, после чего значение net.inet.ip.forwarding переключится обратно в 0. Для того чтобы избежать этого добавляем в файл /etc/rc.conf следующую строку:
gateway_enable=”YES”
после чего уже безбоязненно можем перегрузить машину.
При такой схеме наш маршрутизатор будет рутить только сопряженные с ним сети, представленные интерфейсами, или же алиасами на интерфейсах, в том же случае когда у нас в сети уже существуют маршрутизаторы, прикрывающие еще какие то сети, то тогда поднимаем на нашей машине статическую таблицу маршрутизации. Делается это также в файле /etc/rc.conf
##### /etc/rc.conf #####
route_network1=”-net 10.10.15.0/24 192.168.0.25″
route_network2=”-net 172.168.10.0/24 192.168.0.25″
route_network3=”-net 192.168.168.0/24 192.168.10.111″
#####################
то есть мы задаем названия маршрутов, которые дальше выводим в виде сетки, и внешнего, для нашего маршрутизатора, интерфейса шлюза.
Также в случае использовании настроенного сервера FreeBSD в качестве внутреннего маршрутизатора, необходимо на внешнем шлюзе, заданном для рабочих станций и серверов сети дефолтным маршрутом, поднять маршрутизацию на внутреннюю сеть задав маршрут в 192.168.10.0, через 192.168.0.1. На самом деле тут обычно и возникает самый косячный момент, особенно в случае использования интернет шлюзом аппаратных фаерволов типо D-Link, у которых вроде функционал рутинга имеется, но чтобы настроить удаленный маршрут надо долго и упорно танцевать с бубном, так что гораздо проще для нашего уже настроенного маршрутизатора задать дефолтовым маршрутом интернет-шлюз, а все машины предприятия завернуть на него- это добавит лишний хоп, но уберет проблему настройки маршрутизации на сторонних серверах.
Отзывов: 11 на «Как настроить машрутизатор средствами FreeBSD»
Пожалуйста объясните мне по подробней вот эти строки:
static_routes=”network1 network2 network3″
route_network1=”-net 10.10.15.0/24 192.168.0.25″
route_network2=”-net 172.168.10.0/24 192.168.0.25″
route_network3=”-net 192.168.168.0/24 192.168.10.111″
Что куда и как заворачивается, просто я во FreeBSD новичек и немного не в курсе… Заранее благодарю!
P.S.: Я так понимаю что 192.168.0.25, 192.168.10.111 – адреса свичей, или компьютеров соединяющих подсети одной локальной сети!? А адрес карточки на маршрутизаторе значение имеет????
anchous Reply:
June 27th, 2011 at 6:54 pm
Эти IP адреса (192.168.0.25, 192.168.10.111) адреса сетевых интерфейсов других, имеющихся в сети маршрутизаторов, которые смотрят в сопряженные с вашим рутером сетки.
То есть 0.25 смотрит в сеть 192.168.0.0/24, а 192.168.10.111 в сеть 192.168.10.0/24
Добрый день! Недавно начал изучение FreeBSD и столкнулся со следующей проблемой(простейший пример маршрутизации описанный вами выше):
FreeBSD-сервер НЕ ВЫПОЛНЯЕТ МАРШРУТИЗАЦИЮ из одной сети в другую!
1. Свежеустановленная FreeBSD 9.0
2. Две сетевые карты em0 em1
3. IP-адреса маски, шлюз по умолчанию, опция gateway_enable, net.inet.ip.forwarding прописаны верно!
4. Ping с сервера в сеть №1 и в сеть №2 идет!
5. Ping с компьютеров на em0 и em1 тоже идет!
А ВОТ PING МЕЖДУ КОМЬЮТЕРАМИ ИЗ СЕТИ №1 и №2 не идет!!! В ЧЕМ МОЖЕТ БЫТЬ БЕДА???
anchous Reply:
August 9th, 2012 at 5:58 pm
приветствую.
судя по вашей ситуации у вас проблема с настройками маршрутизации внутри сети, то есть для какой то сети не корректно прописан дефолтный шлюз и пакеты уходят в молоко, по этой причине у вас пингуют интерфейсы рутера и не далее.
Попробуйте дать трейс и поймете куда уходят пакеты.
Огромное спасибо за отклик. Tracert к сожалению помочь мне ничем не может. Вот более подробное описание:
- сеть №1 em0 (192.168.1.0/24) в ней PC Win7 (192.168.1.5/24 default gateway 192.168.1.60)
Сеть №2 em1 (192.168.0.0/24) в ней internet-router (192.168.0.1/24), *так же есть и другие компы… которые через этот шлюз выходят в интернет*.
Freebsd 9.0
——- rc.conf———–:
hostname=”FreeBSD1″
defaultrouter=”192.168.0.1″
gateway_enable=”YES”
ifconfig_em0=” inet 192.168.1.60 netmask 255.255.255.0″
ifconfig_em1=” inet 192.168.0.60 netmask 255.255.255.0″
sshd_enable=”YES”
moused_enable=”YES”
dumpdev=”NO”
——- ifconfig ———–:
em0: flags=8843 metric 0 mtu 1500
options=9b
ether 00:0c:29:df:f3:00
inet 192.168.1.60 netmask 0xffffff00 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fedf:f300%em0 prefixlen 64 scopeid 0×2
nd6 options=29
status: active
em1: flags=8843 metric 0 mtu 1500
options=9b
ether 00:0c:29:df:f3:0a
inet 192.168.0.60 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::20c:29ff:fedf:f30a%em1 prefixlen 64 scopeid 0×3
nd6 options=29
media: Ethernet autoselect (1000baseT)
status: active
——–netstat -rn: ———–
Destination Gateway Flags Refs Use Netif Expire
default 192.168.0.1 UGS 0 0 em1
127.0.0.1 link#7 UH 0 0 lo0
192.168.0.0/24 link#3 U 0 325 em1
192.168.0.60 link#3 UHS 0 0 lo0
192.168.1.0/24 link#2 U 0 22 em0
192.168.1.60 link#2 UHS 0 0 lo0
——————————-
net.inet.ip.forwarding: 1
——————————-
ПИНГ С FREEBSD
ping 192.168.0.1 – OK
ping 192.168.1.5 – OK
——————————-
ПИНГ с WIN7 (192.168.1.5)
ping 192.168.1.60 – OK
ping 192.168.0.60 – OK
ping 192.168.0.1 – FCUK!!! – в смысле НЕТУ!
——————————-
ПИНГ с компов из сети 192.168.0.0 на комп 192.168.1.5 тоже не проходит. (шлюз для компов из этой сети менял на 192.168.0.60)
——————————-
Можно что-то посоветовать?
anchous Reply:
August 10th, 2012 at 2:30 pm
трейс как раз вам и должен был бы помочь, ибо точно бы диагностировал куда идет пакет и где происходит затыка, так как судя по вашей схеме, могу предположить что для машин подсети 192.168.0.0/24 дефолтным шлюзом стоит 192.168.0.1, на котором не прописан маршрут в подсеть 192.168.1.0
Из другой сети так же!!!
Что делать???
anchous Reply:
August 10th, 2012 at 6:13 pm
с 9кой не работал, но вроде в ней никаких кардинальных изменений не было, так что все должно рвботать, посему проверяйте синтаксис файлов, маски, и могу посоветовать только шаманить: добавить на дефолтный рутер маршрут в подсеть; убрать со шлюза дефолтный маршрут- посмотреть без него; сменить адресацию второй подсети где один компутер на какую нить вроде 172.16.0.0, отрубить-врубить шлюзование
Добрый день. Не могли бы помочь.
Сервер одним концом смотрит в 10.114.172.0/24, а другим в 10.114.173.0/24.
———
em0: inet 10.114.172.50 netmask 255.255.255.0
em1: inet 10.114.173.1 netmask 255.255.255.0
IPFW:
————-
cmd=”ipfw -q add”
oif=”em0″
iif=”em1″
oip=”10.114.172.50″
iip=”10.114.173.1″
MyLan=”10.114.173.0/24″
Lan1=”10.114.172.0/24″
Lan2=”10.114.171.0/24″
#netmask=”24″
#netin=”10.114.173.0″
ipfw -q -f flush
$cmd allow ip from $MyLan to $MyLan via $iif
$cmd allow ip from $Lan1 to $MyLan
$cmd allow ip from $MyLan to $Lan1
$cmd fwd 127.0.0.1,3128 tcp from $MyLan to not me 80 in recv $iif
$cmd allow ip from $oip to any out via $oif
$cmd allow ip from any to $oip in via $oif
$cmd allow ip from $MyLan to any in via $iif
$cmd allow ip from $MyLan to any out via $oif
$cmd allow ip from any to $MyLan in via $oif
$cmd allow ip from any to $MyLan out via $iif
————–
С компьютера 10.114.172.35 ping идет в другую сеть, а с 10.114.173.20 теряется на сервере. В чем может быть проблема?
anchous Reply:
October 13th, 2012 at 12:28 pm
приветствую.
попробуйте из сетки пингануть оба интерфейса шлюза, а также трейс- с большой вероятностью проблема в дефолтных маршрутах на конечных хостах, по которым пакеты уходят куда то не туда.
У тебя есть своя собственная локальная сеть,
ты решил, что тебе пора ее подключать к Интернету по выделенной лини. Ну, что же дело хорошее, сегодня я постараюсь тебе
помочь немного с этим 🙂 Начнем с установки 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 #Данную опцию тоже следует включить
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 #Запрещаем вход пользователей с пустым паролем
После того как разобрались, преступим к файрволу...
В этой статье мы рассмотрим сетевые интерфейсы в FreeBSD 11.1 , покажем настройку сети через файл конфигурации /etc/rc.conf , а именно назначение статических настроек и получение их по DHCP. Пропишем адреса DNS -серверов, настроем hosts и рассмотрим указание временных настроек сети .
Просмотр сетевых интерфейсов.
Для начала проясним: Есть два состояния сетевой карты UP (задействована) и DOWN (не задействована).
Первым делом стоит посмотреть наши сетевые интерфейсы, смотреть будем командой ifconfig .(Рис.1) Вывод команды показывает все интерфейсы UP и DOWN.
Ifconfig
ifconfig -a покажет вам тоже самое.
Ifconfig -a
Вот тут есть некоторые отличия от ifconfig в Ubuntu server .(в Ubuntu server "ifconfig" показывает только интерфейсы UP , "ifconfig -a" показывает все интерфейсы и UP и DOWN )
Рис.1 - Результат ввода команды ifconfig.
И так что же мы видим:
- em0 - наша сетевая карта, с IP адресом 192.168.3.11 .
- em1 - вторая сетевая карта, не настроенная.
- lo - локальная петля, она у всех присутствует по умолчанию.
Для того чтобы посмотреть интерфейсы только UP , используется команда ifconfig -u (Рис.2):
Ifconfig -u
а для просмотра интерфейсов только DOWN , используется команда ifconfig -d (Рис.3):
Ifconfig -d
Рис.2 - Результат ввода команды ifconfig -u.
Рис.3 - Результат ввода команды ifconfig -d.
В дальнейшем я буду показывать примеры настройки на интерфейсе "em0" .
Для включения интерфейса используется команда ifconfig "НАЗВАНИЕ-ИНТЕРФЕЙСА " up.
Ifconfig em0 up
Для выключения интерфейса используется команда ifconfig "НАЗВАНИЕ-ИНТЕРФЕЙСА " down.
Ifconfig em0 down
"Поиграйтесь" с интерфейсом, если вы конечно же не подключены по ssh , и оставьте его в состоянии UP .
Настройка сети через файл конфигурации.
Для настройки статического или динамического IP адреса нам надо отредактировать файл конфигурации сетевых интерфейсов - /etc/rc.conf мы будем редактировать его с помощью текстового редактора vi .(Рис.4) Сразу скажу, для того чтобы редактировать в vi нужно нажать букву "i" , а чтобы сохранить и закрыть документ надо нажать "Esc" ввести ":wq!" и нажать "Enter" .
Рис.4 - vi /etc/rc.conf.Получение настроек сети по DHCP.
Чтобы назначить получение настроек по DHCP, нужно вписать(или изменить существующую) строчку в файл /etc/rc.conf .(Рис.5)
ifconfig_ НАЗВАНИЕ-ИНТЕРФЕЙСА ="DHCP"
Ifconfig_em0="DHCP"
Рис.5 - Получение сетевых настроек по DHCP.
Перезапускаем сетевую службу netif .(Рис.6)
/etc/rc.d/netif restart Рис.6 - Перезапуск сетевой службы FreeBSD.
Смотрим активные сетевые интерфейсы, видим, полученный по DHCP, IP адрес интерфейса em0 - 192.168.3.6 (Рис.7)
Ifconfig -u
Ping 8.8.8.8
Рис.7 - Проверка активных интерфейсов и доступа к сети.
Пинги идут. Всё отлично!
Указание настроек сети вручную.
Чтобы назначить статичный адрес для нашей Freebsd нужно в файл /etc/rc.conf вписать две строки(Рис.8)
ifconfig_ НАЗВАНИЕ-ИНТЕРФЕЙСА ="inet IP-АДРЕС-FREEBSD netmask МАСКА-СЕТИ "
defaultrouter=" IP-АДРЕС-ШЛЮЗА "
Ifconfig_em0="inet 192.168.3.11 netmask 255.255.255.0"
defaultrouter="192.168.3.1"
Рис.8 - Статичные настройки сетевого интерфейса.
Перезапускаем сетевую службу.
/etc/rc.d/netif restart
Проверяем активные интерфейсы
Ifconfig -u
Проверяем выход в интернет пингуем гугловские восьмёрки.
Ping 8.8.8.8
Настройка DNS.
IP адреса DNS серверов хранятся в файле /etc/resolv.conf (Рис.9)
Открываем resolv.conf в редакторе vi .
Vi /etc/resolv.conf
Вписываем IP адрес DNS сервера. (Можно указать сколько угодно адресов.)
Nameserver 192.168.3.1 nameserver 8.8.8.8 nameserver 8.8.4.4
Если у вас нет файла resolv.conf то создайте его в каталоге /etc
Touch /etc/resolv.conf
Рис.9 - Содержимое файла resolv.conf.
Файл /etc/hosts.
Файл /etc/hosts содержит таблицы сопоставления DNS имен с IP адресами. В первую очередь ваш сервер будет обращаться к файлу hosts , а потом уже к DNS-серверу.
Лично для себя я отметил полезным внести в hosts запись этого freebsd (IP адрес локальной сети - имя сервера). Теперь мы можем во всех конфигурационных файлах указывать DNS имя, а не IP адрес, а в случае необходимости за кротчайшее время изменить свой IP адрес поправив hosts и настройки интерфейса в /etc/rc.conf .
Это просто для примера вам этого делать не обязательно .
Приступаю к редактированию(Рис.10):
Vi /etc/hosts
Вписываю:
192.168.3.11 freebsd.itdeer.loc Рис.10 - Содержимое файла hosts.
Проверю попинговав имена из hosts .(Рис.11)
Ping localhost
ping freebsd.itdeer.loc
Рис.11 - Пингуем имена из hosts.
Временное назначение ip адреса.
Честно говоря я не знаю для чего может пригодиться временное назначение сетевых настроек. Разве что допустим у вас какой-нибудь сервер который предназначен только для вашей локальной сети и вы вдруг решили быстренько обновить ПО через интернет на этом сервере, чтобы не ходить к шлюзу не раздавать интернет на нужный IP адрес итд. Вы можете обойтись парой команд.
Например, мы знаем что на 192.168.3.109 точно есть доступ в интернет, назначаем этот IP адрес нашему интерфейсу, так же нужно указать маску сети(Рис.12):
Ifconfig em0 192.168.3.109 netmask 255.255.255.0
или командой с короткой записью маски сети.
Ifconfig em0 192.168.3.109/24
Рис.12 - Указание временных настроек для сетевого интерфейса em0.
Интернет может не появиться, так как не указан шлюз по умолчанию. Прописываем его и пингуем гугловкие восьмёрки.(Рис.13)
Route add default 192.168.3.1
ping 8.8.8.8
Рис.13 - Указываем шлюз по умолчанию. Проверяем ping.
Правильно ли мы прописали наш шлюз по умолчанию можно посмотреть в таблице маршрутизации. Она выводится с помощью команды "netstat -rn" , Шлюз по умолчанию будет обозначен флагом UG .(Рис.14)
Netstat -rn
Рис.14 - Вывод таблицы маршрутизации.
Если вы где-то ошиблись в написании или у вас указан другой шлюз, то можно удалить шлюз по умолчанию .
Route del default
На этом временная настройка закончена, помните что после перезагрузки сервера или отдельно службы networking , все временные настройки исчезнут.
Добавляем маршрут в сеть 192.168.0.0/16 (Маска 255.255.0.0) через основной шлюз(gateway) 192.168.3.1/24
Route add 192.168.0.0/16 192.168.3.1
Вариант добавления маршрута с указанием полной маски.
Route add -net 192.168.0.0 -netmask 255.255.0.0 192.168.3.1
Переименовываем интерфейс em0 в wan0.
Для удобства некоторые админы переименовывают интерфейсы, чтобы сразу видеть для чего предназначен интерфейс. Допустим у нас шлюз с двумя сетевыми интерфейсами em0 (интернет) и em1 (локальная сеть) и работать с такими названиями неудобно, так как имея большое количество интерфейсов можно запутаться. Гораздо удобнее работать с интерфейсами wan0 и lan1 .
Мы покажем пример переименования интерфейса em0 в wan0 в файле /etc/rc.conf .(Рис.15)
Ifconfig_em0="inet 192.168.3.11 netmask 255.255.255.0"
Заменяем двумя строками:
Ifconfig_em0
_name="wan0
"
ifconfig_wan0
="inet 192.168.3.11 netmask 255.255.255.0"
Рис.15 - Переименовываем интерфейсы в файле /etc/rc.conf.
Не забываем перезапустить сетевую службу:
/etc/rc.d/netif restart
Проверю, введу команду ifconfig -u . Видим наш wan0 с нужным IP адресом .(Рис.16)
Ifconfig -u
Рис.16 - Проверяем новое название интерфейса. ifconfig -u.