Ключевые слова:adsl, freebsd, modem, nat, ipfw, (найти похожие документы)
From: Заикин Максим Викторович <ZaikinM@mail.ru.>
Newsgroups: email
Date: Mon, 11 Apr 2005 14:31:37 +0000 (UTC)
Subject: [FreeBSD] Настройка ADSL интернета для корпаративных сетей
Характеристика сети.
Сеть на базе 100mb/s. В сеть входят два компьютера, comp1 и comp2
Comp1.
Intel Pentium III 900 mhz, hdd 80gb, ram 256, D-link 100mb/s
Os - Windows XP
Net Config
ip 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.68 (на этот параметр прошу обратить особое внимание,
он будет рассмотрен более подробно позже)
dns1 193.24.22.6
dns2 193.24.22.33
...................
comp2.
AMD -K6 300mhz, hdd 5gb, ram 198, D-Link 100mbs, Realtek 100mb/s
Os - FreeBSD 4.9-RELEASE
Net config
rl0 - Realtek
ip 193.24.23.35
netmask 255.255.255.248
gateway 193.24.23.33
vr0 - D-link
ip 192.168.0.68
netmask 255.255.255.0
dns1 193.24.22.6
dns2 193.24.22.33
...................
Топология сети
______________
/ \
/ \
| internet |
\ /
\______________/
|
|
|
|
| my local network
| .........................................................................
gateway . coomp2 __________ comp1 .
(провайдера) . vr0 192.168.0.68-------------| switch |--------------- 192.168.0.2 .
193.24.23.33 . | ---------- .
| .......... ..............................................................
| |
| rl0 193.24.23.35
| |
|----------------------
|
...
Постановка задачи
Провайдер предоставляет услуги ADSL. Выделен один реальный ip адрес,
шлюз и два сервера dns. Необходимо предоставить пользователям локальной
сети, пользоваться услугами интернет. Для решения этой задачи, мы решили
применить следующую схему.
Установить сервер под управлением Os FreeBSD, снабдить его двумя
сетевыми интерфейсами, один из которых будет принадлежать сети
провайдера, второй - локальной сети.
Для решения поставленной задачи, нам необходимо сконфигурировать ядро
должным образом, что бы операционная система могла на уровне ядра
осуществлять форвардинг трафика, с одного сетевого интерфейса на другой.
Так же, так как адреса нашей локальной сети, являются серыми, то нам
необходимо применить технологию NAT ( Network Adress Translation) Для
этого в конфигурационный файл ядра( мы его назвали CUSTOM ) необходимо
включить следующие опции:
Конфигурация ядра.
cd /sys/i386/conf
cp GENERIC CUSTOM
vi CUSTOM
Далее мы добавим необходимый для решения поставленной задачи- опции.
options IPFIREWALL (включает FIREWALL на уровне ядра, то есть как только будет
приходить пакет, он тут же будет анализироваться ядром,
на предмет соответствия правилам безопасности)
options IPFIREWALL_VERBOSE (включает, лог файлы файрвола )
options IPFIREWALL_VERBOSE_LIMIT=10 (включает ограничение записи пакетов в
лог, для избежания переполнения флудом)
options IPFIREWALL_DEFAULT_TO_ACCEPT ( включает по умолчанию полную прозрачность
файрвола, если эту опцию убрать, то до тех
пор пока вы не заведете правила, все пакеты будут
отбрасываться. Вообще говоря, есть два варианта
конфигурации Файрвола. Первый вы запрещаете весь
трафик, и затем вводя соответствующие правила
разрешаете то что считаете нужным. Второй вы
открываете весь трафик, и затем соответствующими
правилами, закрываете тот что считаете ненужным.)
options IPDIVERT ( Эта опция позволяет перенаправлять трафик с одного сетевого
интерфейса на другой )
Подсказка по vi:
* Для активации режима ввода нажмите клавишу "i"
* Для отмены режима ввода нажмите "Esc"
* Для удаления символа, стоящего перед курсором, в режиме просмотра, нажмите "x"
* Для удаления строки, на которой стоит курсор, нажмите два раза "d"
* Для перехода в коммандный режим, нажмите "Ctrl+':'"
* Для сохранения внесенных изменений, перейдите в коммандный режим, введите "w",
и затем enter
* Для выхода из редактора "vi", перейдите в коммандный режим, введите "q",
и нажмите enter
* Для выхода из редактора "vi" без сохранения, перейдите в коммандный режим,
введите "q!", и нажмите enter
Сборка:
cd /usr/src
make buildkernel KERNCONF=CUSTOM
make installkernel KERNCONF=CUSTOM
Вся операция на данном оборудовании занимает ~30 минут
Во время процесса компиляции ядра, вы можете внести изменения в
конфигурационный файлы системы. Alt+"номер функциональной клавиши"
переключит вас в другой сеанс работы с операционной системой.
Авторизируйтесь справами суперпользователя, и внесите нижеследующие
измения в конфигурационные файлы операционной системы.
Правка конфигурационных файлов операционной системы.
! Внимание нумерация строк включена для удобства комментариев, и должна
остсутствовать в файлах конфигурации !
/etc/rc.conf
1 firewall_enable="YES"
2 firewall_type="simple"
3 natd_enable="YES"
4 natd_interface="rl0"
5 gateway_enable="YES"
6 ifconfig_rl0="inet 193.24.23.35 netmask 255.255.255.248"
7 ifconfig_vr0="inet 192.168.0.68 netmask 255.255.255.0"
8 defaultrouter="193.24.23.33"
Описание параметров
1 При загрузке операционной системы запускает, файрвол ipfw
2 Конфигурирует файрволл при загрузке, в соответствии с правилами,
перечисленными в секции simple, файла /etc/rc.firewall
3 При загрузке включает демон natd
4 При загрузке запускает nat демон на интерфейсе rl0. Всегда демон NAT
должен запускаться на внешнем интерфейсе
5 Когда этот параметр установлен, то компьютер запускается в режиме ip
маршрутизатора, то есть включается возможность перенаправлять трафик
с одного сетевого интерфейса на другой.
6 При загрузке конфигурирует сетевой интерфейс rl0
7 При загрузке конфигурирует сетевой интерфейс vr0
8 Организует маршрут по умолчанию до указанного ip адреса.
/etc/resolv.conf
1 nameserver 193.24.22.6
2 nameserver 193.24.22.33
Описание параметров
1-2 Эти записи описывают адреса dns серверов.
/etc/rc.firewall
Так, как мы указали при загрузке активировать правила из секции
"simple", то спускаемся до этой секции.
# Эти параметры описывают ваш внешний интерфейс. Установите ваш ip маску
# подсети, и идентификатор вашего внешнего интерфейса
oif="rl0"
onet="193.24.23.0"
omask="255.255.255.248"
oip="193.24.23.35"
#Эти параметры описывают ваш локальный интерфейс. Установите ваш ip
#маску подсети, и идентификатор вашего локального интерфейса.
oif="vr0"
onet="192.198.0.0"
omask="255.255.255.0"
oip="192.168.0.68"
После инсталляции нового ядра, перезагружаем систему.
reboot now
После перезагрузки необходимо проверить настройки
ping foo.com
получаем ответ- значит внешний интерфейс настроен правильно
ping 192.168.0.2
получаем ответ- значит локальный интерфейс настроен правильно
Если, вы не получаете ответ.
1. Проверьте есть ли гудок в телефонной линии
2. Включен ли ADSL modem ? Если нет, то ни один индикатор на модеме не
будет активен.
3. Подключен ли ADSL модем к телефонной линии. Это можно проверить
следующим способом. На модеме имеется индикатор "Link" если этот
индикатор находиться в нестабильном состоянии ( постоянно мигает ),
значит модем не может установить связь с внешним миром.
4. Подключен ли модем к сетевому интерфейсу ПК. На модеме имеются
индикатор "LAN" Если он не активен, значит нет связи с сетевым
интерфейсом.
5. Проверте правильно ли вы подключили сетевые интерфейсы.
5.1 Дайте команду ifconfig -a. Изучите дамп команды. Проверте соответствует
ли дамп реальной ситуации.
5.2 Проврьте на те ли сетевые интерфейсы, вы подключили соответствующие провода.
Это стоит понимать, как например если на rl0(в нашем случае это внешний
сетевой интерфейс) мы подключаем провод с локальной сети.
6. Включен ли switch ?
Настройка comp1.
1. Открывает оснастку "Сетевое окружение".
2. "Отобразить сетевые подключения".
3. Щелкаем правой кнопкой мыши по оснастке "Подключение по локальной сети"
4. Выбираем пункт свойства
5. Встаем на пункт "Протокол интернета TCP/IP". Нажимаем кнопку "Свойства"
6. Прописываем следующие характеристики сети
IP-адрес 192.168.0.2
Маска подсети 255.255.255.0
Основной шлюз 192.168.0.68 Давайте рассмотрим этот параметр подробнее что бы
понять, как будет происходить взаимодействие сетей.
Допустим пользователь локальной сети, решил посмотреть содержимое сайта
some_site.com, адрес которого например 0.0.0.0 comp1 формирует пакет
на установление соединения с some_site. Мы не будем углубляться в
тонкости формирования, запроса на установления соединения с удаленным
хостом. Так как адрес some_site неизвестен, но и не принадлежит
локальной сети то основываясь на запись основной шлюз, пакет будет
послан на comp2 интерфейс vr0 192.168.0.68. Приняв пакет, ядро comp2
начинает его анализировать - ipfw. ipfw последовательно его сопоставляет
на соответствия правилам, начиная с правила с наименьшим номером, и
заканчивая самым последним в списке правил, номер которого будет самым
высоким.
В нашем случае есть правило
1400 341 95477 divert 8668 ip from any to via rl0 (см. подробнее о настройке ipfw)
Номер правила 1400. Правило гласит перенаправлять все пакеты по
протоколу TCP/IP на порт 8668 сетевого интерфейса rl0 Как только ipfw
дойдет до этого правила. Пакет тут же будет передан на порт 8668
сетевого интерфейса rl0.
Что бы лучше понять суть "divert 8668" - этой части правила. Наберите
cat /etc/services|grep natd.
В нашем случае получим следующий вывод
natd 8668/divert #Network Adress Translation
А так же вспомните запись в файле /etc/rc.conf
natd_interface="rl0"
Все это значит, что демон natd при старте системы запускается на сетевом
интерфейсе rl0. И будет прослушивать порт 8668
Как только приходит пакет на порт 8668, включается демон natd, суть
которого состоит в следующем. Наш пакет в заголовке будет содержать
адрес компьютера отправителя 192.168.0.2 Такова адреса в интернете не
существует
Поэтому демон natd заменит этот адрес на 193.24.23.35. А так же создаст
временную запись соответствия пакет-локальный адрес-измененный
адрес. И передаст его на сетевой интерфейс rl0. Далее вступает в
силу запись /etc/rc.conf
defaultrouter="193.24.23.33"
Суть этой записи состоит в том, что если приходит пакет с запросом к
неизвестному ip адресу, такой пакет будет отправляться на адрес
указанный в записи defultrouter. Если нет другого соответствующего
именно этой ситуации маршрута.
Таблицу маршрутов вы можете просмотреть по команде netstat -rn( см.
подробнее о настройке маршрутизации) Адрес 193.24.23.33 это адрес
шлюза провайдера. Вполне естественным будет выглядеть отправка этого
пакета, на шлюз провайдера, так как эти сетевые интерфейсы -сегменты
одной сети. Далее этот пакет достигнет пункта назначения, и пройдет
все шаги в обратном порядке.
Предпочитаемый DNS-сервер 193.23.22.6
Альтернативный DNS-сервер 193.23.22.33
На остльных шагах - нажимаем кнопку "OK"
На этом настройка сети заканчивается. После этого comp1 должен
беспрепятственно совершать запросы за прделы локальной сети.
Если в вашем случае, желаемый результат не достигнут, пишите мне на
email ZaikinM@mail.ru. В письме укажите характеристики вашей сети, так
же как приведены в самом начале данной статьи. А так же опишите проблему
и место в котором она возникает.
Автор будет благодарен за любую критику, и исправление допущенных им
ошибок и неточностей.
С Уважением Заикин Максим.
Тут есть неверное правило для ipfw..
---
1400 341 95477 divert 8668 ip from any to via rl0 (см. подробнее о настройке ipfw)
Номер правила 1400. Правило гласит перенаправлять все пакеты
---
#ipfw add divert 8668 ip from any to via rl0
ipfw: unrecognised option [-1] rl0
правильно будет ipfw add divert 8668 ip from any to any via rl0
Это не для корпоративных сетей - это для домашних
Только тут можно рекомендовать полную открытость файервола (options IPFIREWALL_DEFAULT_TO_ACCEPT) да и то с некоторой оглядкой.
В любом случае ЛУЧШЕ запретить по умолчанию весь трафик (IPFIREWALL_DEFAULT_TO_ACCEPT исключаем)
а в rc.conf указываем firewall_type="OPEN" и получаем нужную нам полную свободу.
А если есть время и желание действительно настроить фильтрацию, на основе секции SIMPLE создаем свою собственную и начинаем играться с правилами.
> (IPFIREWALL_DEFAULT_TO_ACCEPT исключаем)
Хотел бы я на тебя поглядеть, когда ты правила захочешь перезагрузить, либо очистить :D
И поскачешь за тридевять земель к своему ты пациенту, IPFIREWALL_DEFAULT_TO_ACCEPT нужен! Перед последним и после всех разрешающих правил можно поставить deny all from any to any и все будет пушисто!
Стоило ли сервак поднимать если, насколько я понял, ADSL модем находится в режиме router, а не bridge.
Так как здесь ни слова про подключение PPPoE.
А в таком режиме и nat можно на нем включить.
Да и шлюз для корпоративной сети без фаервола - вещь страшная
Natd поднимать стоило. Объясею почему. А куда повашему пойдеит пакет направленный из вне, обратно в локальную сеть. Когда вокруг миллионы компъютеров с адресами 192.168.0.х. Natd необходим там где предпологаются серые ip адреса, эта его одна из одних основопологающих задач. Файрволл нужен обязательно именно его поддержку мы и включили в ядро. Согласен с критокой по поводу его настройки. Эта конфигурация не претендует на звание максимальнооптимизированного и безопаснонстроенного. Тема ipfw заслуживает отдельной книги нето что статьи. Я лишь привел пример роботоспособной конфигурации. В любом случае спасибо за ваши отзывы. Согласен в статье присутствуют неточности и ошибки. Обещаю в последующих изложениях по данной теме учесть ваши замечания.
С уважением Заикин Максим Викторович
То что NAT нужен это ясно, но только ради этого ставить сервер нужды нет. Многие модели ADSL-модемов, особенно которые работают в режиме роутера, умеют делать nat. Они сами цепляются к провайдеру и получают на себя внешний IP адрес. Если и поднимать сервер с подключением по ADSL, то модем нужно переводить в режим моста, и на средствами ОС организовывать PPPoE подключение (тогда сервер получает внешний адрес).
Статья по сути дела бесмысленная, про начала настроки FreeBSD в качестве маршрутизатора говорится чуть ли ни в каждом материале. Про подключение ADSL - тоже ни слова, ipfw - другая статья
Хм, господа. А вы найдмте путевую статью где также подробно описывается чего и куда тыкать для новичков? Это же настройка ШЛЮЗА. Надо фаерволл? другая статья. Надо прокси? тоже есть статья про SQUID. Если вы профи, так напишите статью или книгу как и что настроить от и до. Я считаю, что название выбрано правильно, хоть и с ошибкой грамматической, но сути не меняет. Эта статья фундамент для построения ШЛЮЗА.
Статья хорошая.
Например, для меня было открытием, что natd работает как сетевой сервис на порту 8668 (я думал, что он на системном уровне перекидывает пакеты с интерфейса на интерфейс). А без понимания этого правило "divert 8668 ip from any to any via rl0" выглядит как минимум бессмысленно (за что и удаляется).
У нас небольшое предприятие и есть безлимитный интернет через ADSL
modem, который настроен в режиме роутера (внешний ИП ему назначается
провайдером автоматически). Есть локальный домен на АД которому
нужно обеспечить доступ в инет через файрвол (FreeBSD, ipfw). Проблема в следующем.
Начиналось все с KerioWinroute и так как нормальной работы от него
никто не дождался пришлось ставить Microsoft ISA Server 2006. Но увы,
машина на которую его поставили - не шибко шустрая и тут возник
вопрос, - "А почему бы и не FreeBSD?". Навыков хватило чтоб
установить систему, поставить "мс" и перекопилить ядро... Далее
уверенности в действиях нету совсем никакой...
Если вас не затруднит, помогите в настройке. Вот наши характеристики:
Сеть на базе 100mb/s. В сеть входят 1 локальный домен, два сервака,
ADSL modem (Calisto 821+) и
комп-шлюз-файрвол с FreeBSD(ipfw)
Comp_domen (подразумевается любой комп локалки).
Intel Pentium IV 2000 mhz, hdd 80gb, ram 256, D-link 100mb/s
Os - Windows XP Pro
Net Config
ip 192.168.1.144
netmask 255.255.255.0
gateway 192.168.1.150 (локальная сетевуха в FreeBSD машине)
dns1 192.168.1.1 (Локальный DNS c ActiveDerictory)
rl0 - Realtek
ip 192.168.0.150
netmask 255.255.255.0
gateway 192.168.0.254 (это ИП модема, который настроен в режиме
роутера с динамической выдачей внешнего ИП провайдером)
vr0 - D-link
ip 192.168.1.150
netmask 255.255.255.0
dns1 195.5.46.12 (этот ДНС дал сам провайдер, он только один)
dns2 192.168.1.1 (Локальный DNS c ActiveDerictory) - я
не знаю, нужен он тут или нет...
...................
Очень ждем ответа от всех откликнувшихся! Заранее - БОЛЬШОЕ СПАСИБО!
Спасибо Максим вот мне твоя статья очен помогла
а есть идеи как сделать без simpla ну типа создать
свой скрипт? Спасибо! Жду ответа. и если можно еще пару вопросов задать
Где описана часть simple конфига файрвола там на локальный интерфей прописано oif, onet - тока у меня ничего не пошло пока не изменил на iif inet и т.д.
Я особо в *nix системах на разбираюсь - обясните пожалуйста это опечатка или так и должно быть!?