[How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Instalacja i konfiguracja oprogramowania sieciowego.
Awatar użytkownika
luk1don
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1768
Rejestracja: 07 lis 2008, 16:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86

[How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: luk1don »

Witam po małej nieobecności.
Przedstawiam tutaj prosty sposób na udostępnianie internetu mobilnego (tu Aero2) na Linuksie (Ubuntu). Nie potrzeba tworzyć żadnych sieci ad-hoc, z których rozpoznaniem np. przez smartfony różnie bywa. Wystarczy, że mamy w swojej maszynie wolną kartę wifi, która to nie musi wcale wspierać master mode.
Oczywiście udostępnianie Aero2 jest wyłącznie na potrzeby własne! Zatem, do dzieła!
Co będzie potrzebne, instalujemy:

Kod: Zaznacz cały

sudo apt-get install wvdial hostapd dnsmasq
Reszta powinna być już w systemie.
Konfiguracja wvdial:

Kod: Zaznacz cały

sudo gedit /etc/wvdial.conf
[Dialer Defaults]
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Username =;
Password =;
Init1 = AT+CGDCONT=1,"IP","darmowy","",0,0
Init2 = AT^SYSCFG=14,0,3FFFFFFF,1,2 # wymuszenie 3G
;Init2 = AT^SYSCFG=2,2,2000000000000,1,2 # wymuszenie wcdma900
Modem = /dev/ttyUSB0
Baud = 460800
Carrier Check = no
Dial Command = ATDTW
Stupid Mode = 1
Auto DNS = 1
Dodatkowo:

Kod: Zaznacz cały

sudo gedit /etc/ppp/peers/wvdial
Dodajemy, odhashowujemy:
defaultroute

Kod: Zaznacz cały

sudo gedit /etc/ppp/options

Dodajemy, odhashowujemy:
-chap

Kod: Zaznacz cały

sudo gedit /etc/ppp/options
Dodajemy, odhashowujemy:
persist
Konfiguracja demona hostapd:

Kod: Zaznacz cały

sudo gedit /etc/default/hostapd
Dodajemy, odhashowujemy:
DAEMON_CONF="/etc/hostapd.conf"
RUN_DAEMON=yes

Kod: Zaznacz cały

sudo gedit /etc/hostapd.conf
Ustawiamy taką przykładową zawartość (sieć o SSID "necik", kanał 6, interfejs karty wifi wlan0, sieć bez szyfrowania, otwarta - można zmienić, dokumentacja hostapd jest w sieci, itp.):
interface=wlan0
driver=nl80211

ssid=necik
channel=6

ignore_broadcast_ssid=0

country_code=PL
ieee80211d=1
hw_mode=g
# supported_rates=10 20 55 110 60 90 120 180 240 360 480 540
# ieee80211n=1
# ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]
beacon_int=100
dtim_period=2
macaddr_acl=0
max_num_sta=20
rts_threshold=2347
fragm_threshold=2346
#auth_algs=3
# wmm
wmm_enabled=0
Konfiguracja interfejsów sieciowych i przy okazji ustawienie iptables:

Kod: Zaznacz cały

sudo gedit /etc/network/interfaces
auto lo
iface lo inet loopback

auto ppp0
iface ppp0 inet wvdial

auto wlan0
iface wlan0 inet static
address 192.168.3.1
netmask 255.255.255.0
broadcast 192.168.3.255

up /sbin/iptables -F
up /sbin/iptables -X
up /sbin/iptables -t nat -F

up iptables -A FORWARD -o ppp0 -i wlan0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
up iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
up sysctl -w net.ipv4.ip_forward=1
Ustawiamy demona dnsmasq:

Kod: Zaznacz cały

sudo gedit /etc/dnsmasq.conf
Następujące linie odhashowujemy, ustawiamy:
interface=wlan0
no-dhcp-interface=ppp0
dhcp-range=interface:wlan0,192.168.3.20,192.168.3.200,infinite
wvdial coś nie chce wznawiać ostatnio połączenia automatycznie, zatem tworzymy do tego skrypt i przy okazji będzie łączył po wsunięciu modemu:

Kod: Zaznacz cały

sudo gedit /usr/local/bin/wznawiaj_ppp0
Treść
#!/bin/bash

LOGGER=/usr/bin/logger

MSG="$0 (PID:$$) uruchomiony"
echo $MSG
$LOGGER "$MSG"

PROG="wvdial"

PID=`pidof $PROG`
if test "$PID" != "" ;
then
echo "$PROG jest uruchomiony (PID: $PID)..."
exit 0
fi

MSG="$0 (PID:$$): $PROG nie jest uruchomiony!! Uruchamianie $PROG ..."
echo $MSG
$LOGGER "$MSG"

CMD="/sbin/ifdown ppp0"
MSG="$0 (PID:$$): wykonywanie polecenia: $CMD "
echo $MSG
$LOGGER "$MSG"
$CMD

CMD="/sbin/ifup ppp0"
MSG="$0 (PID:$$): wykonywanie polecenia: $CMD "
echo $MSG
$LOGGER "$MSG"
$CMD

exit 0
Nadajemy skryptowi uprawnienia wykonalności.
Edytujemy:

Kod: Zaznacz cały

sudo gedit /etc/crontab
i dodajemy do crona na końcu linijkę:
*/1 * * * * root /usr/local/bin/wznawiaj_ppp0
Tak to wygląda w przybliżeniu (bo funkcjonuje).
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: [How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: jacekalex »

Cześć

1. Wznawianie połączenia jest domyślnym zachowaniem vwdial, "skryptologia praktyczna" azhagowi lepiej wyszła:
http://dug.net.pl/tekst/197

2. Firewall lepiej pakować nie do interfaces, lecz jako skrypt w

Kod: Zaznacz cały

/etc/network/if-up.d/
Jest to elastyczniejsze i odporniejsze na aktualizacje rozwiązanie.

3. Nigdzie nie zauważyłem informacji, jak obecność NM wpływa na powyższe ustawienia, a w Ubuntu ładują go domyślnie.
Świadomość tego, że NM ma demona, który pilnuje parametrów sieci w trybie ciągłym (i zawsze "wie lepiej od użytkownika"), też nie jest w Narodzie zbyt powszechna. :twisted:

Pozdrawiam
:craz:
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
Awatar użytkownika
luk1don
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1768
Rejestracja: 07 lis 2008, 16:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86

Re: [How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: luk1don »

Tak właśnie, praktycznie wvdial domyślnie powinien wznawiać połączenie Aero2 - nie chciał wznawiać w tym wypadku.
W tamtym tutku też widzę dwa skrypty do startowania połączenia. Ja skupiłem się na interfejsie ppp0, bo zająłem się udostępnianiem, a przy okazji skrypt jest jeden, a reguły iptables dałem do interfaces od razu, bo było mi szybciej. Sama konfiguracja Aero za pomocą wvdial na Ubuntu istnieje już dawno i Network Manager nic się nie "rzuca".
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: [How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: jacekalex »

Z tym wvdialem to chyba tymczasowy problem, tu raczej Ubuntowa bugzilla się kłania.
Co prawda nie z Aero, ale mam wvdial, czasem puszczam go z zabytkową Nokią po BT, i przy utracie połączenia wznawia je automatycznie bez żadnego miauczenia, domyślnie tylko czeka 10 sekund przed nową próbą.

NM nie rzuca się na Aero? bardzo milo z jego strony, ale mam na myśli wpisanie interfejsu do interfaces.
Kartami wifi NM opiekuje się bardzo troskliwie, czego dowodem są wieczne kłopoty z wifi na Ubuntu czy Debianie.

Z iptables nic szybciej czy wolniej nie uzyskasz, to są setne sekundy, w skrypcie natomiast można sobie to znacznie lepiej pukładać, i nawet, gdyby przy aktualizacji nadpisało interfaces (kiedyś na Ubuntu mi się tak zdażyło), skryptu nie dotknie.

Skrypty z tamtego tutka?
Fajnie zapisują czas nawiązania połączenia, i zamiast katować Crona co minutę, dałbym pętlę while, żeby sprawdzał czy ma połączenie raz na kilka minut, i wisiał, jak demon, i ewentualnie odliczał czas do rozłączenia, jeśli ma resetować i wznawiać połączenie niezależnie od wvdial.

Jest to o tyle prostsze rozwiązanie, że np cron z każdej akcji wysyła maila, a /var/mail/root nie jest z gumy.

EDIT:
TU masz najprostszy sposób resetowania wvdial, z basha, bez żadnego Crona:
http://forum.dug.net.pl/viewtopic.php?p ... 28#p199228

Pozdrawiam
:craz:
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
Awatar użytkownika
luk1don
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1768
Rejestracja: 07 lis 2008, 16:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86

Re: [How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: luk1don »

Puściłem teraz to wvdial w pętli while i niestety Aero mi nie wznowił: Cannot open /dev/ttyUSB0: Device or resource busy
Nie chce mi się teraz szukać rozwiązania, a ten skrypt w cronie działa doskonale :)
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: [How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: jacekalex »

Puściłem teraz to wvdial w pętli while i niestety Aero mi nie wznowił: Cannot open /dev/ttyUSB0: Device or resource busy
fuser albo lsof i ubić proces, który blokuje /dev/ttySO?
Coś w typie:

Kod: Zaznacz cały

for proces in `lsof /dev/rfcomm* | awk '{print $2}' | grep -v PID`; do kill -9 $proces; done;
Może trzeba by troszkę pomajstrować. ;)

Poza tym sprawa zablokowania /dev/ttySO czy innego urządzenia jest dość indywidualna, mam w domu 2 komórki, na jednej ten sam objaw, jak idzie przez BT, na drugiej takiego problemu nie ma.

Pozdrawiam
:craz:
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
Awatar użytkownika
quadro13
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 09 sty 2009, 20:44
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86_64

Re: [How-to] Udostępnianie Aero2 i innych sieci na inne urządzenia - darmowy AP

Post autor: quadro13 »

luk1don pisze:Puściłem teraz to wvdial w pętli while i niestety Aero mi nie wznowił: Cannot open /dev/ttyUSB0: Device or resource busy
Nie chce mi się teraz szukać rozwiązania, a ten skrypt w cronie działa doskonale :)
Wyłącz(zahaszuj spowrotem)
persist
w

Kod: Zaznacz cały

sudo gedit /etc/ppp/options
Bo to sprawia, że ppp próbuje wznowić połączenie i blokuje porty przed wvdial(który wywołuje ppp). Może tak próbować i może mu się uda, ale u mnie udało mu się może raz na 3 dni prób :d

Większość poradnika spoko, ale dla mnie(aero) lepiej sprawdziło się do wznawiania połączenia to:

Kod: Zaznacz cały

#! /bin/bash
(
   while : ; do
       wvdial
       sleep 10
   done
) &
ODPOWIEDZ

Wróć do „Sieci, serwery, Internet”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości