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)

