Páginas

Mostrando entradas con la etiqueta nat. Mostrar todas las entradas
Mostrando entradas con la etiqueta nat. Mostrar todas las entradas

viernes, 6 de febrero de 2026

Alternativas cuando el Router no Permite el Reenvío de Puertos

Bibliografía:

Tailscale

En la página de Tailscale "Regístrese con su proveedor de identidad", inicie sesión con una cuenta de proveedor de identidad de inicio de sesión único (SSO).

como habilitar acceso remoto a un servidor local (FreeBSD 14.3), que está detrás de un NAT (una red doméstica donde el ISP no permite abrir puertos), sin necesidad de un dominio publico.

Tailscale, un servicio P2P basado en wireguard que implementa NAT traversal para crear una red VPN segura y privada. Permite conectar dispositivos de forma directa (P2P) cuando es posible, o a través de relays (DEP servers) si el NAT es estricto. No expone puertos públicos ni requiere configuraciones complejas en routers. Tailscale es gratuito para uso personal (hasta 3 usuarios y 100 dispositivos).

Tailscale no necesita dominio público porque el acceso se realiza a través de IPs privadas de Tailscale (en el rango 100.64.0.0/10 conocidas como CGNAT) o nombre de host automáticos en tu "tailnet" (red privada de Tailscale). 

Instalación, configuración, NAT traversal y acceso a servicios locales. Asumido que tiene acceso root en el servidor FreeBSD 14.3 y que el sistema está actualizado (pkg update && pkg upgrade).

Wireguard es el protocolo subyacente, un VPN moderno, ligero y seguro que usa criptografía de curva elíptica para túneles cifrados.

Nat Travesal. Tailscale utiliza técnicas como STUN (para descubrir IPs públicas y puertos), ICE (para negociar conexiones P2P) y relays DERP (servidores de Tailscale que actúan como intermediariso si el P2P falla debido a NAT simétrico o firewalls estrictos).

Tailnet. Su red privada virtual. Todos los dispositivos autenticados en su cuenta forman parte de ella.

Servicios locales. Para acceder a un servicio en el servidor (por ejemplo web en 80), el cliente se conecta a la IP de Tailscale + puerto, como si estuvieran en la misma LAN.

Dispositivo cliente (PC, teléfono móvil, etc.) desde donde se accederá instalando Tailscale (disponible para Windows, macOS, FreeBSD, iOS, Android, Linux).

Firewall en FreeBSD. Si usa PF (Packet Filter), asegurarse de que permita tráfico saliente (por defecto lo hace). No necesita reglas entrantes especiales para Tailscale, ya que utiliza la interfaz tailscale0.

Instalar Tailscale en el servidor local (FreeBSD 14.3)

pkg install tailscale

Esto instala tailscaled (el demonio) y tailscale (la CLI). Dependencias como Wireguard se instalan automáticamente.

Habilitar el servicio para que inicie al inicio

sysrc tailscaled_enable="YES"

Iniciar el servicio

service tailscaled start

Comprobar el estado

service tailscaled status

Autenticar el servidor en tu tailnet

tailscale up

