HTPC Część 2 – Debian jako ruter oraz ruter wifi dla sieci lokalnej
W poprzedniej części ( http://blog.ezrodlo.pl/htpc/htpc-czesc-1-instalacja-debiana ) zainstalowaliśmy system Debian z narzędziami do wirtualizacji. Co prawda na razie nie zostaną one wykorzystane. Nie mniej jednak warto je mieć, przydadzą się w kolejnych częściach. Teraz zajmiemy się konfiguracją łącza.
Cel: Debian jako ruter, ruter wifi, serwer dhcp dla sieci lokalnej
Spis treści 1. Konfiguracja interfejsów sieciowych 2. Konfiguracja zapory sieciowej 3. Konfiguracja DHCP 4. Konfiguracja demona Hostapd
Wymagania:
1. Łącze ze stałym lub zmiennym adresem IP. Modem ethernet lub gniazdko gdzie można się podłączyć. Dane do konfiguracji powinniśmy otrzymać od dostawcy Internetu: adres IP, brama, maska, dns’y,
2. Klawiatura USB,
3. Monitor lub TV do instalacji.
1. Konfiguracja interfejsu eth0 – Internet
Edytujemy plik /etc/network/interfaces i dodajemy wpisy:
auto eth0 iface eth0 inet static address 212.180.XXX.XXX netmask 255.255.255.XXX gateway 212.180.XXX.XXX hwaddress ether 00:11:22:33:44:55
Opcję hwaddress ether dodajemy jeśli dostawca przydziela nam IP na podstawie adresu mac, a mamy już inną kartę sieciową..
W przypadku nadawania adresu IP dynamicznie dodajemy tylko:
auto eth0 iface eth0 inet dhcp
Jeśli ustawiliśmy adres na sztywno, skonfigurujmy serwery DNS.
Edytujemy plik /etc/resolv.conf
Na początek powinien wyglądać następująco:
nameserver 212.XX.X.XX nameserver 212.XX.X.XX
Podnosimy interfejs poleceniem:
root@htpc1:~# ifup eth0
W tym momencie powinniśmy mieć już działający Internet na serwerze.
Jeśli zainstalowaliśmy dodatkową kartę sieciową eth1 konfigurujemy ją.
Ponownie edytujemy plik /etc/network/interfaces
auto eth1 iface eth1 inet static address 172.16.250.1 netmask 255.255.255.0 network 172.16.250.0 broadcast 172.16.250.255
Dodajemy od razu konfigurację karty bezprzewodowej:
auto wlan0 iface wlan0 inet static address 10.50.100.1 netmask 255.255.255.0 network 10.50.100.0 broadcast 10.50.100.255 pre-up /usr/local/bin/wlan0_preup.sh
Instalujemy narzędzia do zarządzania siecią bezprzewodową
root@htpc1:~# apt-get install wireless-tools
Następnie tworzymy plik: /usr/local/bin/wlan0_preup.sh i wklejamy zawartość:
#!/bin/bash # /usr/local/bin/wlan0_preup.sh # ifconfig wlan0 up iwconfig wlan0 rate auto iwconfig wlan0 channel 6 iwconfig wlan0 txpower 18
Skrypt ten zostanie wykonany przed podniesieniem interfejsu wlan0. Nadajmy jeszcze uprawnienia:
root@htpc1:~# chmod 750 /usr/local/bin/wlan0_preup.sh
Podnosimy skonfigurowane interfejsy
root@htpc1:~# ifup eth1 && ifup wlan0
2. Konfiguracja firewalla/zapory
Interfejsy sieciowe mamy już skonfigurowane, czas zatem na zaporę i udostępnienie Internetu dla sieci lokalnej oraz WLAN. Użyjemy do tego celu narzędzia iptables ze skryptami startowymi iptables-persistent.
root@htpc1:~# apt-get install iptables-persistent
Niestety w Debianie skrypt ten jest z lekka okrojony. Wykorzystamy zatem inny skrypt ze strony http://www.ubuntucy.org/
Otwieramy plik /etc/init.d/iptables-persistent, kasujemy zawartość i wklejamy:
#!/bin/sh ### BEGIN INIT INFO # Provides: iptables # Required-Start: mountkernfs $local_fs # Required-Stop: $local_fs # Default-Start: S # Default-Stop: # Short-Description: Set up iptables rules ### END INIT INFO PATH="/sbin:/bin:/usr/sbin:/usr/bin" # Include config file for iptables-persistent . /etc/iptables/iptables.conf case "$1" in start) if [ -e /var/run/iptables ]; then echo "iptables is already started!" exit 1 else touch /var/run/iptables fi if [ $ENABLE_ROUTING -ne 0 ]; then # Enable Routing echo 1 > /proc/sys/net/ipv4/ip_forward fi if [ $ENABLE_RP_FILTER -ne 0 ]; then # Enable RP_FILTER echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter fi if [ $ENABLE_SYNCOOKIES -ne 0 ]; then # Enable TCP_SYNCOOKIES echo 1 > /proc/sys/net/ipv4/tcp_syncookies fi # Load Modules modprobe -a $MODULES # Load saved rules if [ -f /etc/iptables/rules ]; then iptables-restore /etc/iptables/rules fi # Restore Default Policies iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # Flush rules on default tables iptables -F iptables -t nat -F iptables -t mangle -F # Unload previously loaded modules modprobe -r $MODULES # Disable Routing if enabled if [ $ENABLE_ROUTING -ne 0 ]; then # Disable Routing echo 0 > /proc/sys/net/ipv4/ip_forward fi if [ $ENABLE_RP_FILTER -ne 0 ]; then # Enable RP_FILTER echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter fi if [ $ENABLE_SYNCOOKIES -ne 0 ]; then # Enable TCP_SYNCOOKIES echo 0 > /proc/sys/net/ipv4/tcp_syncookies fi ;; restart|force-reload) $0 stop $0 start ;; status) echo "Filter Rules:" echo "--------------" iptables -L -v echo "" echo "NAT Rules:" echo "-------------" iptables -t nat -L -v echo "" echo "Mangle Rules:" echo "----------------" iptables -t mangle -L -v ;; *) echo "Usage: $0 {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
Następnie tworzymy plik /etc/iptables/iptables.conf
# A basic config file for the /etc/init.d/iptable-persistent script SAVE_NEW_RULES=0 # Modules to load: #MODULES="nf_nat_ftp nf_conntrack_ftp nf_nat_irc nf_conntrack_irc ip_gre" # Enable Routing? ENABLE_ROUTING=1 # Enable rp_filter ? ENABLE_RP_FILTER=0 # Enable tcp_syncookies ENABLE_SYNCOOKIES=1
Na koniec dodajemy reguły do pliku /etc/iptables/rules
# Generated by iptables-save v1.4.8 on Tue Oct 25 16:52:23 2011 *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Tue Oct 25 16:52:23 2011 # Generated by iptables-save v1.4.8 on Tue Oct 25 16:52:23 2011 *nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -s 10.50.100.0/24 -o eth0 -j MASQUERADE -A POSTROUTING -s 172.16.250.0/24 -o eth0 -j MASQUERADE COMMIT # Completed on Tue Oct 25 16:52:23 2011 # Generated by iptables-save v1.4.8 on Tue Oct 25 16:52:23 2011 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -s 172.16.250.0/24 -i eth1 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -s 10.50.100.0/24 -j ACCEPT -A INPUT -s 172.16.250.0/24 -j ACCEPT -A FORWARD -o lo -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 10.50.100.0/24 -j ACCEPT -A FORWARD -s 172.16.250.50/32 -j ACCEPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT COMMIT # Completed on Tue Oct 25 16:52:23 2011
Uruchamiamy skrypt firewall’a
root@htpc1:~# /etc/init.d/iptables-persistent start
Sprawdzamy status
root@htpc1:~# /etc/init.d/iptables-persistent status
Powyższe to mocno okrojone reguły mojej rzeczywistej konfiguracji. Na początek powinny wystarczyć. Nie będą przy okazji blokować żadnego ruchu wychodzącego z sieci lokalnej lub wlan.
3. Instalacja i konfiguracja serwera DHCP
Przedostatnim krokiem jest konfiguracja dhcp dla sieci lokalnej i bezprzewodowej. Dzięki temu nasz ruter będzie przyznawał adresy dynamicznie.
root@htpc1:~# apt-get install isc-dhcp-server
Po instalacji próba uruchomienia pakietu dhcp zakończy się błędem co spowodowane jest brakiem konfiguracji.
Na początek edytujemy plik /etc/default/isc-dhcp-server i ustawiamy zmienną INTERFACES
# Defaults for dhcp initscript # sourced by /etc/init.d/dhcp # installed at /etc/default/isc-dhcp-server by the maintainer scripts # # This is a POSIX shell fragment # # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="wlan0 eth1"
Skoro mamy już przypisane interfejsy, wystarczy zdefiniować podsieci w pliku /etc/dhcp/dhcpd.conf
default-lease-time 600; max-lease-time 7200; authoritative; subnet 10.50.100.0 netmask 255.255.255.0 { range 10.50.100.100 10.50.100.150; default-lease-time 43200; max-lease-time 86400; option domain-name-servers 212.XX.X.XX,212.XX.X.XX; option routers 10.50.100.1; option broadcast-address 10.50.100.255; } subnet 172.16.250.0 netmask 255.255.255.0 { range 172.16.250.100 172.16.250.150; default-lease-time 43200; max-lease-time 86400; option domain-name-servers 212.XX.X.XX,212.XX.X.XX; option routers 172.16.250.1; option broadcast-address 172.16.250.255; }
Uruchamiamy demona DHCP
root@htpc1:~# /etc/init.d/isc-dhcp-server start
4. Konfiguracja rutera wifi – Hostapd
Standardowo, instalujemy niezbędny pakiet:
root@htpc1:~# apt-get install hostapd
Następnie edytujemy plik /etc/default/hostapd
# Defaults for hostapd initscript # # See /usr/share/doc/hostapd/README.Debian for information about alternative # methods of managing hostapd. # # Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration # file and hostapd will be started during system boot. An example configuration # file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz # DAEMON_CONF="/etc/hostapd/hostapd.conf" # Additional daemon options to be appended to hostapd command:- # -d show more debug messages (-dd for even more) # -K include key data in debug messages # -t include timestamps in some debug messages # # Note that -B (daemon mode) and -P (pidfile) options are automatically # configured by the init.d script and must not be added to DAEMON_OPTS. # #DAEMON_OPTS=""
Edytujemy główny plik konfiguracyjny /etc/hostapd/hostapd.conf
# AP netdevice name interface=wlan0 # Driver interface type driver=nl80211 #Logs logger_syslog=-1 logger_syslog_level=2 logger_stdout=0 logger_stdout_level=2 # Dump file for state information (on SIGUSR1) dump_file=/tmp/hostapd.dump ctrl_interface=/var/run/hostapd ctrl_interface_group=0 ##### IEEE 802.11 related configuration ######### # SSID ssid=NazwaSieci ignore_broadcast_ssid=0 # Country code country_code=PL # Operation mode hw_mode=g # Channel number channel=6 # Beacon interval beacon_int=100 # DTIM dtim_period=2 # Maximum number of stations allowed in station table. max_num_sta=255 # RTS/CTS threshold rts_threshold=2347 # Fragmentation threshold fragm_threshold=2346 # Station MAC address -based authentication with driver=madwifi. # 0 = accept unless in deny list # 1 = deny unless in accept list # 2 = use external RADIUS server (accept/deny lists are searched first) macaddr_acl=0 auth_algs=1 # Send empty SSID in beacons and ignore probe request frames that do not ignore_broadcast_ssid=0 # Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e): wmm_enabled=1 # Low priority / AC_BK = background wmm_ac_bk_cwmin=4 wmm_ac_bk_cwmax=10 wmm_ac_bk_aifs=7 wmm_ac_bk_txop_limit=0 wmm_ac_bk_acm=0 # Note: for IEEE 802.11b mode: cWmin=5 cWmax=10 # # Normal priority / AC_BE = best effort wmm_ac_be_aifs=3 wmm_ac_be_cwmin=4 wmm_ac_be_cwmax=10 wmm_ac_be_txop_limit=0 wmm_ac_be_acm=0 # High priority / AC_VI = video wmm_ac_vi_aifs=2 wmm_ac_vi_cwmin=3 wmm_ac_vi_cwmax=4 wmm_ac_vi_txop_limit=94 wmm_ac_vi_acm=0 # Note: for IEEE 802.11b mode: cWmin=4 cWmax=5 txop_limit=188 # # Highest priority / AC_VO = voice wmm_ac_vo_aifs=2 wmm_ac_vo_cwmin=2 wmm_ac_vo_cwmax=3 wmm_ac_vo_txop_limit=47 wmm_ac_vo_acm=0 ieee80211n=0 eap_server=0 ##### WPA/IEEE 802.11i configuration ######## wpa=3 #Jedno haslo dla wszystkch klientow wpa_passphrase=GlowneHasloDostępowe #Opcjonalny plik z mac adresami i kluczami #format pliku: # 00:00:00:00:00:00 HaslodlaDanegoKlienta #wpa_psk_file=/etc/hostapd/wpa_psk wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 wpa_pairwise=TKIP rsn_pairwise=CCMP
Powyższa konfiguracja powinna wystarczyć aby zacząć korzystanie z sieci wlan(oczywiście po ustawieniu „ssid” oraz „wpa_passphrase”)
Jeśli ktoś potrzebuje bardziej zaawansowanych ustawień to powinien zajrzeć do bardzo dobrze opisanego pliku konfiguracyjnego. Plik ten dostępny jest w katalogu „examples” pakietu hostapd: /usr/share/doc/hostapd/examples/hostapd.conf.gz
Interfejs wlan0 mamy skonfigurowany, zatem powinno wystarczy wystartowanie usługi.
root@htpc1:~# /etc/init.d/hostapd start
Co dalej ? Coś nie działa ? DHCP nie startuje ? Hostapd się nie podnosi ? Mam nadzieję, że nie. Aczkolwiek zawsze mogłem się gdzieś pomylić ;)
Powiązane wpisy:
W: debian, HTPC · Opisany jako: bezprzewodowy ruter, debian, debian firewall, debian htpc, debian zapora, hostapd, hotspot, hotspot wifi, htpc linux, linux hotspot, linux ruter wifi, router, ruter, ruter wifi