23 agosto 2011

Como suprimir el router de Telefónica en FTTH

Qué contento que estaba yo cuando me pusieron fibra óptica en casa. Lo rápido que iba a poder descargar "distribuciones de linux", "wikipedias" y demás contenidos libres ahora. Cuando ví llegar a los instaladores de Telefonica con varias cajas blancas, rollos de fibra, cajas de herramientas, etc,… pensé que venían los Cazafantasmas.

Como los chicos parecían majetes (y uno de ellos leía Security By Default -un saludo para Jose desde aquí-) estuve de lo más entretenido viéndoles hacer la instalación, tirar la fibra y ejecutar trabajo de precisión con los conectores necesarios. A mi pregunta, "cuál es el modelo del router para ir buscando por Internet cómo destriparlo?", me abren dos cajas y me explican que cuando tienes FTTH, necesitas dos equipos: Una unidad ONT Huawei HG 850, que hace bridge entre la conexión de fibra óptica y un cable ethernet; y un router inalámbrico, normal y corriente (de los típicos ADSL de Telefonica pero sin interfaz RJ-11) que tendrá la IP pública y hará "el routing" entre los PCs de dentro de la red e Internet.  

Para activar la ONT, el instalador se conectó a uno de los puertos y ejecutó varios parámetros de inicialización según pude ver. Sin embargo, según me comentaron, la ONT no disponía de módulo de routing y era imprescindible disponer del otro dispositivo conectado en serie para poder tener acceso a Internet.

Antiguamente, cuando funcionábamos con módem a través de RTB e incluso con ADSL normal mediante módems, ya era posible establecer una conexión PPPoE o PPPoA (dependiendo si era sobre Ethernet o sobre ATM) desde una máquina con Linux, teniendo la IP Pública un interfaz TCP/IP directamente en la máquina.
Hay que decir que en el caso de una casa "normal" con varios dispositivos conectándose a internet directamente a través del router de forma directa, no es posible eliminar este último dispositivo. En mi caso, que lo que tengo es una máquina con muchas funcionalidades, que además separa entre sí varias redes a las que da el acceso a Internet y entre ellas, podemos intentar eliminar el dispositivo de routing intermedio sin problemas. Además, la configuración de NAT del router blanco tenía configurado como "DMZ host" la IP del servidor, de manera que todo el tráfico de red entraba directamente contra mi "gateway". La idea es eliminar el salto intermedio.

Como bien podéis imaginar, según salieron por la puerta, lo primero que hice fue sentarme a trastear con los dos cacharros y ver si uno de ellos era susceptible de ser eliminado.

Manos a la obra

Al principio pensé que sería cuestión de 10 minutos mediante la instalación de los paquetes rp-pppoe y ppp para CentOS, crear una conexión PPPoE y a correr. La verdad es que no resultó tan sencillo como parece. La conexión PPPoE se resistía y me daba un montón de errores.

La configuración utilizada en el fichero /etc/sysconfig/network-scripts/ifcfg-ppp0 era la que veis bajo estas líneas:

USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=YES
PIDFILE=/var/run/pppoe-adsl.pid
FIREWALL=NONE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=60
DEFROUTE=yes
SYNCHRONOUS=no
ETH=eth0
PROVIDER=DSLppp0
USER=porsiacasoloquito@telefonicanetpi
PEERDNS=no
DEMAND=no

Además, en los ficheros /etc/ppp/chap-secrets y /etc/ppp/pap-secrets será necesario añadir una entrada con la contraseña perteneciente al usuario.
En la interfaz web del dispositivo intermedio (un Comtrend), el que hace el routing entre el PC y la ONT de fibra, en un primer vistazo inicial, no vi nada que permitiera ver qué estaba haciendo mal.


Sin embargo, descargando un backup de la configuración de dicho router se pueden observar varias cosas interesantes.
Se trata de un fichero XML que, permite ver que, para empezar, la clave de administración del router se encuentra en claro, para que el que tenga acceso a un fichero de backup, pueda además acceder al router después, además con un tag facilito <AdminPassword$gt; (un bonito detalle oye).

<X_BROADCOM_COM_LoginCfg>
      <AdminPassword>LaPassEnClaroDeMiFraudeRouter</AdminPassword>
    </X_BROADCOM_COM_LoginCfg>

