четверг, 17 февраля 2011 г.

Gentoo Wi-Fi Router on eeePC with IPTV multicasting


предполагается что Gentoo установлен и есть доступ к системе

Так как места всего 4Gb,то будем компилить ядро на другом компьютере со схожей архитектурой.
mkdir -p ./eeePC
cd eeePC
wget http://mirror.corbina.net/pub/Linux/gentoo/releases/x86/current-stage3/stage3-i686-20110125.tar.bz2
tar xvjpf stage3-*.tar.bz2
emerge -avt mirrorselect
mirrorselect -i -o >> ./etc/make.conf
mirrorselect -i -r -o >> ./etc/make.conf
mount -t proc none ./proc
mount -o bind /dev ./dev
chroot ./ /bin/bash
env-update
source /etc/profile
export PS1="(chroot) $PS1"
passwd root

Как альтернатива, можно примонтировать флешку 8Gb и более)))), где $usb ваш девайс
Я перенес туда portage и src
emerge -avt ntfs3g
mount -t ntfs-3g -o 'sync rw no_subtree_check no_root_squash' /dev/$usb /mnt/usb
mv /usr/portage /mnt/usb/
mv /usr/src /mnt/usb/
ls -s /mnt/usb/portage /usr/portage
ls -s /mnt/usb/src /usr/src

Далее, не зависимо от выбранного варианта, пойдет одинаковая конфигурация
Настраиваем make.conf для нашего eeePC
nano /etc/make.conf
CFLAGS="-O3 -march=pentium-m -pipe -fomit-frame-pointer -s"
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu"
ACCEPT_KEYWORDS="~x86"
USE="-kde -gnome -java -qt -qt3 -qt4 -ipv6 -doc -berkdb -readline -selinux
X nptl nptlonly unicode gtk2 gtk jpeg png gif mp3 ogg -dvdrw -dvdr sse sse2 opengl syslog vim-syntax truetype type1 pdf exif samba
fbcon netboot acpi laptop usb dhcp madwifi ssl
bash-completion libnotify spell xhtml dbus libxml2 alsa curl ffmpeg mad sndfile vorbis wavpack sse sse2 -ht mmx threads xml idle
a52 aac encode mmx network oss sdl theora xvid cairo flac wma musepack win32codecs
djvu tiff flac hal"
VIDEO_CARDS="i810 intel vesa vgs"
ALSA_CARDS="hda-intel intel8x0"
# n CPU
MAKEOPTS="-j9"
PORTDIR_OVERLAY="/usr/portage"
LINGUAS="ru"
FEATURES="-sandbox -unmerge-orphans"

Добавляю DNS д.Гугла
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf

Выкачиваем порты
emerge --sync

Конфигурируем ядро
cp /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime
USE="-doc symlink" emerge gentoo-sources
cd /usr/src/linux
make menuconfig
Отмечаем все что связано с сетьюфс, и драйверами
Проверяем на наличие вот этих строк
nano ./.config
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_NETDEVICES=y
CONFIG_WIRELESS_EXT=y
CONFIG_WLAN_80211=y
CONFIG_SYSCTL=y
CONFIG_CRYPTO=y
CONFIG_MAC80211=y
CONFIG_ATH5K=y
CONFIG_CFG80211=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_AES=y
CONFIG_BRIDGE=y
Дополнительная проверка, у меня все было нормально
В nano ./drivers/net/wireless/ath/ath5k/base.c в этот кусок кода
hw->wiphy->interface_modes =
BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC) |
BIT(NL80211_IFTYPE_MESH_POINT);
добавив стоку BIT(NL80211_IFTYPE_AP) |, что бы получилось как показано ниже:
hw->wiphy->interface_modes =
BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC) |
BIT(NL80211_IFTYPE_AP) |
BIT(NL80211_IFTYPE_MESH_POINT);

Обязательная процедура, иначе драйвер не с компилируются, если ставим из исходников
nano /usr/src/linux/.config
CONFIG_CFG80211=m
make menuconfig
exit
make && make modules_install
cp /usr/src/linux/arch/x86/boot/bzImage /boot/kernel-2.6.37-gentoo
За место kernel-2.6.37-gentoo можете выбрать произвольное имя

Компилируем самостоятельно самые свежие драйвера
Ниже будет пример как выкачать из портов, что мне помогло я уже и не знаю
Делал один раз пока, повторить нет возможности, т.к. сносить ради эксперимента лень...
Сперва выкачиваем и компилим Wireless driver
cd /usr/src
wget http://www.orbit-lab.org/kernel/compat-wireless-2.6-stable/v2.6.37/compat-wireless-2.6.37-rc6-3.tar.bz2
tar xvjpf compat-wireless-2.6.37-rc6-3.tar.bz2
cd /usr/src/compat-wireless-2.6.37-rc6-3
make
make install
make unload

Я закомментировал эти строчки так как не помню помогли они или нет
Эти строчки я использовал когда ставил из портов
Потом я ставил и без них, поочередно включая/отключаю эти строки с перемешкой ручной компиляцией
Так что попробуйте сперва без этого пункта
echo "net-wireless/rtl8180" >> /usr/portage/package.keywords
echo "net-wireless/rt2x00 rt2500" >> /usr/portage/package.use

