HowTo:pppoe

De Luispa

Conexión a ISP vía PPPoE

Introducción

En este artículo defino cómo conectar con mi proveedor de Servicios (Jazztel). Tengo contratada una línea ADSL, IP Fija y mi proveedor utiliza PPPoE. En mi caso necesito que sea el linux y no el modem ADSL, el que controle la sesión PPPoE, de modo que la IP pública (fija) pertenezca a mi equipo. Para poder trabajar de esta forma voy a configurar el Modem en modo Bridge (LLC/SNAP-BRIDGING).

  • PPPoE ofrece la habilidad de conectar a la red a través de un equipo (en mi caso es un Comtrend) que activa un Bridge (puente) hasta el agregador. Con este modelo, cada Host usa su propio stack PPP para levantar la sesión. En mi caso solamente el Linux levantará la sesión PPP, recibirá la IP fija, y se encargará de hacer el routing, NAT, firewall, etc. hacia la red interna por otro interfaz. Tal como se especifica en el RFC 2516, PPPoE tiene dos estados distintos, uno de "Discovery" (típico client/server) y otro de "Sesión". Cuando el equipo linux inicia el descubrimiento, detectará la dirección MAC de su vecino y establecerá el Session ID, a partir de ahí se trata de una sesión PPP.
  • Software PPPoE en Linux. Históricamente el software PPPoE ha sido proporcinado por el proyecto rp-pppoe (Roaring Penguin), pero finalmente ha sido integrado en el Kernel + el paquete estándar PPP, y a este modelo de configuración se llama PPP Modular. Simplemente hay que realizar una configuración adicional en el Kernel e instalar el paquete PPP.


Preparar el Router ADSL

  • En mi caso tengo un Comtrend HG/CT536+
  • Configuración original
Advance Setup->WAN->
 VPI/VCI       Con. ID         Category        Service         Interface       Protocol        Igmp     Nat     Firewall       QoS      State  
 8/35          1               UBR             br_8_35         nas_8_35        Bridge          N/A      N/A     N/A            Enabled  Enabled
 8/35          2               UBR             pppoe_8_35_2    ppp_8_35_2      PPPoE           Disabled Enabled                Disabled Enabled
  • Elimino la segunda entrada (la de pppoe...), ya no la necesito
  • Me queda sólo la de Bridging:
       VPI: [0-255]  	
       VCI: [32-65535] 	
       UBR without PCR
       Enable Qos (x)
       :
       Bridging
       Encapsulación: LLC/SNAP-BRIDGING:
       :
       Enable bridge service
       Service name: br_8_35
       :
Salvo y rearranco (save & reboot)


Preparar el Linux

Nota: Esta es la forma de hacerlo en Gentoo, consulta cómo hacerlo en tu distribución

Aviso: Conecto el cable Ethernet del puerto público del equipo Linux al puerto 3 o 4 del Modem, dado que son los puertos que tiene configurados por defecto para hacer port mapping al modo Bridge.

  • Configuro el Kernel
Linux Kernel Configuration:
<M> PPP (point-to-point protocol) support
[ ] PPP multilink support (EXPERIMENTAL)
[ ] PPP filtering
<M> PPP support for async serial ports
< > PPP support for sync tty ports
< > PPP Deflate compression
< > PPP BSD-Compress compression
< > PPP MPPE compression (encryption) (EXPERIMENTAL)
<M> PPP over Ethernet (EXPERIMENTAL)
  • Instalo el PPP
# emerge -v ppp
  • Configuro el PPP
config_eth1=( "192.168.1.2/24" )            <== Ver (nota 1)
config_ppp0=( "ppp" )
link_ppp0="eth1"
plugins_ppp0=( "pppoe" )
username_ppp0='XXXXXXXX@adslip'            <== Usuario entregado por Jazztel para IP Fija
password_ppp0='XXXXXXXX'
pppd_ppp0=(
       "noauth"
       "defaultroute"
       "holdoff 3"
       "child-timeout 60"
       "lcp-echo-interval 15"
       "lcp-echo-failure 3"
       noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp
)

