Задача довольно тривиальная: сервер на FreeBSD имеет 2-е сетевые карты; в одну вставлен RJ-45 от ADSL-модема, от второй сетевой карты кабель идёт в коммутатор, а уже посредством коммутатора сеть получают остальные ПК. Сервер FreeBSD соединяется с интернетом по PPPOE и будет раздавать его остальным. Реализовывать раздачу будем nat‘ом. Опишу почти самый простой способ.
Сначала перекомпилим ядро, не пугайтесь, это не сложно, нем более мы лишь добавим туда несколько нужных параметров, а не будем пересматривать всё содержимое конфигурационного файла (это отдельная история).
1) Проверим, присутствуют ли тексты ядра:
1 | ls /usr/src/sys |
Если такого каталога нет, значит вставляем диск №1 с freebsd в cd-rom на сервере,
заходим в систему под root’ом:
1 2 | su -l Password: |
запускаем:
1 | sysinstall |
выбраем Configure, далее Distributions, потом src, потом base и sys.
Жмём везде «ОК», ждём пока не спросят откукда устанавливать, выбираем CD/DVD
и ждём пока скопируются исходники.
Тем, кто устанавливал FreeBSD по этой инструкции, пункт 1 можно пропустить.
2) Тексты ядра скопировались, далее:
1 2 3 | cd /usr/src/sys/i386/conf cp GENERIC mykern ee /usr/src/sys/i386/conf/mykern |
Меняем строчку:
1 | ident GENERIC |
на:
1 | ident mykern |
и в конце файлика mykern, который мы редактируем, добавляем строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # dlya paketov options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=100 options IPFIREWALL_FORWARD options IPDIVERT options DUMMYNET # dlya krasoty options SC_PIXEL_MODE options VESA options VGA_WIDTH90 options SC_NORM_ATTR=(FG_GREEN|BG_BLACK) options SC_KERNEL_CONS_ATTR=(FG_YELLOW|BG_BLACK) |
Закрываем файлик, сохранив изменения. После этого делаем:
1 2 3 | cd /usr/src make buildkernel KERNCONF=mykern make installkernel KERNCONF=mykern |
ВНИМАНИЕ: Если вы выполнили успешно 2-е последние строчки и находитесь физически далеко от сервера, не перезагружайтесь, иначе фаервол начнёт действовать и блокировать все пакеты (выполняется правило по умолчанию)
3) Далее подредактируем:
1 | ee /etc/rc.conf |
Проверим наличие строк:
1 2 3 4 5 6 7 8 | gateway_enable="YES" natd_enable="YES" #re0-сетевой интерфейс, к которому подключён ADSL (измените на свой) natd_interface="re0" natd_flags="-dynamic -f /etc/natd.conf" firewall_enable="YES" #файл с правилами фаервола-rc.firewall firewall_script="/etc/rc.firewall" |
Если вышеуказанных строк нет(а их скорее всего нет), добавьте их.
4) Теперь:
1 | ee /etc/natd.conf |
Содержимое должно быть следующим (исправьте если это не так):
1 2 3 4 5 6 7 | log yes deny_incoming yes verbose no log_denied yes same_ports yes use_sockets yes unregistered_only yes |
5) Добавим пару простейших правил, лишь бы заработал необходимый минимум.
1 2 3 | mv /etc/rc.firewall /etc/rc.firewall_old cp /etc/rc.firewall_old /etc/rc.firewall ee /etc/rc.firewall |
Стираем там всё, зажав сочетание кнопок Ctrl+K
и впишим туда следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /sbin/ipfw -f flush /sbin/ipfw -q add 00100 allow all from any to any via lo0 /sbin/ipfw -q add 00101 allow all from any to 127.0.0.0/8 /sbin/ipfw -q add 00102 allow all from 127.0.0.0/8 to any #re0-сетевой интерфейс, к которому подключён ADSL (измените на свой) /sbin/ipfw -q add divert natd all from any to any via re0 #re1-сетевой интерфейс, к которому подключён коммутатор(хаб,свич)(измените на свой) /sbin/ipfw -q add 00103 allow all from any to any via re1 #www allow /sbin/ipfw -q add 00104 allow all from any to any 80 /sbin/ipfw -q add 00105 allow all from any 80 to any #ssh allow /sbin/ipfw -q add 00106 allow all from any to any 22 /sbin/ipfw -q add 00107 allow all from any 22 to any #dns allow /sbin/ipfw -q add 00108 allow all from any to any 53 /sbin/ipfw -q add 00109 allow all from any 53 to any #ping allow /sbin/ipfw -q add 00110 allow icmp from any to any |
6) Всё, перезагружаем сервер:
1 | shutdown -r now |
момент истины.
7) Клиенты.
Когда с сервером всё завершено успешно, на клиентах в настройках сетевого интерфейса, в качестве шлюза надо прописать внутренний адрес нашего сервера (в данном примере это ip адрес re1). И IP адреса и маска подсети у клиентов должны быть из той же подсети, что и re1, а так же не забудьте прописать dns сервера (скорее всего их вам сообщил провайдер). От настройки клиентов можно избавиться, настроив один раз dhcp-сервер и указав клиентам, автоматически получать настройки сети.
— ниже не обязательно для прочтения —
для тех, кто хочет понять хотябы коротко, что мы сделали:
Впаяли в ядро фаервол, в атозагрузку добавили nad и фаервол, создали правила, разрешающие ssh, www, ping, dns, перезапустили сервер и настроили клиентов. Таким образом обеспечили раздачу интернета через freebsd сервер. Более подробное конфигурирование ядра и правил фаервола-это уже темы отдельных статей.


[...] надо пересобрать ядро. Как это делается, написано здесь. Вам нужно выполнить там пункты 1 и 2 , но в пункте 2 в [...]
Не пойму зачем писать опции для красоты. К фаерволлу или нату это никак не относится
.
Это бонус
Я смотрю, вы, tehnikpc, частый посетитель mediaunix.com . Оч приятно, что есть таковые, и вдвойне приятней, когда по делу укажут на ошибки/недочёты.
Пинг до сервера на FreeBSD с пк в сети? Откуда, куда пинг? Скорее всего фокус в правилах фаервола.
пересобрал ядро, пытаюсь отправить Ping, пишет
permission denied, в чем дело?