Al analizarlo más en profundidad, y ya por pura curiosidad, encontré una sección que me dejó muy mosqueado:

<url>https://main.acs.telefonica.net:7004/cwmpWeb/WGCPEMgt</url>
<username>XXXXXX-696969R-1234A-aabbccddeeffgg</username>
<password>123456789101112131451617181920</password>
<periodicinformenable>TRUE</periodicinformenable>
<periodicinforminterval>86400</periodicinforminterval>
<periodicinformtime>2000-01-01T00:00:10+00:00</periodicinformtime>
<connectionrequestusername>XXXXXX-696969R-1234A-aabbccddeeffgg</connectionrequestusername>
<connectionrequestpassword>lalalaalalalalalalaalaalalalalalalalalaalalalala</connectionrequestpassword>

Como la curiosidad mató al gato, intenté acceder a esta URL: Si accedo a esta URL https://main.acs.telefonica.net:7004/cwmpWeb/WGCPEMgt, el certificado está firmado por una CA de Telefónica (o eso dice), me pide usuario y contraseña, introduzco obedientemente los valores de los tags <username> y <password> (parecen valores en hexadecimal) y me aparece una página que dice:

CPE Servlet responding
Active session count = 213


Analizando con TamperData, aparece una Cookie llamada "BIGipServerPool_HNM_Walled-garden" que imagino que la inyectará un balanceador F5 para fijar la persistencia de la sesión a través de un nodo de una granja de servidores web. ¿Para qué valdrá esto? Hay otros parámetros que con el mismo usuario tiene una password diferente, que al probarla no funciona. ¿Será que sirven para otorgar gestión remota al Router desde el portal Alejandra de Telefónica? No sé a vosotros, pero cada vez me da más mala espina este tipo de dispositivos que te entregan desde el proveedor con una configuración pre-establecida.

Finalmente, en la sección de la conexión PPPoE, aparte del usuario y la contraseña necesarios, el parámetro VlanMuxID (6) hace sospechar que el tráfico podría ir en formato 802.1Q (o VLAN Tagging) en concreto con el Tag 6. Tendría además sentido el que, tanto en la intefaz web como en el fichero XML, apareciese el nombre del interfaz como ppp0.6. 

<WANPPPConnection instance="2">
<Enable>TRUE</Enable>
<ConnectionType>IP_Routed</ConnectionType>
<Name>pppoe_eth0.6</Name>
<NATEnabled>TRUE</NATEnabled>
<X_BROADCOM_COM_FirewallEnabled>TRUE</X_BROADCOM_COM_FirewallEnabled>
<Username>porsiacasoloquito@telefonicanetpi</Username>
<Password>lapassword</Password>
<X_BROADCOM_COM_IfName>ppp0.6</X_BROADCOM_COM_IfName>
<X_BROADCOM_COM_BcastAddr>255.255.255.255</X_BROADCOM_COM_BcastAddr>
<X_BROADCOM_COM_VlanMux8021p>1</X_BROADCOM_COM_VlanMux8021p>
<X_BROADCOM_COM_VlanMuxID>6</X_BROADCOM_COM_VlanMuxID>
<DNSServers>80.58.61.250,80.58.61.254</DNSServers>
<PortMappingNumberOfEntries>0</PortMappingNumberOfEntries>
<X_BROADCOM_COM_FirewallException>nextInstance="12"
</X_BROADCOM_COM_FirewallException>
</WANPPPConnection>

Me diréis: "Oye Lorenzo, en la imagen que has puesto arriba aparece claramente VlanMuxID 6". Pues sí, tenéis razón, pero yo no me dí cuenta hasta que bajé el backup de la configuración. -Mi cerebro debe procesar mejor los ficheros de configuración XML que las imágenes, no sé-

Así pues, en vez de hacer la conexión PPPoE en modo untagged (el normal para un dispositivo de usuario en una red), habrá que crear primeramente un interfaz virtual "tagged".
Para ello, en CentOS creamos el fichero /etc/sysconfig/network-scripts/ifcfg-eth0.6 con el siguiente contenido:

DEVICE=eth0.6
ONBOOT=yes
BOOTPROTO=static
VLAN=yes