Nota: (nota 1): La IP que asigno al interfaz eth1 NO ES NECESARIA. La dejo configurada por si necesito conectar con el GUI de administración del router. Para hacerlo tendré que cambiar el cable Ethernet temporalmente al puerto 1/2 del Comtrend

  • Enlace para arrancar el nuevo interfaz
# ln -s net.lo net.ppp0
  • Añado el servicio para que en cada arranque lo active
# rc-update add net.ppp0 default


Iniciar PPP

  • El siguiente paso es sencillo, simplemente se activa ppp con el siguiente comando. Es importante notar que el proceso tarda un rato. El programa PPP empieza a trabajar en el background, primero se realiza el discovery y después se establece la sesión, tarda unos 16 segundos. A partir de ahí el tráfico ya puede empezar a fluir.
# /etc/init.d/net.ppp0 start


Resolución de problemas

  • Los equipos de la red LAN no pueden acceder a algunos o ningún sitio web. Nota: En mi caso no tengo este problema.
La solución fácil es poner su MTU a 1492 y usar ipt_TCPMSS e iptables. 
-> Networking
  -> Networking Options
    -> Network Packet Filtering Framework (Netfilter)
      -> IP: Netfilter configuration
        ->IP tables support 
        [*] TCPMSS target support

Añadir la regla:
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


  • Cómo ver qué está pasando?: Activa el "debug" en el fichero /etc/conf.d/net. En mi caso el log se encuentra en /var/log/ppp/current. Este es el resultado de un discovery y establecimiento de sesión con éxito, tras "/etc/init.d/net.ppp0 start" tanto mirando en el log como con tcpdump. Como se puede observar, el establecimiento de la sesión tarda unos 16 segundos.
Feb 12 15:55:31 [pppd] Plugin passwordfd.so loaded.
Feb 12 15:55:31 [pppd] Plugin rp-pppoe.so loaded.
Feb 12 15:55:31 [pppd] RP-PPPoE plugin version 3.3 compiled against pppd 2.4.4
Feb 12 15:55:31 [pppd] pppd 2.4.4 started by root, uid 0
Feb 12 15:55:31 [pppd] PADS: Service-Name: ''
Feb 12 15:55:31 [pppd] PPP session is 94
Feb 12 15:55:31 [pppd] using channel 1
Feb 12 15:55:31 [pppd] Using interface ppp0
Feb 12 15:55:31 [pppd] Connect: ppp0 <--> eth1
Feb 12 15:55:31 [pppd] sent [LCP ConfReq id=0x1 <mru 1492> <magic 0x5740d2f0>]
Feb 12 15:55:31 [pppd] rcvd [LCP ConfAck id=0x1 <mru 1492> <magic 0x5740d2f0>]
Feb 12 15:55:34 [pppd] rcvd [LCP ConfReq id=0x1 <mru 1492> <auth chap MD5> <magic 0x4500f1da>]
Feb 12 15:55:34 [pppd] sent [LCP ConfAck id=0x1 <mru 1492> <auth chap MD5> <magic 0x4500f1da>]
Feb 12 15:55:34 [pppd] sent [LCP EchoReq id=0x0 magic=0x5740d2f0]
Feb 12 15:55:34 [pppd] rcvd [CHAP Challenge id=0x1 <83ad6e41e7ae9656bd021a0af3405404>, name = ""]
Feb 12 15:55:34 [pppd] sent [CHAP Response id=0x2 <abccXXXXXXXXXXXXXXXXXXXXXXXXX368>, name = "XXXXXXXXXX@adslip"]    <== Tu usuario
Feb 12 15:55:34 [pppd] rcvd [LCP EchoRep id=0x0 magic=0x4500f1da]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfReq id=0x2 <mru 1501> <asyncmap 0xa0000> <auth chap MD5> <magic 0xa5d536c5> <pcomp> <accomp>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x2 <mru 1492> <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] sent [LCP ConfRej id=0x2 <asyncmap 0xa0000> <pcomp> <accomp>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfNak id=0x2 <mru 1501>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x3 <mru 1492> <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfReq id=0x3 <mru 1501> <auth chap MD5> <magic 0xa5d536c5>]
Feb 12 15:55:46 [pppd] sent [LCP ConfAck id=0x3 <mru 1501> <auth chap MD5> <magic 0xa5d536c5>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfNak id=0x3 <mru 1501>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x4 <mru 1492> <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfNak id=0x4 <mru 1501>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x5 <mru 1492> <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfNak id=0x5 <mru 1501>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x6 <mru 1492> <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfNak id=0x6 <mru 1501>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x7 <mru 1492> <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfRej id=0x7 <mru 1492>]
Feb 12 15:55:46 [pppd] sent [LCP ConfReq id=0x8 <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] rcvd [LCP ConfAck id=0x8 <magic 0x41538c58>]
Feb 12 15:55:46 [pppd] sent [LCP EchoReq id=0x0 magic=0x41538c58]
Feb 12 15:55:46 [pppd] rcvd [CHAP Challenge id=0x2 <596a4ba02198e5e8eedcdcabf46b31b5>, name = "JazzNet"]
Feb 12 15:55:46 [pppd] sent [CHAP Response id=0x2 <abccXXXXXXXXXXXXXXXXXXXXXXXXX368>, name = "XXXXXXXXXX@adslip"]    <== Tu usuario
Feb 12 15:55:46 [pppd] rcvd [LCP EchoRep id=0x0 magic=0xa5d536c5]
Feb 12 15:55:47 [pppd] rcvd [CHAP Success id=0x2 ""]
Feb 12 15:55:47 [pppd] CHAP authentication succeeded
                - Last output repeated twice -
