Internet przez Bluetooth z Windows do Linux

Udostępnianie łącza internetowego z Windows XP (SP3) do Ubuntu Intrepid (8.10) poprzez sieć Bluetooth PAN (Personal Area Networking)

Problem. Komputer stacjonarny A z Windows XP (SP3) łączy się z Internetem przez modem ADSL lub GPRS/EDGE. Chcę udostępnić bezprzewodowo to połączenie internetowe drugiemu komputerowi B (np. typu laptop) z systemem linuksowym Ubuntu Intrepid (8.10). Nie posiadam routera z WiFi.

Proponowane rozwiązanie. Udostępnienie łącza internetowego poprzez Bluetooth po protokole BNEP w sieci PAN.

Wymagania. Komputer z Windows XP (A) powinien mieć poprawnie zainstalowane oprogramowanie dołączone do adaptera Bluetooth oraz dodatek Service Pack 3 (lub przynajmniej 2). Adapter musi oferować usługę "Dostęp sieciowy" (lub podobnie brzmiącą, umożliwiająca tworzenie sieci PAN) oraz możliwość pracy w trybie NAP (Network Access Point). Większość nowych adapterów Bluetooth oferuje wymienione usługi.

Konfiguracja na Windows XP

Używane określenia związane z oprogramowaniem dołączonym do adaptera mogą się różnić w zależności od producenta adaptera i oprogramowania (oraz spolszczenia).

Urządzenia należy sparować z poziomu Windows XP. Parowanie z poziomu Ubuntu Intrepid prawdopodobnie zakończy się błędem.

W momencie, gdy tylko komputer B (np. laptop) znajdzie się w zasięgu komputera A należy udostępnić mu usługę Dostęp sieciowy bez żądania autoryzacji (dla adaptera ASUS: Moje miejsca interfejsu Bluetooth\Całe otoczenie interfejsu Bluetooth, wybierz urządzenie B i z menu kontekstowego Właściwości przejdź do zakładki Autoryzacja, zaznacz pole Dostęp sieciowy).

Następnym krokiem jest edycja usług oferowanych przez adapter na A (dla adaptera ASUS: Moje miejsca interfejsu Bluetooth\Moje urządzenie). Poniższy akapit dotyczy adaptera ASUS (w przypadku adapterów innych firm procedura powinna być podobna).

Wybierając Właściwości z menu kontekstowego dla Dostęp sieciowy można ustalić rolę, w jakiej będzie pracował komputer A. Należy wybrać opcję Zezwalaj innym urządzeniom na dostęp do Internetu/sieci LAN poprzez ten komputer. Dzięki temu urządzenie A stanie się punktem dostępowym (NAP).

Okno Właściwości dla usługi Dostęp sieciowy

Ostatnia część konfiguracji to udostępnienie łącza internetowego dla interfejsu Bluetooth. Wejdź do Panel sterowania -> Połączenia sieciowe i wybierz z menu kontekstowego aktywnego połączenia internetowego (tego, przez które łączysz się z Internetem) opcję Właściwości, dalej zakładkę Zaawansowane. Zaznacz pole Zezwalaj innym użytkownikom sieci na łączenie się poprzez połączenie internetowe tego komputera.

Należy zapisać adres IP oraz maskę sieci aktywowanej LAN Bluetooth (dla adaptera ASUS: Sieć interfejsu Bluetooth). W tym celu wybierz z menu kontekstowego połączenia LAN Bluetooth opcję Stan, a dalej zakładkę Obsługa. Jeżeli komputer nie udostępnia innych sieci, to domyślnym adresem IP powinien być 192.168.0.1 wraz z maską 255.255.255.0.

Uwagi

Jeżeli opcja Zezwalaj innym użytkownikom sieci na łączenie się poprzez połączenie internetowe tego komputera nie istnieje w zakładce Zaawansowane aktywnego połączenia internetowego, należy sprawdzić, czy urządzenie B jest w zasięgu adaptera Bluetooth na komputerze A.

W oknie Połączenia sieciowe powinna znajdować się ikona związana z siecią LAN Bluetooth (dla adaptera ASUS: Sieć interfejsu Bluetooth). To połączenie musi być włączone (menu kontekstowe i opcja Włącz). Proponuję również zdjąć z niego ochronę firewallem.

Zaznaczenie na aktywnym połączeniu sieciowym opcji Zezwalaj innym użytkownikom sieci na łączenie się poprzez połączenie internetowe tego komputera wymaga zresetowania tego połączenia (rozłączenie się i ponowne połączenie). Wyłączenie (bądź zresetowanie) systemu dezaktywuje udostępnianie połączenia internetowego – trzeba je każdorazowo aktywować po uruchomieniu systemu.

Konfiguracja na Ubuntu Intrepid

W Internecie można znaleźć sporo artykułów nt. sposobów tworzenia sieci PAN pod Ubuntu oraz udostępniania (dzielenia) łącza poprzez Bluetooth. Niestety żaden z nich nie chciał działać na moim sprzęcie. Rozwiązanie zamieszczone poniżej, jak dotychczas, sprawuje się dobrze :-)