Ставим из портов
Основные
Программная реализация AP
emerge -avt net-wireless/hostapd
Драйвер и утилиты madwifi
emerge -avt net-wireless/madwifi-ng net-wireless/madwifi-ng-tools
Необходимы пакеты: DHCP и DNS (DNS в принципе не нужен, но я его накатил, пусть будет)
emerge -avt dhcp bind
Файрфол
emerge -avt net-firewall/iptables
Если будет раздовать и по вайфаю и по лану
emerge -avt net-misc/bridge-utils
Второстепенные (вообще нужны они или нет...но я поставил)
emerge -avt sys-apps/baselayout
emerge -avt dev-libs/openssl
emerge -avt net-dialup/freeradius
emerge -avt net-wireless/wireless-tools
emerge -avt net-dns/dnsmasq
emerge -avt hotplug
emerge -avt pciutils

Настраиваем net
ln -s /etc/init.d/net.lo /etc/init.d/net.wlan0
rc-update add net.wlan0 default
nano /etc/conf.d/net
modules_wlan0=( "!wpa_supplicant !iwconfig" )
config_wlan0=( "10.0.0.1 netmask 255.255.255.0" )
essid_wlan0="AAArbuzov"
mode_wlan0="master"
channel_wlan0="7"
routes_eth0="224.0.0.0/4"
Последняя строчка нам пригодится для мультикаста

Настраиваем простой файрвол
iptables -F
iptables -t nat -F
iptables -A INPUT -i eth0 -d 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 4022 -j ACCEPT
iptables -A FORWARD -i wlan0 -s 10.0.0.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i eth0 -d 10.0.0.0/255.255.255.0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Вкл.форвард и сохраняем
echo 1 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/iptables save
rc-update add iptables default

Включаем форвардинг пакетов
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 1" >> /etc/sysctl.conf

Настраиваем wpa_supplicant
nano /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
ssid="AAArbuzov"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
wpa_psk="secretpassword"
}

Настраиваем DHCP сервер
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup
nano /etc/dhcp/dhcpd.conf
ddns-update-style none;
authoritative;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.250;
option domain-name-servers 10.0.0.1;
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
default-lease-time 10000;
max-lease-time 20000;
}
Добавляем в автозагрузку
rc-update add dhcpd default
Указываем интерфейс для DHCP сервера и стартуем
nano /etc/conf.d/dhcpd
DHCPD_IFACE="wlan0"
/etc/init.d/dhcpd start

Приступаем к настройки Hostapd
cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.backup
nano /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=AAArbuzov
country_code=RU
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=3
wpa=2
wpa_passphrase=secretpassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
Этих настроек мне хватило
Далее все понятно
/etc/init.d/net.wlan0 restart
rc-update add hostapd default
Такой командой можно подебажить
hostapd -dd /etc/hostapd/hostapd.conf
Запускается так, после перезагрузки поднимется автоматически
hostapd -B /etc/hostapd/hostapd.conf

Настраиваем DNSmasq
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup
echo "interface=wlan0" > /etc/dnsmasq.conf
rc-update add dnsmasq default
/etc/init.d/dnsmasq start

Дальше настраиваем программу для проброса, так сказать, мультикаста в локальную сеть
Так как igmpproxy мне не подошел, то я использовал udpxy
Я не нашел в портах, поэтому лил с оф.сайта http://sourceforge.net/projects/udpxy/
wget http://downloads.sourceforge.net/project/udpxy/udpxy/Chipmunk-1.0/udpxy.1.0-Chipmunk-19.tgz
tar -xzvf udpxy.1.0-Chipmunk-19.tgz
make
make install
nano /etc/init.d/udpxy
udpxy -a wlan0 -p 4022 -m eth0
chmod 755 /etc/init.d/udpxy
update-rc add udpxy default
После уста­новки пакета udpxy можно про­ве­рить работу услуги IPTV, запи­сав неболь­шой медиа-файл.
На пример, если в списке кана­лов при­сут­ствует строка вида udp://@200.0.0.200:1234, то работу IPTV можно про­ве­рить так:
udpxrec -M 10Mb -T -v -c 200.0.0.200:1234 /tmp/test.mpg
При этом будет создан файл /tmp/test.mpg раз­ме­ром 10 мега­байт, содер­жа­щий неболь­шой фраг­мент теле­пе­ре­дачи, кото­рый можно про­смот­реть любым медиа-проигрывателем.
Запускаем наш udpxy
udpxy -a wlan0 -p 4022 -m eth0
Останется только немного изме­нить спи­сок кана­лов, предоставляемым вашим провайдером.
На пример, строку вида udp://@200.0.0.200:1234 надо заме­нить на http://192.168.0.1:4022/udp/200.0.0.200:1234

Произвести сканирование на клиенте можно командой
iwlist scan|grep ESSID

З.Ы: Этот HowTo, если его таковым можно назвать, делал из разных источников. И что истинно оказалось нужным остается только гадать. Но это полный список того как я издевался над своим eeePC. Так что жду вопросов/поправок/дополнений...

Комментариев нет:

Отправить комментарий