Feb 12 15:55:47 [pppd] peer from calling number 00:XX:XX:XX:XX:XX authorized              <== Tu IP fija
Feb 12 15:55:47 [pppd] sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
Feb 12 15:55:47 [pppd] rcvd [IPCP ConfReq id=0x1 <addr 87.216.16.1>]
Feb 12 15:55:47 [pppd] sent [IPCP ConfAck id=0x1 <addr 87.216.16.1>]
Feb 12 15:55:47 [pppd] rcvd [IPCP ConfNak id=0x1 <addr XX.XXX.XXX.XXX>]
Feb 12 15:55:47 [pppd] sent [IPCP ConfReq id=0x2 <addr XX.XXX.XXX.XXX>]
Feb 12 15:55:47 [pppd] rcvd [IPCP ConfAck id=0x2 <addr XX.XXX.XXX.XXX>]
Feb 12 15:55:47 [pppd] local  IP address XX.XXX.XXX.XXX
Feb 12 15:55:47 [pppd] remote IP address 87.216.16.1
Feb 12 15:55:47 [pppd] Script /etc/ppp/ip-up started (pid 8587)
Feb 12 15:55:47 [pppd] Script /etc/ppp/ip-up finished (pid 8587), status = 0x0


  • Visto con tcpdump
15:55:31.477355 PPPoE PADI [Service-Name] [Host-Uniq 0x6D210000]
15:55:31.527953 PPPoE PADO [Service-Name] [Host-Uniq 0x6D210000] 
15:55:31.527971 PPPoE PADR [Service-Name] [Host-Uniq 0x6D210000]
15:55:31.577240 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 0, length 21
15:55:31.632155 PPPoE PADS [ses 0x5e] [Service-Name] [Host-Uniq 0x6D210000]
15:55:31.632593 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 1, length 16
15:55:31.668390 PPPoE  [ses 0x5e] LCP, Conf-Ack (0x02), id 1, length 16
15:55:34.568260 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 1, length 21
15:55:34.568318 PPPoE  [ses 0x5e] LCP, Conf-Ack (0x02), id 1, length 21
15:55:34.568393 PPPoE  [ses 0x5e] LCP, Echo-Request (0x09), id 0, length 10
15:55:34.604205 PPPoE  [ses 0x5e] CHAP, Challenge (0x01), id 1, Value 83ad6e41e7ae9656bd021a0af3405404, Name 
15:55:34.604272 PPPoE  [ses 0x5e] CHAP, Response (0x02), id 1, Value abccXXXXXXXXXXXXXXXXXXXXXXXXX368, Name XXXXXXXXXX@adslip
15:55:34.606158 PPPoE  [ses 0x5e] LCP, Echo-Reply (0x0a), id 0, length 10
15:55:46.696981 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 2, length 31
15:55:46.697050 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 2, length 16
15:55:46.697067 PPPoE  [ses 0x5e] LCP, Conf-Reject (0x04), id 2, length 16
15:55:46.732718 PPPoE  [ses 0x5e] LCP, Conf-Nack (0x03), id 2, length 10
15:55:46.732754 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 3, length 16
15:55:46.734677 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 3, length 21
15:55:46.734709 PPPoE  [ses 0x5e] LCP, Conf-Ack (0x02), id 3, length 21
15:55:46.768915 PPPoE  [ses 0x5e] LCP, Conf-Nack (0x03), id 3, length 10
15:55:46.768956 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 4, length 16
15:55:46.806614 PPPoE  [ses 0x5e] LCP, Conf-Nack (0x03), id 4, length 10
15:55:46.806654 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 5, length 16
15:55:46.842612 PPPoE  [ses 0x5e] LCP, Conf-Nack (0x03), id 5, length 10
15:55:46.842647 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 6, length 16
15:55:46.878578 PPPoE  [ses 0x5e] LCP, Conf-Nack (0x03), id 6, length 10
15:55:46.878618 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 7, length 16
15:55:46.916270 PPPoE  [ses 0x5e] LCP, Conf-Reject (0x04), id 7, length 10
15:55:46.916304 PPPoE  [ses 0x5e] LCP, Conf-Request (0x01), id 8, length 12
15:55:46.952739 PPPoE  [ses 0x5e] LCP, Conf-Ack (0x02), id 8, length 12
15:55:46.952768 PPPoE  [ses 0x5e] LCP, Echo-Request (0x09), id 0, length 10
15:55:46.954712 PPPoE  [ses 0x5e] CHAP, Challenge (0x01), id 2, Value 596a4ba02198e5e8eedcdcabf46b31b5, Name JazzNet
15:55:46.954751 PPPoE  [ses 0x5e] CHAP, Response (0x02), id 2, Value abccXXXXXXXXXXXXXXXXXXXXXXXXX368, Name XXXXXXXXXX@adslip
15:55:46.988485 PPPoE  [ses 0x5e] LCP, Echo-Reply (0x0a), id 0, length 10
15:55:47.053008 PPPoE  [ses 0x5e] CHAP, Success (0x03), id 2, Msg 
15:55:47.053072 PPPoE  [ses 0x5e] IPCP, Conf-Request (0x01), id 1, length 12
15:55:47.060648 PPPoE  [ses 0x5e] IPCP, Conf-Request (0x01), id 1, length 12
15:55:47.060682 PPPoE  [ses 0x5e] IPCP, Conf-Ack (0x02), id 1, length 12
15:55:47.089001 PPPoE  [ses 0x5e] IPCP, Conf-Nack (0x03), id 1, length 12
15:55:47.089055 PPPoE  [ses 0x5e] IPCP, Conf-Request (0x01), id 2, length 12
15:55:47.125195 PPPoE  [ses 0x5e] IPCP, Conf-Ack (0x02), id 2, length 12




Enlaces y Créditos

[1] http://www.gentoo-wiki.info/HOWTO_Connect_using_PPPoE Doc. de Gentoo
[2] http://www.cyberciti.biz/tips/pppoe-linux-server-configuration-howto.html Otro ejemplo de configuración
[3] http://www.gentoo.org/doc/es/home-router-howto.xml Otro más

Volver a la Portada

--Luis 13:57 12 feb 2010 (CET)


Herramientas personales