Konfiguracja sieci PAN dla Ubuntu polega na edycji kilku plików tekstowych oraz sprawdzaniu wpisów do dziennika systemowego (Administracja -> Dziennik systemowy).

Wszystkie poniższe zmiany w konfiguracji systemu wymagają praw dostępu roota. Aby edytować każdy z wymienionych niżej plików należy użyć sudo.

Utworzenie interfejsu sieciowego. Do pliku /etc/network/interfaces dopisz:

auto bnep0
iface bnep0 inet static
address 192.168.0.100
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.1
broadcast 192.168.0.255

Adres 192.168.0.100 będzie przyporządkowany komputerowi B. Jeżeli masz już taki adres przyporządkowany innemu interfejsowi na B, wpisz inny adres w sieci, do której należy IP interfejsu LAN Bluetooth na A. Adres IP interfejsu LAN Bluetooth na A to gateway. Jeżeli masz ten adres inny niż 192.168.0.1 musisz wpisać odpowiednie adresy broadcasta, adresu sieci oraz maskę. Kilka przydatnych informacji na ten temat znajduje się tutaj.

Od tej pory adres 192.168.0.1 będzie odnosił się do adresu interfejsu LAN Bluetooth na A, a adres 192.168.0.100 do interfejsu na B.

Do pliku /etc/resolv.conf dodaj linię (ew. stwórz taki plik, jeżeli nie istnieje):

nameserver 192.168.0.1

Aby zapewnić ładowanie modułu BNEP przy starcie systemu do pliku /etc/modules dodaj linię:

bnep

Przed następnym krokiem bezpiecznie będzie wyłączyć interfejs Bluetooth:

sudo /etc/init.d/bluetooth stop

Dopisz do /etc/default/bluetooth (lub zmień na zamieszczone, jeżeli już istnieją) te linie:

PAND_ENABLED=1
PAND_OPTIONS="--role PANU"

Następnie:

sudo mkdir /etc/bluetooth/pan

Ostatnim krokiem jest stworzenie skryptów uruchamiających i zamykających połączenie. W /etc/bluetooth/pan stwórz plik dev-up o takiej treści:

#!/bin/bash
sudo modprobe bnep
sudo pand --role PANU --search --service NAP
sleep 30
sudo ifconfig bnep0 192.168.0.100
sudo ifup bnep0
sudo pand –list

oraz plik dev-down o zawartości:

#!/bin/bash
sudo pand -K
sudo ifdown bnep0
sudo pkill pand

Zmień prawa dostępu:

sudo chmod +x /etc/bluetooth/pan/dev-up
sudo chmod +x /etc/bluetooth/pan/dev-down

Zrestartuj system.

Komputer B połączy się z Internetem poprzez łącze Bluetooth udostępniane przez dowolne inne urządzenie po protokole BNEP, gdy wpiszesz w konsolę:

sudo /etc/bluetooth/pan/dev-up

Aby zamknąć połączenie, wpisz:

sudo /etc/bluetooth/pan/dev-down

Uwagi

Jeżeli pand informuje o rozłączeniu w dzienniku systemowym syslog komunikatem tej postaci:

Connection refused (111)

to prawdopodobnie adapter na komputerze A nie działa poprawnie lub nie udostępniono na nim usługi Dostęp sieciowy bez autoryzacji (ew. nie sparowano urządzeń). Sprawdzenie po stronie Ubuntu:

hcitool scan

lub/oraz

sdptool search NAP

Pierwsze polecenie pokaże listę urządzeń w zasięgu, drugie wyszuka usługę NAP (punkt dostępowy do sieci) na urządzeniach w zasięgu. Zwrócenie przez sdptool jedynie adresu MAC urządzenia oznacza błąd po stronie adaptera na komputerze A.

Komunikat typu protocol error zazwyczaj wskazuje na błąd po stronie A.

"Ostatnią" deską ratunku może być zrestartowanie sieci i zabicie procesu pand:

sudo /etc/init.d/bluetooth  stop
sudo /etc/init.d/networking stop
sudo pkill pand
sudo /etc/init.d/networking start
sudo /etc/init.d/bluetooth  start

Sprawdzenie połączenia

Po uruchomieniu skryptu dev-up (można dodatkowo sprawdzić zawartość syslog) warto przetestować działanie połączenia. Sprawdzenie, czy serwery nazw i brama są dobrze skonfigurowane:

ping example.com

Wszystko działa poprawnie, gdy podany dla ping adres zostanie przetłumaczony na IP oraz dostaniemy odpowiedź z serwera o takim adresie.

Gdy jest podejrzenie, że połączenie zostało przerwane, można to sprawdzić wpisując w konsolę:

pand -l

To polecenie powinno zwrócić dane o adresie MAC urządzenia, do którego jest się podłączonym oraz rolę PANU. Brak takiej informacji oznacza przerwane połączenie (najczęściej przerywa je z niewiadomego powodu avahi-daemon). Aby połączyć się ponownie z siecią należy uruchomić skrypt dev-down, a następnie dev-up.

Valid XHTML 1.0 Strict