Esto genera un URL de autenticación (ej. https://login.tailscale.com/a/65831eb3ddff0). Copiar y pegar en un navegador en cualquier dispositivo. Iniciar sesión con su cuenta de Tailscale para aprobar el dispositivo. Una vez aprobado, el comando completará y el servidor se unirá a su tailnet.

Recomendación de mantenimiento


Nunca vuelva a ejecutar tailscale up sin --hostname o sin haber hecho tailscale logout antes. Uso correcto:

tailscale logout
tailscale up --hostname=tornado
tailscale status
100.115.10.68   tormenta  nombreusuario@  freebsd

Se muestra el servidor con una IP de Tailscale y estado online

ifconfig tailscale0 para la interfaz VPN.

ifconfig tailscale0

tailscale0: flags=1008043< <UP,BROADCAST,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 1280
	options=4080000< <LINKSTATE,MEXTPG>
	inet 100.115.10.68 netmask 0xffffffff broadcast 100.115.10.68
	inet6 fd7a:115c:a1e0::cd01:687 prefixlen 48
	groups: tun
	nd6 options=101 <PERFORMNUD,NO_DAD>
	Opened by PID 27732
You are about to connect the device tormenta to the nombreususario@gmail.com tailnet.

Public key 		nodekey:af18fa705771d20c28856057767cafc...

Hostname    		tormenta

Operating system	freebsd (14.3-RELEASE-p7)

Tailscale version	1.94.1

tormenta		100.115.10.68

No es necesario configurar nada extra en su router o firewall.

Exponer Servicios Locales

Por defecto, Tailscale permite acceso a cualquer puerto en la IP de Tailscale del servidor, siempre que el servicio escuche en 0.0.0.0 o la interfaz tailscale0

Ejemplo para un servidor web (por ejemplo, Nginx en el puerto 80) se configura para escuchar en 0.0.0.0:80

Archivo de configuración /usr/local/etc/nginx/nginx.conf

---
server {
        listen       8000; #poudriere
        server_name  localhost;
        root /usr/local/share/poudriere/html;

        location /data {
            alias  /usr/local/poudriere/data/logs/bulk;
            autoindex on;
        }

        location /packages {
                root /usr/local/poudriere/data;
                autoindex on;
        }

        location / {
                index index.html index.htm;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
}

# Servidor web principal en el puerto 80
server {
        listen 0.0.0.0:80; #nginx
        server_name localhost;

        root /usr/local/www/nginx;
        index index.html index.htm;

        # Paginas de error para el servidor principal
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

}
---

Si se quiere acceder a toda la subred local (otros dispositivos en la red 192.168.88.0/24), se tiene que habilitar subnet routes:

tailscale up --advertise-routes=192.168.88.0/24. Posteriormenta se aprueba en el 
admin console.

Seguridad adicional

Usar ACLs (Access Control Lists) en el admin console para restringir accesos (por ejemplo, solo ciertos usuarios pueden acceder al servidor).

Habilitar MagicDNS. En el admin console, ir a DNS > Enable MagicDNS. Para usar nombre como fsb143 en lugar de IPs.

Para headless (sin interacción): Usar pre-auth keys

Acceso desde Internet (lado cliente)

Instalar Tailscale en el dispositivo
Ejecutar tailscale up y autenticar con el mismo URL/login utilizado para el servidor 
(unirse al mismo tailnet)

Una vez conectado acceder al servidor

Web:
abrir http://100.115.10.68:80 (reemplazar con la IP de Tailscale del servidor 
obtenida de tailscale status). Bienvenido al servidor FreeBSD nginx! Si ve esta pagina, el servidor web nginx se instalo correctamente y funciona
correctamente. Se requiere configuracion adicional. Para obtener documentacion y soporte en linea, consulte nginx.org. Gracias por usar nginx.
FreeBSD es genial!.

jueves, 19 de diciembre de 2024

Evitar el Doble NAT - Traduccion de Nombres de Red

Evitar el doble NAT


Cuando el router del módem y el router inalámbrico están conectados en serie, es posible que encuentre algunos problemas con su servicio de Internet debido a la doble NAT (traducción de direcciones de red).

Una posible solución

Crear una ruta estatica en el router de la operadora que cualquier paquete que llegue para la red 192.168.88.0/24 lo envie a la dirección del router 192.168.1.43 que él lo gestionará y el router neutro (Mikrotik) enviará los paquete al dispositivo conrrespondiente, suponiendo que tiene su propia LAN 192.168.88.0/24 y la IP de la puerta de enlace de los dispositivos que se conectan el segundo router seria la 192.168.88.1. Los dispositivos que se conectan a él le asignaria la direccion IP el DHCP del router neutro. La puerta de enlace del router neutro es la 192.168.1.1

Advanced Setup -> Routing -> Static Routes

IP Version DstIP/Prefix/Length Gateway 		Interface  metric
4 	   192.168.88.0/24     192.168.1.43     LAN/Br0    1


FreeBSD es genial!.

lunes, 20 de enero de 2020

DDNS Mikrotik IP dinamica



DDNS funciona revisando la IP cada segundos. El tiempo de espera del servidor Cloud Mikrotik (15 segundos). Registro DDNS TTL (60 segundos). Envía paquetes encryptados a cloud.mikrotik.com usando el puerto UDP = 15252.
 
Activar el servicio DDNS
IP Cloud

DDNS enabled



Ya asignada una dirección de dominio del tipo a4b00b98ca6c.sn.mynetname.net. La primera parte está relacionada con nuestro disopositivo y la segunda es la parte del dominio que maneja Mikrotik. A partir de este punto cuando querramos ingresar al router utilizaremos el dominio y no la IP. En el momento que la dirección IP cambie el router automáticamente esa ip y en el Cloud estará la nueva IP disponible y nosotros vamos a tener acceso a nuestro router.

Pero no es suficiente con el dominio para alcanzar nuestro router porque tenemos políticas de firewall que nos están impidiendo el acceso a esa IP. La última regla del firewall dice: todo lo que venga hacia el router (input) que entre por la interfz WAN drop.


Es decir, cualquier servicio que no esté explícitamente permitido por el firewall será rechazado.

Crear la regla

IP Firewall
New Firewall Rule

Todo lo que vaya al router (input) a través del protocolo tcp y puerto 80 lo aceptamos. Y luego colocar esta nueva regla por encima del drop, si no no se va a ejecutar porque el firewall se ejecuta de manera lineal.

Chain input
Protocol tcp
Dst. Port 80 (Todo lo que vaya al puerto 80)
Action Accept



Abrir Firefox y en la barra de direciones pegar el nombre del dominio proporcionado por Mikrotik y ya tengo acceso al Router desde mi red interna.

Si tenemos un modem un router y después otro router y en este último quiero utilizar IP Cloud. Habilitar IP Cloud para que el segundo routerMikrotik nos asigne el DNS Name. Un mensaje nos informa que el Router está detrás de un NAT y que la conexión remota podría no funcionar. En este segundo router el servicio web está en el puerto 81. Por tanto en el navegador será DNS Name:81. pero no funcionará porque no hemos establecido la regla en el Firewall del router principal.

IP Firewall
Chain input
Protocol tcp
Dst. Port 81
Action Accept


También necesitamos una regla NAT para redirigir el tráfico desde el Router principal al router secundario. Creamos una Address List que llamaremos WAN donde copiaremos DNS Name desde IP Cloud. Luego creamos la regla en IP Firewall NAT


IP Firewall pestaña NAT
Chain: dstnat
Protocol tcp
Dst. Port 81
Pestaña Advanced
Dst.Address List: WAN
Pestaña Action
Action: dst-nat
To Address: 192.168.10.1
To. Address: 192.168.10.1
To Ports: 81




Ya tenemos acceso a los dos Router Mikrotik.




MikroTik es genial!.

domingo, 19 de enero de 2020

Enlace punto a multipunto MikroTik

Conectando clientes finales al router repetidor

Enlace Punto a Punto Transparente


Los enlaces punto a multipunto permiten interconectar a más de dos clientes. Tendremos equipos operando en modo AP bridge para proporcionar acceso a Internet a clientes residenciales, clientes corporativos.

Cada uno de estos clientes finales va a tener su equipo con NAT es decir nuestra IP de acceso va a estar en una interfaz que vamos a llamar WAN y luego habrá otra interfaz que va a tener otra red LAN para el cliente en particular. Estamos creando una segmentación de la red de nuestro lado y del lado del cliente, hecho que ayuda a aumentar la seguridad en nuestra red.

Para realizar este laboratorio partiremos de la configuración del WDS enlace punto a punto trasparente realizado anteriormente.

Estoy conectado a uno de los puertos LAN del Cliente (station) para acceder vía winbox. Ni el AP ni el cliente están haciendo direccionamiento IP de Internet únicamente es un enlace transparente.

En estos momentos la IP que está proporcionándome el router administrador es la 192.168.88.246 la IP que tomó mi computadora y está el gateway como 192.168.88.1 eso significa que la dirección de red es la 192.168.88.0/24 así que vamos a crear una segmentación de red en este equipo cliente.


Empezamos en el router Cliente. El primer paso es cambiar al modo Station, donde antes teníamos station_wds, ya que no necesitamos tener activado el Mode wds, no nos interesa lo que va a estar en la parte de la red LAN del cliente. Nos interesa hasta este puerto (la interfaz wlan1), donde vamos a gestionar el control de ancho de banda y otros parámetros.

                                                         
A la interfaz wlan1 le llamaremos WAN y le agregaremos una dirección IP.


Antes teníamos una dirección IP al bridge_wds que vamos a eliminar, al bridge_wds a partir de ahora le llamaremos LAN. Vamos a tener en LAN (bridge) todos los puertos Ethernet (desde ether1 a ether4) del equipo y eliminamos el puerto WAN de la configuración anterior (enlace punto a punto).



Para asignar una IP a LAN tenemos dos opciones: una IP estática o una ip por cliente DHCP, en este caso utilizaremos una IP por cliente DHCP y para ello vamos a DHCP Client y agregamos un cliente DHCP en la interfaz WAN que es la que nos dará acceso a Internet. En estos momentos la interfaz WAN está buscando IP pero como no estamos enlazados al AP nunca encontrará el servidor DHCP.



Nos falta hacer el masquerade, EL NAT de la red privada LAN a la red de Internet que estará en el puerto WAN. Para ello vamos a IP Firewall, NAT. Clic en más (+) en Chain seleccionamos srcnat, Out interface WAN y en la pestaña Action elegimos masquerade.

                                    
En este punto vamos a crear una red con una dirección IP que se la vamos a asignar a la red LAN. Este segmento de red es donde vamos a tener los equipos de los clientes (PC, tablets, teléfonos móviles,etc) o si ponemos un router WiFi, tendrá una IP de esta red. Será la 192.168.0.1/24 que pertenece a la red 192.168.1.0/24


También crearemos un servidor DHCP en la interfaz LAN utilizando DHCP setup para que los clientes obtengan una dirección IP automáticamente si tienen habilitado el cliente DHCP. De manera que si renovamos la IP del PC desde el que estamos conectados al router que estamos configurando, veremos que adquiere una IP del segmento de la red LAN que acabamos de crear. SI vamos al Winbox, IP, DHCP Server, Leases, aquí ya aparece la IP que asignó a mi computadora 192.168.0.246. En resumen, cada uno de los clientes inalámbricos tendrá: Una IP en un puerto de WAN que va a ser wireless y una IP en el puerto de LAN y hacer masquerade en NAT a la interfaz de Internet.


En System Identity cambiamos el nombre a Equipo-cliente y en la pestaña Wireless de la interfaz WAN el Radio Name también escribimos Equipo-cliente y clic en Ok.



Configuración del AP

Me conecto al AP con cable Ethernet a un puerto LAN. Cambiar el modo de operar y eliminar el WDS. Abrimos winbox y vamos a Interfaces wlan1 y en la pestaña WDS deshabilitar WDS Mode y en WDS Default Bridge none luego clic en Aplicar. En la pestaña Wireless cambiamos el modo bridge a ap bridge ya que este modo permite conectar más de un cliente inalámbrico, clic en aplicar y Ok.



Llegados a este punto el Equipo_cliente debería estar enlazado. Para comprobarlo vamos a Wireless, se nos abre la ventana Wireless tables, en la pestaña Registration aparece un equipo llamado Equpipo_station.

Ahora renombramos el bridge bridge_WDS a RED_LAN y agregamos el resto de interfaces incluyendo wlan1 que es la que realiza la transmisión desde el AP hacia el cliente.



Ahora voy a conectar el cable desde mi PC a cualquier puerto ethernet del Equipo_cliente  y automáticamente va a recibir una dirección IP que será del rango de la red 192.168.0.0/24.

Mikrotik es genial!.

martes, 20 de mayo de 2014

FreeBSD Server NAT IPFW


FreeBSD Server NAT IPFW

Nuestro servidor FreeBSD está dotado con dos tarjetas de red.

em0 interface LAN IP 192.168.3.1/24
em1 interface WAN (internet) 192.168.1.250/24

Algunos pasos adicionales son necesarios para que el servidor FreeBSD se convierta en router intermedario entre Internet y la red interna.

Después de intalar FreeBSD 9.1-RELEASE tendremos que recompilar el KERNEL para Habilitar NAT + FIREWALL, no sin antes tener las fuentes del núcleo instaladas.

Instalar las fuentes del kernel:
Si el directorio /usr/src/sys no existe quiere decir que las fuentes del kernel no están instaladas.

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz

Descomprimir el archivo en /usr/src:

# tar -C / -xvzf src.txz

Ahora desde el directorio arch/conf copiar el archivo de configuración GENERIC utilizando cualquier nombre:

# cp /usr/src/sys/amd64/conf/GENERIC /usr/src/amd64/conf/MYKERNEL

Añadir las siguientes opciones a /usr/src/sys/amd64/conf/MYKERNEL
# ee /usr/src/sys/amd64/conf/MYKERNEL
...
options    IPFIREWALL
options    IPFIREWALL_VERBOSE
options    IPFIREWALL_VERBOSE_LIMIT=5
options    IPFIREWALL_DEFAULT_TO_ACCEPT
options    IPDIVERT
...

Recompilar el kernel:
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL

El nuevo kernel se copiará al directorio raíz como /kernel y el viejo kernel tendrá de nombre kernel.old.

Reiniciar el sistema con el nuevo kernel.

Nos conectamos vía SSH para comprobar el nuevo kernel:
$ ssh -p 2222 remoto@freebsdsvr
Password:

$ hostname
freebsdsvr.linux.bcn

$ uname -a


Archivos de configuración:

$ cat /etc/rc.conf
gateway_enable="YES"     # igual que net.inet.ip.forwarding=1
natd_enable="YES" # Habilita NAT
natd_interface="em1" # nombre de la interfaz NIC conecta a Internet
natd_flags="-dynamic -m" # -m = preserve port numbers; additional
firewall_enable="YES"    # activa ipfw firewall
firewall_type="simple"   # protege red interna (LAN)
firewall_logging="YES"   # habilita log
firewall_script="/etc/rc.firewall" # path scrip IPFW

$ cat /boot/loader.conf
ipfw_load="YES"
ipdivert_load="YES"
autoboot_delay="2"
loader_color="YES"

FreeBSD - The power to Serve!

http://www.pl.freebsd.org/doc/handbook/firewalls-ipfw.html

Unix es genial!.

domingo, 17 de noviembre de 2013

FreeBSD server NAT IPFW dhcp-server dnsmasq squid

 Me encanta FreeBSD. Este servidor local es una pequeña máquina con un consumo muy bajo e incluye nat, firewall, dhcp-server, dnsmasq y squid y será el intermediario entre la red local e Internet. El sistema perfecto para esta tarea es FreeBSD.

Nuestro servidor FreeBSD está dotado con dos tarjetas de red.

em0 interface LAN IP 192.168.3.1/24
em1 interface WAN (internet) 192.168.1.254/24

Compilar kernel personalizado. Habilitar NAT + FIREWALL

Todo lo que existe dentro de un directorio de una arquitectura en particular, es específico para dicha arquitectura, el resto del código es común para todas las plataformas en las que FreeBSD funciona.

Si el dirctorio /usr/src/sys no existe quiere decir que las fuentes del kernel no están instaladas.

Es necesario tener el codigo fuente completo de FreeBSD para poder compilar el kernel.

Descargar las fuentes del kernel 9.1-RELEASE:

Instalar wget
# pkg_add -r wget

$ cd ~/descargas
$ fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz

Descomprimir el archivo a /usr/src:
# tar -C / -xzvf src.txz

Ahora desde el directorio arch/conf copiar el archivo de configuración GENERIC utilizando cualquier nombre:

# cp /usr/src/sys/amd64/conf/GENERIC /usr/src/amd64/conf/NEWGENERIC

Añadir las siguientes opciones a /usr/src/sys/amd64/conf/NEWGENERIC
# ee /usr/src/sys/amd64/conf/NEWGENERIC
...
options IPFIREWALL
options IPDIVERT

options IPFIREWALL_VERBOSE
...

# cd /usr/src
# make buildkernel KERNCONF=NEWGENERIC

# make installkernel KERNCONF=NEWGENERIC

El nuevo kernel se copiará al directorio raíz como /kernel y el viejo kernel tendrá de nombre kernel.old.

Reiniciar el sistema con el nuevo kernel.

Archivos de configuración:

$ cat /boot/loader.conf
ipfw_load="YES"
ipdivert_load="YES"
autoboot_delay="2"

$ cat /etc/rc.conf
hostname="freebsdsvr.linux.bcn"
keymap="spanish.iso.kbd"

# interface con acceso a Internet
ifconfig_em1="DHCP"
defaultrouter="192.168.1.1"
sshd_enable="YES"

# interface LAN
ifconfig_em0="inet 192.168.3.1 netmask 255.255.255.0"
moused_enable="NO"

# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"

gateway_enable="YES"
firewall_enable="YES"
firewall_logging="YES"
natd_enable="YES"
natd_interface="em1"
natd_flags="-f /etc/natd.conf"

# reglas personalizadas
# firewall_script="/etc/ipfw.rules"

# activer reglas dinamicas protegiendo LAN
firewall_script="/etc/rc.firewall"
firewall_type="simple"

$ ee /etc/natd.conf
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes

redirect_port tcp 192.168.3.60:80 8080
redirect_port tcp 192.168.3.60:22 2222

Guardar y salir

Reiniciar el servidor para comprobar que no tenemos mensajes de error.

# shutdown -r now

Todo perfecto. Seguimos con dhcp-server dnsmasq y squid:

Intalar y configurar dhcp-server

# pkg_add -r isc-dhcp41-server
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.1-release/Latest/isc-dhcp41-server.tbz... Done.
===> Creating users and/or groups.
Creating group 'dhcpd' with gid '136'.
Creating user 'dhcpd' with uid '136'.

Así quedará el archivo dhcpd.conf:

# sed -e '/^[ ]*#/d' -e '/^$/d' /usr/local/etc/dhcpd.conf
option domain-name "linux.bcn";
option domain-name-servers 192.168.3.1, 192.168.1.1;
option subnet-mask 255.255.255.0;
default-lease-time 3600;
max-lease-time 86400;
ddns-update-style none;
subnet 192.168.3.0 netmask 255.255.255.0 {
 range 192.168.3.40 192.168.3.50;
 option routers 192.168.3.1;

}
Para iniciar dhcp-server con el sistema

agregar al archivo rc.conf:
dhcpd_enable="YES" # dhcpd enabled?
dhcpd_flags="-q" # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file
dhcpd_ifaces="em0"    # ethernet interface(s)
dhcpd_withumask="022"   # file creation mask

Iniciar el servidor dhcp:
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.

Dnsmasq

Instalar dnsmasq
$cd /usr/ports
$ make search name=dnsmasq
$ cd /usr/ports/dns/dnsmasq/
# make install clean

cp /usr/local/etc/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

Archivo de configuración dnsmasq.conf
Filtrando dnsmasq.conf con sed para eliminar líneas que empiezan con un espacio, líneas que comienzan con almohadilla y líneas vacías.

sed -e '/^[ ]*#/d' -e '/^$/d' /etc/dnsmasq.conf
port=53
domain-needed
bogus-priv
strict-order
interface=em0
listen-address=127.0.0.1
expand-hosts
domain=linux.bcn

También podemos utilizar dnsmasq como dns  + dhcp y prescindir del servidor isc-dhcp; en cuyo caso el archivo /usr/local/etc/dnsmasq.conf quedaría más o menos como sigue: (Acto seguido se detiene el servidor dhcd # killall dhcpd, comentar las líneas que hacen referencia a dchp en el archivo /etc/rc.conf y reiniciar el servicio dnsmasq:

port=53
domain-needed
bogus-priv
strict-order
interface=em0
listen-address=127.0.0.1
expand-hosts
domain=linux.bcn
dhcp-range=192.168.3.40,192.168.3.50,12h
dhcp-host= 00:21:9b:e2:cd:44,192.168.0.60,infinite

Iniciar dnsmasq
# /usr/local/etc/rc.d/dnsmasq start
Starting dnsmasq.

Iniciar dnsmasq con el sistema
agregar esta línea al archivo /etc/rc.conf
dnsmasq_enable="YES"

Archivo resolv.conf del servidor

#permite a las maquinas locales obtener información DNS.
nameserver 127.0.0.1

#OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220

# Otra opcion es utilizar los DNS del proveedor ISP.
# nameserver 192.168.1.1

Impedir cambios en el fichero resolv.conf
Añadir esta línea al archivo de configuración de resolv.conf (resolvconf.conf)
# ee /etc/resolvconf.conf
resolv_conf="/dev/null"

Archivo resolv.conf de las máquinas cliente: $ cat /etc/resolv.conf
# Archivo inmutable resolv.conf
search linux.bcn
nameserver 192.168.3.1

Realizar consultas desde un cliente, comprobar que dnsmasq funciona:
$ nslookup # sustituido por drill en FreeBSD 10
> freebsdsvr
Server:        192.168.3.1
Address:    192.168.3.1#53

Non-authoritative answer:
Name:    freebsdsvr.linux.bcn
Address: 67.215.65.132

Squid

Instalar squid como paquete
# pkg_add -r squid
# squid -v
Version 2.7.STABLE9

Archivo de configuración squid.conf
Copiar archivo squid.conf
# cp /usr/local/etc/squid/squid.conf.default /usr/local/etc/squid/squid.conf

Filtrando el archivo /usr/local/etc/squid/squid.conf para ver las opciones del archivo de configuración de squid.:
Utilizando las opciones por defecto squid en freebsd funcionará a la primera.

# sed -e '/^[ ]*#/d' -e '/^$/d' /usr/local/etc/squid/squid.conf
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80  # http
acl Safe_ports port 8080  # also http
acl Safe_ports port 21  # ftp
acl Safe_ports port 443  # https
acl Safe_ports port 70  # gopher
acl Safe_ports port 210  # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280  # http-mgmt
acl Safe_ports port 488  # gss-http
acl Safe_ports port 591  # filemaker
acl Safe_ports port 777  # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/squid/logs/access.log squid
refresh_pattern ^ftp:  1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .  0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/squid/cache
cache_log /var/squid/logs/cache.log
logfile_rotate 10
minimum_object_size 0 KB
maximum_object_size 1024 MB
request_body_max_size 0
cache_dir ufs /var/squid/cache 5000 16 256
cache_mem 32 MB
visible_hostname freebsdserver

Crear los directorios swap
# squid -z

Desactivar test DNS inicial
# squid -D

Iniciar con el sistema.
Agregar al archivo /etc/rc.conf
squid_enable="YES"

El proxy ha sido configurado como transparent de manera que no hace falta configurar el navegador de los clientes:
Comprobar puertos abiertos:
# sockstat -4
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS     
carlos   sshd       1572  3  tcp4   192.168.3.1:2222      192.168.3.60:41422
root     sshd       1569  3  tcp4   192.168.3.1:2222      192.168.3.60:41422
root     sendmail   1496  3  tcp4   127.0.0.1:25          *:*
root     sshd       1493  4  tcp4   *:2222                *:*
squid    squid      1483  6  udp4   *:14091               *:*
squid    squid      1483  13 tcp4   192.168.3.1:3128      *:*
squid    squid      1483  14 tcp4   192.168.3.1:8080      *:*
squid    squid      1483  15 udp4   *:3130                *:*
dhcpd    dhcpd      1470  7  udp4   *:67                  *:*
nobody   dnsmasq    1368  3  udp4   *:53                  *:*
nobody   dnsmasq    1368  4  tcp4   *:53                  *:*
root     syslogd    1356  7  udp4   *:514                 *:*
root     natd       1318  3  div4   *:8668                *:*

Descargar e instalar parches de seguridad:

# freebsd-update fetch
# freebsd-update install

Si al kernel se ha aplicado algún parche tendrá que reiniciar. A partir de este momento el sistema está parcheado. freebsd-update puede ejecutarse utilizando cron con una entrada en /etc/crontab:

@daily  root  freebsd-update cron

Esta línea hará que una vez al día se ejecutr freebsd-update. El argumento cron pasado a freebsd-update intentará saber si existen actualizaciones. Si hay parches disponibles automáticamente los descargará al disco local sin instalarlos. El usuario root recibirá un mail informándole que puede aplicarlos.

Si algo ha fallado freebsd-update puede dar marcha atrás (roolback) hasta el último conjunto de cambios con la siguiente orden:

# freebsd-update rollback

Instalar portaudit

# pkg_add -r portaudit
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.1-release/Latest/portaudit.tbz... Done.

===>  To check your installed ports for known vulnerabilities now, do:

      /usr/local/sbin/portaudit -Fda

# portaudit -Fda                     auditfile.tbz                                   0% of   90 kB    0  Bpauditfile.tbz                                 100% of   90 kB  222 kBps
New database installed.
Database created: Sat Nov 16 20:10:00 CET 2013
Affected package: perl-5.14.2_2
Type of problem: perl -- denial of service via algorithmic complexity attack on hashing routines.
Reference: http://portaudit.FreeBSD.org/68c1f75b-8824-11e2-9996-c48508086173.html

Affected package: squid-2.7.9_1
Type of problem: squid -- denial of service.
Reference: http://portaudit.FreeBSD.org/c37de843-488e-11e2-a5c9-0019996bc1f7.html

2 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.

Para una lista de todas las reglas de funcionamiento de ipfw en secuencia:
# ipfw list




Para una lista de reglas dinámicas, además de reglas estáticas:
 


Unix es genial!.