# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Redirigir tráfico entre puertos TCP con tcptunnel

Tcptunnel permite redirigir tráfico desde un puerto TCP a otro, escuchando en el puerto local y redirigiendo todo el tráfico hacia el puerto remoto que le indiquemos.

Tcptunnel puede ser utilizado con protocolos basados en TCP como HTTP, SMTP, POP, IRC, etc. y ha sido probado en GNU/Linux, FreeBSD, Solaris, HP-UX, Windows XP y Windows Server 2008.

Personalmente lo he probado entre dos máquinas CentOS y por el momento ha funcionado de forma correcta. En breve lo usaré en “producción” así que esperaremos a ver que tal. Os dejo unos ejemplos de utilización y su instalación.

Instalación

# wget http://www.vakuumverpackt.de/tcptunnel/tcptunnel-0.2.tar.gz
# tar -xzvf tcptunnel-0.2.tar.gz
# cd tcptunnel-0.2
# ./configure --install-dir=/usr/local/bin
# make
# make install

Ejemplos de uso

En este ejemplo queremos redirigir todo el tráfico SMTP local contra el puerto SMTP de la máquina remota 192.168.0.100:

# tcptunnel --local-port=25 --remote-port=25 --remote-host=192.168.0.100 --stay-alive

En este ejemplo redirigimos el tráfico POP local (puerto 110) contra el puerto 111 del equipo remoto 192.168.0.100:

# tcptunnel --local-port=110 --remote-port=111 --remote-host=192.168.0.100 --stay-alive

En este ejemplo redirigimos el tráfico HTTP local (puerto 80) contra el puerto 80 del equipo remoto 192.168.0.100:

# tcptunnel --local-port=80 --remote-port=80 --remote-host=192.168.0.100 --stay-alive

Modo de uso:

# tcptunnel --help
Usage: tcptunnel [options]

Options:
  --version
  --help               this help

  --local-port=PORT    port to redirect
  --remote-port=PORT   target port
  --remote-host=HOST   target host

  --stay-alive
  --log-to-stdout

Si alguien conoce una forma más óptima de hacerlo, ¡soy todo oídos!

Cómo montar un servidor DHCP

Esta es una forma sencilla de instalar y configurar un servidor DHCP en una máquina Linux (Red-Hat, CentOS, Fedora). Voy a mostraros los pasos para hacerlo y una configuración básica para hacer funcionar el equipo como servidor DHCP.

DHCP (sigla en inglés de Dynamic Host Configuration Protocol – Protocolo Configuración Dinámica de Servidor) es un protocolo de red que permite a los nodos de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van estando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después. (Wikipedia)

En primera instancia, instalamos el paquete necesario vía yum:

yum install dhcp.i586

Una vez instalado, podemos utilizar como base para el fichero de configuración el que nos ofrecen con la instalación. Incorpora comentarios sobre cada una de las opciones y configuraciones para hacer más sencilla la puesta en marcha del servicio:

cp /usr/share/doc/dhcp-4.1.0p1/dhcpd.conf.sample /etc/dhcp/dhcp.conf

El fichero de ejemplo es el siguiente:


# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 10.152.187.0 netmask 255.255.255.0 {
}

# This is a very basic subnet declaration.

subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}

# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.

subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;
option broadcast-address 10.254.239.31;
option routers rtr-239-32-1.example.org;
}

# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}

# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.

host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}

# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}

# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.

class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}

shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}

Veréis que es un fichero con muchísimas opciones, os dejo un ejemplo más sencillo. En el siguiente dhcp.conf utilizamos la interfaz de red eth0 para las tareas de DHCP, esta interfaz tiene configurada la red 192.168.0.0/24 (subnet), sobre la cual vamos a reservar las IPs desde la 192.168.0.200 a la 192.168.0.220 para las asignaciones DHCP (range).

Esto es lo más básico, respecto a las distintas opciones añadidas en el fichero sample de configuración véis especificado lo que es cada cosa:

ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;

subnet 192.168.0.0 netmask 255.255.255.0 {
interface eth0;
range 192.168.0.200 192.168.0.220;
option subnet-mask 255.255.255.0;
default-lease-time 6000;
max-lease-time 7200;
option time-offset -3600;
}

Finalmente, arrancamos el servicio:

/etc/init.d/dhcp start

Y el log (en mi caso vuelca a messages):