Haciendo la prueba levantando el interfaz, se ve que se levanta correctamente un interfaz sin IP llamado eth0.6 y que el módulo 8021q se encuentra cargado y utilizado

[root@Carmen ~]# ifconfig eth0.6
eth0.6    Link encap:Ethernet  HWaddr AA:AA:AA:AA:AA:AA  
          inet6 addr: fe80::fff:fff:ffff:d1fc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:99292 errors:0 dropped:0 overruns:0 frame:0
          TX packets:76372 errors:0 dropped:4 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:122826179 (117.1 MiB)  TX bytes:9347498 (8.9 MiB)

[root@Carmen ~]# lsmod | grep -i 802
8021q                  24413  0 
garp                    7310  1 8021q 

Ahora sólo queda modificar la configuración del fichero /etc/sysconfig/network-scripts/ifcfg-ppp0 para que el parámetro ETH que antes era "eth0" pase a ser "eth0.6".
Levantando el interfaz se observa cómo se crea correctamente un interfaz nuevo llamado ppp0 con la IP pública que Telefonica me asigna.

Ahora sólo queda modificar la configuración de algunas aplicaciones que se "bindeaban" en el interfaz pública directamente, anteriormente eth0, para que pasen a hacerlo al ppp0. Además hay que modificar la política de firewall/NAT, configuración de herramientas de análisis como Snort, ntop, y demás juguetitos para que monitoricen el nuevo interfaz.

Si anteriormente, teníais configurado el NAT entrante del router para que determinados puertos fuesen redirigidos a puertos de algún PC interno, tened cuidado puesto que actualmente la máquina Linux "está" directamente en Internet. Si tenéis algún servicio mal configurado, que anteriormente no era un riesgo alto por no estar comunicado desde fuera, ahora sí que lo estará, así que revisad las reglas del firewall de la máquina.

He de decir que en CentOS 4.X al levantar el interfaz ppp0 se provocaba un core dump que hacía que se reiniciara el servidor. Escribo ahora este post puesto que he migrado a Centos 6 y en la nueva máquina ya no da crashes como los anteriores. Previamente probé en una Fedora Core 13 y funcionaba también estupendamente.

18 comments :

Alex dijo...

Muy buena review...

Invitado dijo...

Llevo muchos años con ADSL de Telefónica y aún mantengo IP fija, configurada en una FreeBSD sin problema ninguno, simplemente poniendo el router en multi-host (o como lo llamen) éste obtiene otra IP pública. Parece que es el router el que se encargaba de negociar los parámetros de la conexión, es algo raro pero me funciona.

Koldo Valle dijo...

Muy buena Loren!!

Invitado dijo...

Muy interesante, buen trabajo!

kaperu dijo...

Me ha gustado mucho esta entrada.

Y ya que comentas 'herramientas de análisis como Snort, ntop..', por curiosidad que herramientas de análisi y monitorización serian recomendables/interesenates instalarle?

Un saludo!

Juan Antonio dijo...

Si lo he entendido bien has cambiado el router de Telefonica por otro, ¿donde está la ventaja?
Saludos

Lorenzo Martínez Rodríguez dijo...

Hola Juan Antonio, creo que no me he explicado correctamente.
Anteriormente yo tenía PC's <--> Firewall <--> Router <--> ONT <--> Internet
Ahora tengo PC's <--> Firewall <-->ONT <--> Internet

Anteriormente, era el router quien tenía la IP pública y entre el Firewall y el router había que crear una red privada. Ahora, después del procedimiento descrito en el artículo, es el propio Firewall (con Linux) quien tiene la IP Pública, evitando así un salto innecesario con el router que pone Telefónica.

Saludos,

Lorenzo Martínez Rodríguez dijo...

Bueno, ya tenía un compendio grande de herramientas de monitorización en la red: Nagios, Snort, Ntop, SARG para Squid, mod_security, arpwatch para las redes wireless e internas, alguna herramienta de tipo knock-knock, etc,...

Fgdfsd dijo...

Joder, que crack...

Francisco Salvador dijo...

Lo primero, gracias por el artículo.

Llevo ya un año con FTTH y hace tiempo intenté cambiar el router que me dieron por otro que tengo con dd-wrt. No fui capaz, lo volveré a intentar basándome en lo que has publicado pero aun así agradecería cualquier consejo.

Marcos Alberto Sanmartín Perei dijo...

