W poniższym wpisie opiszemy jak w systemie OpenBSD połączyć się z modemem DSL, używając protokołu PPPoE (Point-to-Point Protocol over Ethernet). W tym przypadku mamy dwie możliwości: używając aplikacji ppp
lub korzystając bezpośrednio z pseudo-urządzenia pppoe
(pseudo-device pppoe).
Aplikacja ppp
Pliki konfiguracyjne znajdziemy w katalogu /etc/ppp
, a główny plik konfiguracyjny to ppp.conf
. Cały plik jest podzielony na sekcje z różnymi przykładami. Nas interesuje protokół pppoe, znajdziemy go w sekcji pppoe:
. Właściwie jedyne co należy wpisać to nasz login (set authname
) i hasło (set authkey
) oraz podać nazwę interfejsu do którego podłączony jest modem DSL (set device
) :
root@fw-s:/etc/ppp>tail -n 20 /etc/ppp/ppp.conf pppoe: set device "!/usr/sbin/pppoe -i vr1" set mtu max 1492 set mru max 1492 set speed sync set crtscts off disable acfcomp protocomp vjcomp pred1 deflate disable ipv6cp deny acfcomp enable lqr accept lqr set lqrperiod 30 set cd 5 set login set authname "LOGIN" set authkey "HASLO" enable mssfixup
Aby nawiązać połączenie wpisujemy:
root@fw-s:/etc/ppp>ppp -ddial pppoe Working in ddial mode Using interface: tun1
W systemie zostanie utworzony nowy interfejs (w tym przypadku tun1
), który jest połączony z fizycznym interfejsem vr1
(bridge). Jeśli nasza konfiguracja jest poprawna, otrzymamy od naszego providera adres IP, który zostanie przypisany do interfejsu:
root@fw-s:/etc/ppp>ifconfig tun1 tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492 priority: 0 groups: tun status: active inet X.X.X.X --> Y.Y.Y.Y netmask 0xffffffff
Gdzie X.X.X.X to nasz adres IP. W razie problemów, możemy zawsze zajrzeć do logów:
root@fw-s:/etc/ppp>grep "ppp" /var/log/daemon.lg Aug 5 12:20:13 fw-s ppp[24801]: Phase: Using interface: tun1 Aug 5 12:20:13 fw-s ppp[24801]: Phase: deflink: Created in closed state Aug 5 12:20:13 fw-s ppp[24801]: tun1: Command: default: set device /dev/cua01 Aug 5 12:20:13 fw-s ppp[24801]: tun1: Command: default: set speed 115200 Aug 5 12:20:13 fw-s ppp[24801]: tun1: Command: pppoe: set device !/usr/sbin/pppoe -i vr1
Dodatkowo ppp
może uruchomić dowolny skrypt podczas włączenia/wyłączenia interfejsu. W takim wypadku w katalogu /etc/ppp
musimy utworzyć pliki ppp.linkup
i ppp.linkdown
:
root@fw-s:/etc/ppp>cat /etc/ppp/ppp.linkup MYADDR: !bg sh -c "echo $(date "+%Y%m%d-%H%M") LINK UP >> /tmp/ppp.txt"
Test szybkości przy użyciu ppp
Niestety podczas połączenia przez ppp
transfer był bardzo niestabilny i zauważalne były bardzo częste spadki prędkości nawet do kilkudziesięciu kilobitów na sekundę. Przykład poniżej (plik pobierany ze strony kernel.org):
Sytuacja ta ma miejsce zarówno w wersji 4.8 jak i 4.9 systemu. Na szczęście problem ten nie występuje jeśli łączymy się używając pseudo-urządzenia pppoe
.
pseudo-device pppoe
W tym przypadku cała konfiguracja zamyka się w pliku /etc/hostname.pppoe0
:
root@fw-s:~>cat /etc/hostname.pppoe0 inet 0.0.0.0 255.255.255.255 NONE \ pppoedev vr1 authproto pap \ authname 'LOGIN' authkey 'HASLO' up dest 0.0.0.1 !/sbin/route add default -ifp pppoe0 0.0.0.1
Tutaj podobnie łączymy interfejs pppoe0
z fizycznym interfejsem vr1
. Ważnym jest, żeby vr1
był włączony (UP):
root@fw-s:~>cat /etc/hostname.vr1 up
Połączenie zostanie automatycznie podniesione podczas uruchomienia systemu. Można też sprawdzić konfigurację od razu , korzystając ze skryptu /etc/netstart
a jako parametr podać nazwę interfejsu:
root@fw-s:~>sh /etc/netstart pppoe0
Podobnie jak w przypadku aplikacji ppp
powinniśmy otrzymać adres adres IP od naszego providera:
root@fw-s:~>ifconfig pppoe0 pppoe0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1484 priority: 0 dev: vr1 state: session sid: 0x8ad PADI retries: 6 PADR retries: 0 time: 04:30:14 sppp: phase network authproto pap authname "LOGIN" groups: pppoe egress status: active inet6 fe80::200:24ff:fecb:d110%pppoe0 -> prefixlen 64 scopeid 0xf inet X.X.X.X --> Y.Y.Y.Y netmask 0xffffffff
Warto jeszcze ustawić maksymalny rozmiar segmentu (MSS) w pliku /etc/pf.conf
dla interfejsu pppoe0
:
match on pppoe0 scrub (max-mss 1440)
Opcja ta jest równoważna z ustawieniem enable mssfixup
w pliku ppp.conf
w przypadku połączenia przez aplikację ppp
.
Test szybkości
Tym razem nie było żadnych problemów z transferem, wszystko działało bardzo stabilne:
Więcej informacji znajdziemy jak zawsze w manualu. Dla ppp
wpisujemy (man pppoe
), a dla pseudo-urządzenia pppoe
: man 4 pppoe
Witam,
Chciałem podziękować za ten artykuł! Od dwóch miesięcy, od czasu zmiany szybkości Neostrady z 6 megabitów na 20, średnie transfery miałem na poziomie około 1/4 megabita. Po upgrade’zie OpenBSD z 4.7 do 5.0 bez zmian. Dopiero odejście od demona ppp na rzecz pseudo-urządzenia pppoe spowodowało, że wszystko działa jak trzeba.
Pozdrawiam
Paweł
dzięki! ciesze się, że wpis się przydał. sam straciłem na tym problemie troche nerwów.
pozdrowienia
Od wersji OpenBSD 5.1 wpis „match on pppoe0 scrub (max-mss 1440)” nie jest potrzebny, ogólnie max-mss nie jest potrzebne bo teraz pseudo-device pppoe obsługuje jumbo frames, RFC 4638
Teraz wystarczy:
inet 0.0.0.0 255.255.255.255 NONE mtu 1500 \
pppoedev em0 authproto pap \
authname ‚login’ authkey ‚hasło’ up
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1
The physical interface must also be configured like so:
# echo „up mtu 1508” > /etc/hostname.em0
Witam,
A czy nie powinno byc jeszcze:
# cat /etc/hostname.bridge0
add vr1
up
W tym przypadku? Oczywiscie vr1 jest umowne, bo to zalezy od karty sieciowej, u mnie bedzie to sis0.
Sam prawdopodobnie przejde na neo fiber i przygotowuje sobie konfiguracje.
Zapewne mój powyzszy komentarz jest bledny i to modem/router (ten od tp) trzeba przestawic w tryb bridge. Tak? http://www.elektroda.pl/rtvforum/topic2242445.html
W naszym przykładzie do routera (z OpenBSD) podłączony był modem DSL (jeśli chcemy podłączyć zewnętrzny router z funkcją modemu, trzeba by wyłączyć w nim funkcje routingu).
Plik hostname.bridge0 nie jest potrzebny. W pliku hostname.pppoe0 podajemy fizyczny interfejs z którym połączymy nasz interfejs pppoe0 (w naszym przykładzie jest to vr1 -> „pppoedev vr1”). Ogólnie to możliwości jest sporo, w tym przykładzie to własnie maszyna z OBSD dostanie IP, przez co możemy zrobić wszystko co nam się podoba (firewall, QoS, statystyki etc etc).
@admin: bardzo dziekuje za szybka odpowiedz. Az sie trzaslem na mysl, ze znowu bede musial konfigurowac i tracic nerwy przy pppoe(8). Pseudo-urzadzenie i hostname.pppoe0 jest tak wygodne, ze az przyjemnie to sie ustawia. I jak widac poprawili stabilnosc/wydajnosc przenoszac i usprawniajac kod do jadra systemu. Dzieki raz jeszcze, pozdrawiam serdecznie.
ciesze sie, że wpis pomógł. rzeczywiscie hostname.pppoe to zdecydowane usprawnienie, szczególnie jeśli chodzi o wydajność. sam „zmarnowałem” wiele dni na róznych testach, po to też ten wpis. pozdrawiam