Oct 23 19:35:37 sylv1006 dhcpd: Internet Systems Consortium DHCP Server 4.1.0p1
Oct 23 19:35:37 sylv1006 dhcpd: Copyright 2004-2009 Internet Systems Consortium.
Oct 23 19:35:37 sylv1006 dhcpd: All rights reserved.
Oct 23 19:35:37 sylv1006 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 23 19:35:37 sylv1006 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Oct 23 19:35:47 sylv1006 dhcpd: Internet Systems Consortium DHCP Server 4.1.0p1
Oct 23 19:35:47 sylv1006 dhcpd: Copyright 2004-2009 Internet Systems Consortium.
Oct 23 19:35:47 sylv1006 dhcpd: All rights reserved.
Oct 23 19:35:47 sylv1006 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 23 19:35:47 sylv1006 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Oct 23 19:35:47 sylv1006 dhcpd: Wrote 0 leases to leases file.
Oct 23 19:35:47 sylv1006 dhcpd: Listening on LPF/eth0/00:16:3e:1d:36:42/192.168.0.0/24
Oct 23 19:35:47 sylv1006 dhcpd: Sending on   LPF/eth0/00:16:3e:1d:36:42/192.168.0./24
Oct 23 19:35:47 sylv1006 dhcpd: Sending on   Socket/fallback/fallback-net

Ahora que todo funciona correctamente, podemos configurar DHCP para que arranque automáticamente:

chkconfig dhcpd on

Chuletas de redes y comunicaciones

Gracias a All About Linux he encontrado una excelente recopilación de chuletas (Cheat Sheets) relacionadas con el mundo de las redes y comunicaciones. Concretamente hay de los siguientes temas:

  • Protocolos (BGP,EIGRP, First Hop Redundancy, IEEE 802.11 WLAN, IEEE 802.1X, IPsec, IPv4 Multicast, IPv6, IS-IS, OSPF, Spanning Tree).
  • Aplicaciones (tcpdump,Wireshark display filters).
  • Referencia (IOS IPv4 Access Lists, IPv4 Subnetting, Common Ports).
  • Sintaxis (Markdown, MediaWiki).
  • Tecnologías (Frame Mode MPLS, QoS, VLANs).
  • Miscelanea (Cisco IOS Versions, Physical terminations).

Sin duda muy recomendable para guardar en nuestros marcadores o incluso para imprimir y colgar en la pared. El enlace es el siguiente:

Cheat Sheets de redes y comunicaciones

Chuleta de creación de subredes (Subnetting)

Una entrada rápida para guardar en el archivo una excelente guía para hacer subnetting de redes, sobre todo para aquellos como yo que andamos un poco peces en el tema. Esta centrada en la creación de subredes para bloques de clase C.

- Enlace guía/chuleta para creación de subredes.

Estadísticas y monitorización de red con IPTraf

IPTraf
IPTraf

IPTraf es un excelente programa (para shell/consola) que permite recopilar estadísticas del tráfico de red en una máquina o LAN y además también permite monitorizar a tiempo real el tráfico de cada una de las interfaces de red del servidor, indicando el tráfico TCP/UDP, nº de paquetes recibidos/enviados, contador de bytes, etc.

Las características de la IPTraf son las siguientes:

  • Monitor de tráfico IP que muestra todo el tráfico IP que pasa a través de tu red, incluyendo información de TCP Flags, contador de paquetes y bytes, detalles ICMP y tipo de paquetes OSPF.
  • Estadísticas generales y detalladas de cada una de las interfaces de red, mostrando tráfico y contador de paquetes IP, TCP, UDP, ICMP, no-IP y otros contadores de paquetes IP, errores de IP checksum, actividad de las interfaces y contador de tamaño de paquetes.
  • Servicio de monitorización de paquetes de entrada y salida TCP y UDP de los puertos de aplicaciones comunes.
  • Estadísticas LAN, hosts activos y sus estadísticas de red
  • Filtros de vista para ver el tráfico de un determinado protocolo (TCP/UDP)
  • Sistema de logs.
  • Soporta interfaces Ethernet, FDDI, ISDN, SLIP, PPP, y loopback
  • Menú interactivo y pantalla completa.

Los protocolos que reconoce son los siguientes:

  • IP
  • TCP
  • UDP
  • ICMP
  • IGMP
  • IGP
  • IGRP
  • OSPF
  • ARP
  • RARP

IPTraf está disponible para descarga en los sistemas de paquetes de las siguientes distribuciones:

Merece la pena probarlo, os va a permitir monitorizar la red del servidor o LAN de una forma muy sencilla y con multitud de información al alcance de un par de teclas.

Configurar tarjeta de red en modo promiscuo

En informática, el modo promiscuo es aquel en el que una computadora conectada a una red compartida, tanto la basada en cable de cobre como la basada en tecnología inalámbrica, captura todo el tráfico que circula por ella. Este modo está muy relacionado con los sniffers que se basan en este modo para realizar su tarea.

Wikipedia

Si necesitáis configurar una tarjeta de red en modo promiscuo dentro de sistemas Red Hat o derivados, a la hora de configurar la interfaz de red debéis añadir el parámetro “-promisc”:

ifconfig eth0 -promisc

CentOS & Red-Hat: Configurar interfaz de red para trabajar en Full Duplex con ETHTOOL_OPTS

Ya hace un tiempo os dije las distintas formas de configurar una interfaz de red en sistemas Red-Hat, CentOS y derivados. Yendo un poco más lejos es posible que necesitemos configurar la interfaz para que trabaje en un modo de transimisión determinado, por ejemplo Full Duplex, Half Duplex, etc. y con un determinado caudal, 100Mb 10Mb, etc.

Esto se puede configurar a través del parámetro ETHTOOL_OPTS, que debemos añadir dentro del fichero de configuración de la interfaz de red (ifcfg), ver manual de configuración de interfaz de red.

Os dejo un ejemplo de la línea que tendríamos que añadir al fichero de configuración de la interfaz para configurarla sin autonegociación, a una velocidad de 100Mb y en Full Duplex:

ETHTOOL_OPTS="autoneg off speed 100 duplex full"

Definiciones Wikipedia:

Full dúplex (dúplex)

Una simple ilustración de un sistema de comunicación full-duplex.

La mayoría de los sistemas y redes de comunicaciones modernos funcionan en modo dúplex permitiendo canales de envío y recepción simultáneos. Podemos conseguir esa simultaneidad de varias formas:

  • Empleo de frecuencias separadas (multiplexación en frecuencia)
  • Cables separados

Nota: No existen colisiones en Ethernet en el modo full-duplex.

Half dúplex (semidúplex)

Una simple ilustración de un sistema de comunicación half-duplex.

En ocasiones encontramos sistemas que pueden transmitir en los dos sentidos, pero no de forma simultánea. Puede darse el caso de una comunicación por equipos de radio, si los equipos no son full dúplex, uno no podría transmitir (hablar) si la otra persona está también transmitiendo (hablando) porque su equipo estaría recibiendo (escuchando) en ese momento. En radiodifusión, se da por hecho que todo duplex ha de poder ser bidireccional y simultáneo, pues de esta manera, se puede realizar un programa de radio desde dos estudios de lugares diferente.

Broadcast, Multicast y Unicast

En terminología de redes y comunicaciones hay que tener claro la diferencia entre estos tres terminos relacionados con el envío de paquetes.

Unicast

El término unicast hace referencia al envío de paquetes o información desde un único emisor a un único receptor. Ejemplos básicos de aplicaciones unicast son los protocolos http, smtp, ftp o telnet. Actualmente es la forma predominante de transmisión en Internet.

En terminos cotidianos, una comunicación unicast podría ser por ejemplo una llamada telefónica entre dos personas.

Multicast

Multicast (multidifusión) es el envío de información en una red a múltiples receptores de forma simultanea, un emisor envía un mensaje y son varios los receptores que reciben el mismo.

Si antes hablabamos de que una comunicación unicast era una llamada telefónica entre dos personas, podemos decir que una comunicación multicast podría ser una conferencia, en la que son varias las personas que se comunican entre sí. Un ejemplo claro de comunicación multicast en Internet es un IRC (Internet Relay Chat).

Broadcast

Como bien explican en la Wikipedia, Broadcast es un modo de transmisión de información donde un nodo emisor envía información a una multitud de nodos receptores de manera simultánea, sin necesidad de reproducir la misma transmisión nodo por nodo.

En la vida cotidiana, un ejemplo de comunicación Broadcast es el de una emisora de radio, que emite señales sin saber quien la recibe, el receptor decide si recibirla o no, al igual que la señal de la televisión, que se envía a todos los receptores.

Para profundizar más acerca de este tema, recomiendo revisar este manual de redes.