Protokół PPPoE może być znakomitym rozwiązaniem w środowiskach, gdzie problem nieautoryzowanego dostępu do Internetu jest szczególnie groźny. Sieci radiowe WiFi są idealnym tego przykładem. Tam gdzie wbudowane mechanizmy zabezpieczeń stają się niewystarczające, zastosowanie PPPoE wydaje się dobrym lekarstwem. Wykorzystanie mocnego systemu uwierzytelniania (chap, ms-chap) daje wysoką gwarancję administratorowi, że osoba która w danym momencie korzysta z dostępu nie jest "obcym tworem", pragnącym za darmo korzystać z tego za co płacą inni użytkownicy. Klientowi daje natomiast pewność, że nikt obcy nie będzie w stanie podszyć się pod niego co będzie miało kolosalne znaczenie w spornych sprawach. (źródło)

Przygotowanie

Żeby uruchomić serwer PPPoE na linuksie potrzebujemy trzech rzeczy:
  • kernela z obsługą PPPoE
  • pakietu 'ppp'
  • pakietu 'rp-pppoe'

Konfiguracja kernela jak na screenshocie (Device drivers -> Network device support -> PPP over Ethernet):

konfiguracja kernela


Pakiet rp-pppoe instalujemy klasycznie:

emerge -va rp-pppoe

Jako zależność zostanie zainstalowany pakiet 'ppp'; jednakże trzeba zwrócić uwagę na flagi z jakimi zostanie zainstalowany - ja użyłem:

USE="activefilter atm dhcp eap-tls" emerge -va ppp

Konfiguracja

Konfiguracja sprowadza się do edycji pliku '/etc/ppp/pppoe-server-options':

#/etc/ppp/pppoe-server-options

require-chap
ms-dns 192.168.100.254
ms-dns 194.204.152.34
mtu 1472
mru 1472
lcp-echo-interval 50
lcp-echo-failure 20

W pliku '/etc/ppp/chap-secrets' należy skonfigurować użytkowników:

#/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client server secret IP addresses
"kate" eth0 "kate-password" 192.168.100.10

Uruchomienie

Serwer PPPoE uruchamia się poleceniem 'pppoe-server':

pppoe-server -I eth0 -C ZibikNET -S "TEST" -L 192.168.100.254 -N 1024 -k  

gdzie:
-I - interfejs Ethernet, na którym serwer PPPoE ma nasłuchiwać ramek PADI
-C - nazwa koncentratora
-S - nazwa usługi. Pól tych może być kilka, ale pierwsze używane jest jako domyślne dla ramek PADI bez wyszczególnionej nazwy koncentratora
-L - adres IP serwera PPPoE, na którym będzie zestawiał połączenia
-N - maksymalna liczba jednoczesnych sesji PPPoE
-k - wykorzystanie sterownika jądra

Możemy uruchomić 'tail -f /var/log/messages' i przy próbie połączenia zobaczymy:

Oct 24 04:58:44 zibik pppoe-server[25762]: Session 1 created for client 00:40:f4:6e:0e:73 (10.67.15.1) on eth0 using Service-Name 'TEST'
Oct 24 04:58:44 zibik pppd[25762]: Plugin /etc/ppp/plugins/rp-pppoe.so loaded.
Oct 24 04:58:44 zibik pppd[25762]: RP-PPPoE plugin version 3.3 compiled against pppd 2.4.3
Oct 24 04:58:44 zibik pppd[25762]: pppd 2.4.3 started by root, uid 0
Oct 24 04:58:44 zibik pppd[25762]: Using interface ppp1
Oct 24 04:58:44 zibik pppd[25762]: Connect: ppp1 <--> eth0
Oct 24 04:58:46 zibik pppd[25762]: peer from calling number 00:40:F4:6E:0E:73 authorized
Oct 24 04:58:46 zibik pppd[25762]: local IP address 192.168.100.254
Oct 24 04:58:46 zibik pppd[25762]: remote IP address 192.168.100.10

Przy rozłączaniu:

Oct 24 05:02:19 zibik pppd[25762]: LCP terminated by peer (QM-DN^_^@
Oct 24 05:02:19 zibik pppd[25762]: Connect time 3.6 minutes.
Oct 24 05:02:19 zibik pppd[25762]: Sent 775270 bytes, received 764327 bytes.
Oct 24 05:02:20 zibik pppoe-server[25750]: Sent PADT
Oct 24 05:02:20 zibik pppd[25762]: Terminating on signal 15
Oct 24 05:02:22 zibik pppd[25762]: Connection terminated.
Oct 24 05:02:22 zibik pppd[25762]: Modem hangup
Oct 24 05:02:22 zibik pppd[25762]: Exit.
Oct 24 05:02:22 zibik pppoe-server[25750]: Session 1 closed for client 00:40:f4:6e:0e:73 (10.67.15.1) on eth0

U podłączonego klienta (pod windowsem: ipconfig /all):

Karta Ethernet Połączenie lokalne:

Sufiks DNS konkretnego połączenia :
Opis . . . . . . . . . . . . . . : Karta Realtek RTL8139 Family PCI Fast Ethernet NIC
Adres fizyczny. . . . . . . . . . : 00-40-F4-6E-0E-73
DHCP włączone . . . . . . . . . . : Tak
Autokonfiguracja włączona . . . . : Tak
Adres IP. . . . . . . . . . . . . : 0.0.0.0
Maska podsieci. . . . . . . . . . : 0.0.0.0
Brama domyślna. . . . . . . . . . :
Serwer DHCP . . . . . . . . . . . : 255.255.255.255

Karta PPP ZibikNet:

Sufiks DNS konkretnego połączenia :
Opis . . . . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Adres fizyczny. . . . . . . . . . : 00-53-45-00-00-00
DHCP włączone . . . . . . . . . . : Nie
Adres IP. . . . . . . . . . . . . : 192.168.100.10
Maska podsieci. . . . . . . . . . : 255.255.255.255
Brama domyślna. . . . . . . . . . : 192.168.100.10
Serwery DNS . . . . . . . . . . . : 192.168.100.254
194.204.252.34
NetBIOS przez TCP/IP. . . . . . . : Wyłączony

Uwagi

Nie udało mi się uruchomić PPPoE na pakiecie ppp-2.4.4: przy próbie podłączenia u klienta występował tajemniczy błąd 52 (zduplikowana nazwa w sieci); po wstecznej aktualizacji do wersji 2.4.3 problem zniknął.

W opisie na stronie firmy Cyberbajt jest informacja, że karta sieciowa musi mieć zdjęte IP - ja zostawiłem IP, dzięki czemu użytkownicy mogą nadal korzystać z internetu używając klasycznego połączenia ethernetowego - jest to ważne szczególnie wtedy, gdy mamy działającą sieć a chcemy stopniowo i bezszokowo wdrożyć PPPoE u klientów. Oczywiście po zakończeniu wdrożenia można, a nawet należy zdjąć IP z karty sieciowej.

Należy mieć świadomość, że zastosowanie PPPoE zabezpiecza nas jedynie przed nieautoryzowanym dostępem do sieci, cały ruch jest nieszyfrowany i można go bez większych problemów podsłuchać. Jeśli chcemy wykluczyć taką możliwość wtedy należy (można) zastosować np. tunele VPN - w tej roli doskonale sprawdza się pptpd.

Źródła:

Powiązane wpisy: