FreeBSD + Sdi + Lan
SDI, FreeBSD i sieć lokalna
Idąc za wołaniem potrzebujących, pragnę przedstawić receptę na małą sieć zasilaną sdi. Urządzenie konfiguruje się w ten sam sposób, co modem zewnętrzny, nie ma z tym większego problemu.
Troszeczkę jeszcze wstępnie...
Niejednokrotnie spotkaliście się z sieciami. Mogą to być sieci w firmach, także sieci osiedlowe. Idea łączenia komputerów za pomocą specjalnego okablowania jest wspaniała, a ściślej jest nią dzielenie dóbr rzadkich.
W ramach tego artykuły zaprezentuję, jak FreeBSD, podłączony do Internetu, może dzielić się z siecią lokalną owym połączeniem.
Niezbędne założenia
Zakładam, że dysponujesz komputerem z zainstalowanym systemem FreeBSD, a także, że posiadasz co najmniej minimalną wiedzę o środowisku Unix. Przypuszczam także, że masz w komputerze będącym serwerem jedną kartę sieciową. Oczywiście, dla większej ilości podane reguły będą sprawowały się dobrze, ale niestety nie można ich przepisać bezpośrednio za znakiem zachęty Twojego systemu. Konfiguracja, którą poniżej zaprezentuję działa na pewno z wersją 4.4 oraz 4.5 systemu. Podejrzewam, że w tych podstawach nic nie powinno się zmienić.
Najważniejsze założenie: Uda Ci się, ponieważ to banalnie proste.
Konfigurujemy karty sieciowe
Po pierwsze skonfigurujemy karty Ethernet. Jedną po stronie serwera, pozostałe - dla najbardziej typowego rozwiązania - na komputerach z oprogramowaniem Windows (mniej wnikliwie).
Adresy IP są przypisywane konkretnym urządzeniom w sieci. Każdy musi takowy adres posiadać.
Twój serwer - brama dla komputerów z wewnątrz sieci, musi posiadać dwa adresy. Jeden adres widoczny jest od strony Internetu, drugi, od strony sieci lokalnej. Można postawić pytanie "Po co to wszystko?". Powód jest prosty. Nie dysponujesz wieloma numerami IP, które są publiczne. Czy istnieje jakieś rozwiązanie? Tak. Możesz użyć puli adresów, które przeznaczone są do tego typu celów. Nie wgłębiając się w szczegóły tego zagadnienia, proponuję konfigurację dla karty sieciowej serwera 192.168.1.1.
Najpierw w systemie FreeBSD, zalogowani jako root, musimy sprawdzić, czy i jak jądro wykryło urządzenie sieciowe.
Ogólnie rzecz ujmując polecenie dmesg zwraca informacje wyświetlane na ekranie podczas startu systemu. Należy tam odnaleźć informację o karcie Ethernet. Pomocnym może okazać się filtr grep.
Przykładową odpowiedzią systemu może być linia
Oprócz informacji o przydzielonych przerywaniach, typie karty, pierwszym "słowem" jest informacja o nazwie urządzenia w systemie. W tym przykładzie karta sieciowa nazywa się ed0.
Możemy zabrać się za edycję pliku /etc/rc.conf. Dopisanie poniższej linii, spowoduje przypisanie konkretnego numeru ip (tego z puli adresów lokalnych) do konkretnego urządzenia w systemie.
Po resecie systemu, nowa konfiguracja zostanie wprowadzona.
Inne metody
Można ustawić kartę sieciową bez potrzeby resetowania komputera. Poleceniem, którym możemy to wykonać nie zapisujemy zmian trwale. Innymi słowy po ponownym uruchomieniu wprowadzona konfiguracja zostaje zapomniana. Jeśli wiążesz Swoje zainteresowania albo przyszłość z systemami unixowymi, zapoznaj się wnikliwie z podręcznikiem systemowym dot. ifconfig.
Kolejną metodą, która pozwala skonfigurować kartę sieciową jest uruchomienie konfiguratora /stand/sysinstall. Jest to bardzo szybka metoda. Algorytm jej działania jest, tak podejrzewam, podobny do naszego z pierwszej metody. My jedynie wybieramy urządzenia z listy, które chcemy skonfigurować, wypełniamy stosowne pola, potwierdzamy zmiany.
Pokrótce o sysinstall'u:
Wybieramy Index [Zbiór wszystkich funkcji], następnie Configure [Menu konfiguracyjne systemu], później Networking [Konfiguracja dodatkowych urządzeń sieciowych], Interfaces [Konfiguracja interfejsów sieciowych], pierwsza z góry jest z reguły karta sieciowa. Oznaczenia urzšdzenia mogą być różne, najpopularniejszymi są ed0 lub rl0, w zależności od modelu karty. Odpowiadamy na pytania, pierwsze, czy chcemy konfigurować adres ipv6, nie. Czy chcemy konfigurować DHCP, nie. W wyświetlonym formularzu wpisujemy co następuje:
Domain: [uzupełni się samo na podstawie Host]
IPv4 Gateway: [brama, pola tego nie wypełniamy, my będziemy bramą]
Name server: [wpiszemy później manualnie]
IPv4 Address: [w naszym przykładzie poprawnym wpisem będzie 192.168.1.1]; Netmask: [255.255.255.0]
Extra options: [dodatkowych opcji to zagadnienie nie wymaga]
[OK]
Would you... [czy chcesz uruchomić urządzenie teraz?] [Yes]
Następnie z listy [exit] [OK], [exit] [OK], [Cancel]. Opuszczamy konfigurator [X Exit Systinstall]
Następnie poleceniem ifconfig sprawdzamy, czy urządzenie faktycznie zostało skonfigurowane tak, jak sobie tego życzyliśmy. Istotne jest odnalezienie wpisu inet 192.168.1.1. netmask 0xffffff00. Ifconfig jest potężnym narzędziem, warto poznać jego możliwości, wszystkie opisane w manualu man ifconfig.
Czas uruchomić sdi. Będzimemy musieli uzupełnić 1 plik konfiguracyjny.
Wyedytuj swoim ulubionym edytorem następujący plik /etc/ppp/ppp.conf. Prawdopodobnie plik ten znajduje się pod inną nazwą, a mianowicie /etc/ppp/ppp.conf.default. Należy go zatem powielić, pisząc:
cp /etc/ppp/ppp.conf.default /etc/ppp/ppp.conf .
Najlepszy, ze względu na uniwersalność [dostępny w każdym systemie unixowym] jest edytor vi. Jeśli jednak nie znasz komend ani zasad działania vi, użyj prostszego edytora o nazwie ee.
Pola zakreślone w nawiasy kwadratowe należy uzupełnić. Oto plik ppp.conf:
# PPP Sample Configuration File
# Originally written by Toshiharu OHNO
# Simplified 5/14/1999 by wself@cdrom.com
#
# See /usr/share/examples/ppp/ for some examples
#
# $FreeBSD: src/etc/ppp/ppp.conf,v 1.2.2.5 2001/07/13 10:55:23 brian Exp $
#################################################################
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
# Ensure that "device" references the correct serial port
# for your modem. (cuaa0 = COM1, cuaa1 = COM2)
#
set device /dev/cuaa0 [jeśli podłączyliśmy na com1 to cuaa0, jeśli na
com2 to cuaa1 itd]
set speed 115200 [prędkość portu rs232]
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
\"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
set timeout 0 [wyłączamy timeout] # 3 minute idle timer (the default)
enable dns # request DNS info (for resolv.conf)
papchap:
#
# edit the next three lines and replace the items in caps with
# the values which have been assigned by your ISP.
#
set phone 0 [nieistontne dla nas pole, numer do wykręcenia podczas połączenia]
set authname [nazwa uzytkownika]
set authkey [haslo dostepu]
set ifaddr 123.123.123.123 0.0.0.0 [123.123.123.123 wstaw tam Swój IP]
add default HISADDR # Add a (sticky) default route
Najprzyjemniej jest poczytać man dotyczący ppp, dlatego zrobimy krok następny, dociekliwym pozostawiając wszelkie pozostałe opcje ppp.
Nie musisz martwić się o Swoje hasło, jest ono, w tym miejscu, bezpieczne, ponieważ użytkownicy nie mają prawa do odczytu Twojej konfiguracji.
Wyedytujmy teraz plik używany przy starcie systemu. Plik ten nazywa się /etc/rc.conf. RC to z angielskiego Run Command [uruchom komendę], odczytywany i wykonywany jest przez programy uruchamiające FreeBSD.
Dla naszego przykładu wystarczającą konfiguracją jest:
ifconfig_ed0="inet 192.168.1.1 netmask 255.255.255.0"
ppp_enable="YES"
ppp_mode="dedicated"
ppp_nat="YES"
ppp_profile="papchap"
ppp_user="root"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="OPEN"
gateway_enable="YES"
Jak widać, znajdują się tutaj dane, które uprzednio zdążyliśmy wpisać. Hostname, nazwa tego komputera może zostać tutaj ponownie zmieniona. Kolejna linia, ifconfig_ed0 [lub np rl0] jest konfiguracją karty sieciowej, również można dokonać poprawek.
Kolejna sekcja zarządza ppp. Odpowiednio mamy:
- ppp_enable="YES" uruchamiamy ppp przy starcie;
- ppp_mode="dedicated" tryb uruchamiania, może być auto, lub inne, my chcemy dedicated, by zadedykować go sekcji papchap pliku ppp.conf;
- ppp_nat="YES" ppp będzie tłumaczył adresy publiczne na lokalne;
- ppp_profile="papchap" wybrana przez nas sekcja (część pliku) z ppp.conf;
- ppp_user="root" użytkownikiem, który uruchomi ppp, będzie root.
- Sekcja dotycząca ściany ogniowej (ang. firewall).
firewall_script="/etc/rc.firewall" podajemy plik konfiguracyjny firewalla; - firewall_type="OPEN" definiujemy typ firewalla, ustawiamy otwarty.
- gateway_enable="YES" uruchamiamy usługę, dzięki której nasz serwer będzie odgrywał rolę bramki internetowej.
Wszelkie zmiany w rc.conf zostaną odnotowane dopiero po ponownym uruchomieniu komputera.
Jeśli po ponownym uruchomieniu komputera nie zapaliły się lampki na teminalu sdi, musimy podjąć pewne czynności naprawcze. Po pierwsze sprawdź okablowanie, po drugie, czy podłączyłeś terminal do portu, który zdefiniowałeś w ppp.conf (chodzi mi tutaj o COM1 i COM2). Po kolejne, sprawdź, czy nie zrobiłeś jakiejś literówki w plikach konfiguracyjnych.
Plik /etc/resolv.conf, jak dotąd go nie było, pojawił się. Jest on już uzupełniony w adresy IP serwerów nazw, przeznaczonych dla Ciebie.
Sprawdzamy, czy działa.
Jeśli ekran nie przestaje zapełniać się odpowiedziami, a zobaczyliśmy tylko kilka linii wyświetlanych przy starcie programu ping, sprawdzamy inny serwer:
Wracają? Jeśli tak, to gratuluję, jeśli nie, cofnij się do góry i zacznij od początku.
Konfiguracja po stronie Windows.
Konfiguracja po stronie Windows sprowadza się do zainstalowania karty sieciowej, ustawienia dla niej numeru IP we właściwościach TCP/IP karty [każdy musi mieć osobny numer od 192.168.1.2 do 192.168.1.254 o masce 255.255.255.0], dodaniu domyślnej bramy o numerze 192.168.1.1. Należy także wpisać serwery nazw DNS: 194.204.152.34 i zapasowy 194.204.159.1. Po ponownym uruchomieniu klikamy explorera i sprawdzamy, czy połączenie działa. Jeśli serwer utrzymuje połączenie, a na kliencie, czyli Windowsie nie ma, przyczyna najprawdopodobniej leży w konfiguracji sieciowej Windowsa.
Problemy
Na niektórych maszynach połączenie jest zrywane (losowe odstępy czasowe, różna częstotliwość).
Rozwiązanie:
W /etc/recover_sdi.sh umieścić:
#
# _ _
# ___ | | ___ ___ _______| | __
# / _ \| |/ _ \/ __|_ / _ \ |/ /
# | (_) | | __/ (__ / / __/ <
# \___/|_|\___|\___/___\___|_|\_\
#
#
#
my_ip=127.0.0.1 #tutaj wpisz ip sdi - publiczny, np. 217.98.151.83
# ;-) duh
ping=/sbin/ping
grep=/usr/bin/grep
cat=/bin/cat
ppp=/usr/sbin/ppp
rm=/bin/rm
ifconfig=/sbin/ifconfig
# taking probe...
problem=`$ping -c 3 $my_ip | $grep "100% packet loss"`
if [ "$problem" ] ; then
kill -9 `$cat /var/run/tun0.pid`
$rm /var/run/tun0.pid
$ifconfig tun0 delete
$ppp -nat -dedicated papchap
# echo "Disconnection!" | mail root;
date >> /var/disconnects;
sleep 35
problem_znowu=`$ping -c 3 $my_ip | $grep "100% packet loss"`
if [ "$problem_znowu" ] ; then
kill -9 `$cat /var/run/tun0.pid`
$rm /var/run/tun0.pid
$ifconfig tun0 delete
$ppp -nat -dedicated papchap
# echo "Still disconnected!" | mail root;
fi
fi
Dodać do /etc/crontab wpis:
Sposób średnio pomysłowy, ale działa.
quex, pon., 25/02/2008 - 01:32
