En la presente entrada mostramos un "How to" para poder compartir la conexión a internet a través de nuestro servidor FreeBSD.
En el tutorial utilizaremos para NAT la implementación "in-kernel NAT", es reciente y en esta versión 13 no necesita realizar otras acciones que las que se indican aquí.
Note: probado (test) sobre FreeBSD 12.3 y FreeBSD 13
Escenario:
Internet---Proveedor(modem/router)---(em0)[FreeBSD 13](em1,em2)---Switch LAN
Donde em0, em1, em2 son las interfaces ethernet (cableada) de nuestro sistema operativo FreeBSD 13; los segmentos de red respectivamente para las interfaces son como sigue:
em0-> 192.168.1.0/24 y la ipv4 para la interfaz em0 es 192.168.1.5/24
em1-> 192.168.2.0/24 y la ipv4 para la interfaz em1 es 192.168.2.5/24
em2-> 192.168.3.0/24 y la ipv4 para la interfaz em2 es 192.168.2.5/24
Luego de instalar FreeBSD, realizamos algunos ajustes para nuestro caso, como observamos tenemos 3 interfaces ethernet, agregamos dos interfaces ethernet en el archivo /etc/rc.conf, utilizamos a ee como editor de texto.
#ee /etc/rc.conf
##Network
ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
ifconfig_em1="inet 192.168.2.5 netmask 255.255.255.0"
ifconfig_em2="inet 192.168.3.5 netmask 255.255.255.0"
##Gateway by default
defaultrouter="192.168.1.1"
##Firewall
gateway_enable="YES" #para ser puerta de enlace a redes LAN
firewall_enable="YES" #habilitamos el firewall nativo a FreeBSD
firewall_nat_enable="YES" #habilitamos nat
firewall_script="/etc/ipfw.rules" #ipfw.rules es un nombre cualquiera.
Como observamos tenemos 254 ipv4 utilizables para cada segmento de red, son segmentos diferentes.
Reiniciamos la red de datos:
#service netif restart
#ifconfig #debe mostrarse las nuevas ipv4 en las interfaces lan y hacerle ping a cada ipv4
#service routing restart #algunas veces es necesario cuando se reinicia las interfaces
Creamos un archivo con nombre /etc/ipfw.rules, para ello usamos el editor ee (nativo en FreeBSD)
#ee /etc/ipfw.rules
#!/bin/sh
##limpiamos reglas
ipfw -q -f flush
##asignamos un nombre a cada interface
cmd="ipfw -q add"
##interfaces con variabes
pif0="em0" #wan
pif1="em1" #Lan 1
pif2="em2" #Lan 2
##habilitamos a las interfaces
$cmd 005 allow all from any to any via $pif1
$cmd 006 allow all from any to any via $pif2
##para la interface loopback, interface interna
$cmd 010 allow all from any to any via lo0
##reensamblar los paquetes entrantes
$cmd 099 reass all from any to any in
##Disable one_pass it is necessary or mandatory to NAT, in-kernel NAT
ipfw disable one_pass
##NAT, in-kernel NAT
ipfw -q nat 1 config if $pif0 same_ports unreg_only reset
$cmd 100 nat 1 ip from any to any in via $pif0
$cmd 1000 nat 1 ip from any to any out via $pif0
##It is necessary to do ping between interfaces when you use FreeBSD terminal
$cmd 1001 allow ip from any to any
Deshabilitar opciones en /etc/sysctl.conf, necesario para in-kernel NAT
#ee /etc/sysctl.conf
net.inet.tcp.tso="0"
Iniciar el servicio IPFW
#service ipfw start
Listar las reglas escritas, observar que hay una última regla que deniega todo al final
#ipfw list
Si por algún motivo no ha escrito alguna línea en /etc/rc.conf, por ejemplo te olvidaste de escribir gateway_enable="YES", entonces para que funciones como puerta de enlace a la redes internas, hacer un reboot :D.
#reboot
Al iniciar todo debe estar bien, disfruta de tu enrutador :D
Se puede personalizar bastante, eso depende del conocimiento de ipfw, bloquear, permitir entre otros, en este tutorial se ha puesto interés en hacer NAT, que funcione, no fue de interés hacer un firewall seguro.
Pruebas: los clientes conectados a las interfaces em1 y em2 utilizan la puerta de enlace de FreeBSD, ipv4 en las interfaces em1 y em2, conociendo defautlrouter en FreeBSD, entonces desde el cliente debe hacer ping, si es así ya esta enrutando y puede hacer ping a otras redes como internet y dominios en internet (el cliente para resolver nombres debe usar un servidor dns)
Referencia: https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-ipfw
¡Ami también me sirvió, muchas gracias por la info!
ResponderBorrar