Que bien está este blog, ya lo tengo en el Google Reader desde hace tiempo porque es realmente interesante y ahí se quedará para siempre.

Gracias.

Lorenzo_Martinez dijo...

Muchas gracias por tu comentario! Nos alegra el ver que los lectores disfrutais leyendo lo que nosotros disfrutamos escribiendo!

Sabacom dijo...

Buenas, gracias por la información. 

Yo querría aprovechar lo que comentas para hacerte una pregunta, si no te importa:

Quisiera deshabilitar el firewall que viene enabled en la interfaz ppp0.6 como veis en la imagen que has puesto.

En un primer momento lo he conseguido quitando la que viene y creandola nueva, pero no se cuales son los parametros correctos que tengo que meter para conseguir optimizarlo para juegos online (PS3). Es decir que con la nueva me funciona internet, pero no se si he puesto todos los parametros bien o me he dejado alguno importante y aque en los juego sde la play no me termina de ir bien y tengo mucho lag.

¿Sabeis cual es la mejor configuracion?

Saludos y gracias de antemano.

Pablo Roncero Philipp dijo...

Hola Lorenzo,

Genial tu ayuda.. para gente como yo que tenemos la suerte de tener un Cisco a mano.. os paso la configuración con la que he conseguido configurarlo..porque hay muy poca información sobre VLAN con PPPoE

IMPORTANTE: -> REQUIERE IOS de al menos.. v12.4(24)T






En mi caso es un router serie 18xx, uso interfaz VLAN para el interfaz 1-8



interface ATM0 no ip address shutdown  no atm ilmi-keepalive!interface BRI0 no ip address encapsulation hdlc shutdown!interface FastEthernet0 no ip address duplex auto speed auto!interface FastEthernet0.6 encapsulation dot1Q 6 pppoe enable group global pppoe-client dial-pool-number 1!interface FastEthernet1!interface FastEthernet2!interface FastEthernet3!interface FastEthernet4!interface FastEthernet5!interface FastEthernet6!interface FastEthernet7!interface FastEthernet8!interface Vlan1 ip address 192.168.55.1 255.255.255.0 no ip redirects ip nat inside ip virtual-reassembly ip tcp adjust-mss 1400!interface Dialer0 no ip address!interface Dialer1 ip address negotiated ip mtu 1492 ip nat outside ip virtual-reassembly encapsulation ppp dialer pool 1 dialer idle-timeout 0 dialer persistent dialer-group 1 ppp authentication chap pap callin ppp chap hostname adslppp@telefonicanetpa ppp chap password 0 adslppp ppp pap sent-username adslppp@telefonicanetpa password 0 adslppp hold-queue 224 in!ip forward-protocol ndip route 0.0.0.0 0.0.0.0 Dialer1no ip http serverno ip http secure-server!!ip nat inside source list DSL_ACCESSLIST interface Dialer1 overloadip nat inside source static 192.168.55.250 interface Dialer1!ip access-list extended DSL_ACCESSLIST permit ip 192.168.55.0 0.0.0.255 any!access-list 101 permit ip any anydialer-list 1 protocol ip permit!!!!!!control-plane!!line con 0line aux 0line vty 0 4 password 1234 login!end

Lorenzo_Martinez dijo...

Wow! Genial Pablo... para quien tenga un Router Cisco con ese firmware seguro que es una ayuda.

Una duda... lo de la "password 1234" que indicas al final de tu config, espero que sea editada para el comentario al post nada más ;D

Enhorabuena y muchas gracias por la colaboración. Le será útil a nuestros lectores!

J dijo...

POR SI NO SABES TE ESTAS GANANDO CARCEL POR CONFIGURAR LOS MODEMS Y LAS ONT Y DUDO MUCO K SEPAS SOBRE K ES LA F.0 Y DEMAS LA ONT YA NO NECESITA ROUTER

Gonzalo dijo...

Pero que droga te fumas???? de toda la vida mucha gente ha toqueteado sus modems y routers y nunca han ido a la cárcel por ello, ninguna operadora de internet va denunciar a su cliente por trastear con los aparatos

Eduardo Diaz dijo...

Una cuestion has probado a intentar comprimir la conexion con bsdcomp o deflate? has conseguido mejores resultados?..

sls!