Домашний шлюз на FreeBSD для доступа к общим ресурсам и интернету по Wi-Fi с автоматическим получением IP адреса по DHCP!
Ингредиенты:
1. Сервер с установленной FreeBSD 8.1
2. PCI Wi-Fi карта низко профильная
3. Ethernet свич, хаб, коммутатор да как его только не называют даже маршрутизатор!
4. Putty
К сожалению низко профильную планку для PCI разъема найти не удалось но сама плата низко профильная — так что влезла, а как её там закрепить каждый придумывает сам!
Для того чтобы сервер заработал как шлюз мало указать при установке gateaway_enable «YES» для этого надо пересобрать ядро ОС с нужными параметрами! Кстати если gateaway_enable не установлен это можно сделать в любой момент:
sysinstall
[Options] — выбираем нужный параметр.
Для начала посмотрим что у нас за версия ситемы делаем:
uname -a
или
sysctl kern.version
видим
FreeBSD Server.Home 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:55:53 UTC 2010 root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
GENERIC — чистое ядро после установки никем не тронутое!
Перед сборкой ядра надо установить его исходники например с CD, делать это надо при первой пересборке ядра!
sysinstal
выбираем
Configure>Distributions>
[] src Source for everything
[x] sys
OK
Теперь приступаем к сборке ядра тут используем ранее выясненное имя ядра GENERIC
cd /usr/src/sys/i386/conf cp GENERIC ipfwcrypt
Открываем файл, напоминаю команды редактора vi — кнопки [esc] [i] редактировать, [esc] [x] удалить, [esc] [:q!] [enter] выйти без записи, [esc] [:wq!] [enter] выйти записать.
vi ipfwcrypt
меняем строку на
ident ipfwcrypt
Для шлюза добавляем в конце строки
options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=50 options IPFIREWALL_FORWARD options IPDIVERT options DUMMYNET options IPFIREWALL_DEFAULT_TO_ACCEPT
Сразу добавляем для шифрованного раздела (если надо) снизу, чтобы по сто раз не пересобирать ядро это всё таки очень долго!
options GEOM_ELI device crypto
далее делаем
config ipfwcrypt cd /usr/src/sys/i386/compile/ipfwcrypt make cleandepend && make && make install
Последняя операция занимает значительное количество времени, по окончании для шифрования надо добавить в /boot/loader.conf
vi /boot/loader.conf
текст
geom_eli_load="YES"
Инструкция по установке шифрораздела тут, этим нужно заняться позже.
Перезагружаемся
reboot
Смотрим какие у нас сетевые интерфейсы есть
ifconfig
re0
status: runnig
ath0
status: no carier — не работает
Нам повезло чип Wi-Fi Atheros IEEE 802.11, а ни какой нибудь экзотический rt28600, хотя его тоже можно заставить работать!
Устанавливаем Wi-Fi
Создаем интерфейс коммандой
ifconfig wlan0 create wlandev ath0
Добавляем в rc.conf строки даем беспроводному интерфейсу IP
wlans_ath0="wlan0" ifconfig_wlan0="inet 10.10.30.1/24" create_args_wlan0="wlanmode hostap country RU" hostapd_enable="YES"
Создаем файл
vi /etc/hostapd.conf
добавляем в него строки
interface=wlan0 hw_mode=g macaddr_acl=0 auth_algs=1 ssid=Imya_Nashe_Tochki_dostupa ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel wpa=2 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP
wpa_passphrase должен быть не менее 8 знаков
Перезагружаемся. Теперь в ifconfig мы видим что Wi-Fi заработал
ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 2290 ether 00:11:95:e7:3a:8c media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap> status: running <...> wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:11:95:e7:3a:8c inet 10.10.30.1 netmask 0xffffff00 broadcast 10.10.30.255 media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap> status: running ssid Imya_Nashe_Tochki_dostupa channel 11 (2462 MHz 11g) bssid 00:11:95:e7:3a:8c
Запускаем шлюз IPFW
Добавляем в /etc/rc.conf строки
firewall_enable="YES" firewall_type="/etc/rc.firewall" firewall_logging="YES"
Переименовываем стандартный файл настроек
mv /etc/rc.firewall /etc/rc.firewall.old
Создаем файл /etc/rc.firewall
vi /etc/rc.firewall
Добавляем в него строки
#!/bin/sh FwCMD="/sbin/ipfw" lanout="re0" lanin="wlan0" ipout="192.168.1.107" ipin="10.10.30.1" netin="10.10.30.0/24" # Sbrasyvaem vse pravila: ${FwCMD} -f flush # ${FwCMD} add allow ip from any to 127.0.0.1 ${FwCMD} add allow ip from 127.0.0.1 to any #${FwCMD} add fwd 127.0.0.1,3128 tcp from ${netin} to any 80 via ${lanout} ${FwCMD} add allow all from any to any via lo0 ${FwCMD} add check-state #!!! ROUTING #${FwCMD} add divert 199 ip from any to any out xmit ${lanin} #${FwCMD} add divert 199 ip from any to any in recv ${lanin} #${FwCMD} add divert 199 ip from any to any out xmit ${lanout} ${FwCMD} add divert natd ip from any to any out via ${lanout} ${FwCMD} add divert natd ip from any to me in via ${lanout} #${FwCMD} add divert 199 ip from any to any in recv ${lanout} ${FwCMD} add allow tcp from any to any established ${FwCMD} add allow ip from ${ipout} to any out xmit ${lanout} # DNS udp zaprosy po 53 portu ${FwCMD} add allow udp from any 53 to any via ${lanout} ${FwCMD} add allow udp from any to any 53 via ${lanout} #${FwCMD} add allow ip from any to ${netin} in via ${lanin} #${FwCMD} add allow ip from ${netin} to any out via ${lanin} #!!! RAZRESHENO #HTTP WEB SERVER iz vnutrenney seti y vneshnei ${FwCMD} add allow tcp from any to ${ipout} 80 in via ${lanout} setup ${FwCMD} add allow tcp from any to ${ipin} 80 in via ${lanin} setup # PING ${FwCMD} add allow icmp from any to any out via ${lanout} keep-state ${FwCMD} add allow icmp from any to any in via ${lanout} # Mail POP SMTP ${FwCMD} add allow tcp from any to any 110 via ${lanin} ${FwCMD} add allow tcp from any to any 25 via ${lanin} #LDAP ${FwCMD} add allow tcp from any to any 389 via ${lanin} # WWW ${FwCMD} add allow tcp from any to any 80 via ${lanin} ${FwCMD} add allow tcp from any to any 443 via ${lanin} # Ne pomnu ${FwCMD} add allow icmp from any to any via ${lanin} #SAMBA ${FwCMD} add allow tcp from any to any 135,137,138,139,445 via ${lanin} ${FwCMD} add allow udp from any to any 135,137,138,139,445 via ${lanin} #DHCP ${FwCMD} add allow udp from any to any 67,68 via ${lanin} #DNS ${FwCMD} add allow udp from any to any via ${lanin} #SHH ${FwCMD} add allow tcp from any to any 22 via ${lanin} #uVNC ${FwCMD} add allow tcp from any to any 5900,5500 via ${lanin} # SSH iz vnewnei seti ${FwCMD} add allow tcp from 192.168.1.156 to ${ipout} 22 via ${lanout} keep-state #!!! Zapreshaem vsio ostalnoe ${FwCMD} add deny all from any to any
В файле много строк закоменчено, они нам потребуются далее! В начае описываем наши интерфейсы и сети
lanout="re0"
— интерфейс смотрящий на ружу будь то на adsl модем или во внешнею сеть на прямую
lanin="wlan0"
— Wi-Fi интерфейс именно так а не ath0
ipout="192.168.1.107"
— IP внешнего интерфейса, здесь может быть и статический внешний IP(у кого есть конечно)
ipin="10.10.30.1"
— IP точки доступа
n
etin="10.10.30.0/24"
— маска сети тут можно повыпендривать и ограничивать ей например елси подклбчений будет 16 то писать (уф быстро это забывает — есть унивирсальный способ с дофичным деление но проще посмотреть в книжке) 10.10.30.0/24 приэтом реально можно использовать 14 IP адресов один отсается для имени сети другой на широковещательные запросы. Вообщем тюнег сети при помощи масок в домашей ести не нужен! А где нужен там это делаеют VLAN’ом!
В секции # RAZRESHENO идет перечесление портов которые можно использовать — они привязываются к интерфейсу
Эта строка разрешает заход по SSH только с ip 192.168.1.156 измените его на свой ip с внешнего интерфейса
# SSH ${FwCMD} add allow tcp from 192.168.1.156 to ${ipout} 22 via ${lanout} keep-state
Также нам нужен natd — Network Address Translation daemon
Добавляем следующие строки в /etc/rc.conf:
natd_enable="YES" natd_interface="re0" natd_flags="-m -u"
Также нам нужен DNS proxy — чтобы клиентам по DHCP раздавать его а не реальный, на случай экстренной смены оного (чтобы не менять у каждого кто не на DHCP).
cd /usr/ports/dns/totd make&make install
В rc.conf добавляем
totd_enable="YES"
Создаем /usr/local/etc/totd.conf указываем интернет шлюз тот же что и в настройках ос
forwarder 213.12.3.213 interfaces re0
Настраиваем DHCP раздачу IP адресов и всего автоматом. Устанавливаем DHCP соглашаемся на всё что предлагают!
cd /usr/ports/net/isc-dhcp31-server make install
В /etc/rc.conf добавляем
dhcpd_enable="YES" dhcpd_flags="-q" dhcpd_ifaces="wlan0" dhcpd_conf="/usr/local/etc/dhcpd.conf"
Создаем файл /usr/local/etc/dhcpd.conf в нем пишем
option domain-name "DHCP_Prosto_Imya"; ddns-update-style none; option domain-name-servers 192.168.1.107; option subnet-mask 255.255.255.0; subnet 10.10.30.0 netmask 255.255.255.0 { interface wlan0; range 10.10.30.10 10.10.30.25; option routers 10.10.30.1; option domain-name-servers 192.168.1.107; }
Перезагружаемся!
reboot
У нас должна получится точка доступа Wi-Fi под именем Imya_Nashe_Tochki_dostupa c автоматической раздаче IP и интернетом пока никак не ограниченным по URL и без подсчета трафика!
Если что-то не работает начинаем проверять!
Проверим файл настроек DHCP
dhcpd -cf /usr/local/etc/dhcpd.conf
Смотрим статистику шлюза по всем правилам, цифорки есть значит трафик идет!
ipfw show
Смотрим запущено ли natd, totd, dhcpd
ps auxc | egrep -w 'totd|dhcpd|natd' | egrep -v 'egrep'
Всё запущено — хорошо
root 981 0.0 0.1 3568 1444 ?? Is 12:59PM 0:00.02 natd root 1042 0.0 0.1 3288 1332 ?? Ss 12:59PM 0:00.07 totd dhcpd 1194 0.0 0.3 4312 2940 ?? Is 12:59PM 0:00.00 dhcpd root 1609 0.0 0.1 3288 1288 ?? Ss 1:32PM 0:00.03 totd
Подключаемся к Wi-Fi точке с какого-нибуть утсройства у нас должно быть:
IP: в интервале 10.10.30.10-10.10.30.25
Шлюз: 10.10.30.1
DNS: 192.168.1.107
Далее будем считать трафик и ограничивать интернет…
Добавить комментарий