Linux Guía Router ProxyCaché DNSCaché dhcpd CentOS 7

hpf

Lector entusiasta
Miembro del Equipo
MOD
Se incorporó
7 Mayo 2011
Mensajes
370
NOTA: Guía en edición, en honor al tiempo. Hecha en base la eximia guía con nombre casi homónimo de yakko. Faltan todos los descriptivos de los servicios, y por supuesto, textos y textos de información, incluyendo los divertidos comentarios del creador original de la estructura. Si los enanitos se me arrancaron hacia el bosque en alguna parte, por favor escribir los alcances necesarios.

A pesar de lo anterior, se irá rellenando en el próximo tiempo (dependiendo de la carga laboral, familia, etc.); por el momento, la dejo aquí lo más práctica posible.



I) REQUISITOS MÍNIMOS

PC con:
  • 2 NIC
  • 1 GB RAM
  • 1 Procesador de 1.2 Ghz (x86_64)
  • 10/20 GB Almacenamiento en disco
Prácticamente los requisitos del Sistema Operativo (CentOS 7)


1) INSTALACIÓN


a) Parámetros para interfaces de red

Durante el arranque del DVD, iluminar "Install CentOS 7" y presionar Tab para ingresar parámetros al final de la línea:

Código:
biosdevname=0 net.ifnames=0

Presionar Enter. Esto nos ayudará a que se reconozca el nombre de los dispositivos de red como "eth0", "eth1", etc.

b) Menú

Seleccionamos idioma a instalar, en el caso de esta máquina fue:

LOCALIZATION:

Language Support = Inglés
Date/Time = Americas/Santiago timezone
Keyboard = Spanish; Castilian Latin American (include dead tilde)

SECURITY:

Security Policy = OFF

SOFTWARE:

Installation Source = Local Media
Software Selection = Minimal Install

SYSTEM:

Partitioning = Manual
*Esquema de Particionado:

Se mantiene una partición aparte para /boot, y LVM para el resto de puntos de montaje. Nos basaremos en la guía original de yakko. Gracias a las bondades de LVM, luego podremos redimensionar o asignar el espacio necesario a los servicios que deseemos levantar.

2n19j6c.png


Kdump = Disabled
Network & Hostname = Activar la interfaz WAN. Setear hostname a "home-proxy"


c) Comenzamos la instalación

Mientras está instalando la paquetería, seteamos una contraseña de root.

2) PREPARACIÓN DE LA MÁQUINA

a) Desactivar SELinux

Ya que actúa a muy bajo nivel (llamadas al kernel, red, etc.), afectando directamente el rendimiento de la máquina y por ende, cada proceso y servicio que corra en ella. Es necesario reiniciar para que la configuración surja efecto.

Código:
# vi /etc/sysconfig/selinux

Cambiamos el estado de SELinux de "enforcing" a "disabled". La línea debería quedar así:

Código:
SELINUX=disabled

b) Nombre de la máquina

Si durante la instalación no configuramos el nombre de host de nuestra máquina, o lo quisiéramos cambiar a futuro, se puede hacer con el siguiente comando:

Código:
# hostnamectl set-hostname home-proxy

c) Verificamos los servicios al inicio

Quien haya instalado otro patrón de instalación, o en caso de que existan otros servicios asociados en su máquina, pueden listar todos los que comenzarán durante el arranque del sistema con el siguiente comando:

Código:
# systemctl list-unit-files | grep enabled | less

Presionamos "q" para salir. en caso de querer desactivar un servicio, basta con ingresar:

Código:
# systemctl disable serviciox

Existe una capa de compatibilidad para comandos anteriores.

3) CONFIGURACIÓN DE RED

En esta ocasión utilizaremos NetworkManager,. Aunque también se puede desactivar, y utilizar network.service para que lea nuestros archivos de configuración hechos a mano.

a) Configuración de interfaces

Con la herramienta "nmtui" podemos configurar las interafces de red de forma sencilla. También pueden utilizar nmcli.

eth0 = Configuración IPv4 automática.
Ignoramos configuración para IPv6.

eth1 = Configuramos sólo la dirección IP (192.168.0.1/24)
Ignoramos configuración para IPv6.

En cada una, importante seleccionar la opción para conectar automáticamente.

b) Activar los perfiles

Luego de configurar cada interfaz. Con "nmtui" activamos y desactivamos los perfiles de configuraciones deseados, ingresando a "Activate a connection".

4) ACTIVANDO EL ROUTER

a) Bit de forwarding

Para que nuestra máquina permita el paso de paquetes desde una red a otra, basándose en la tabla de rutas, activamos de forma permanente el parámetro del kernel para reenviar paquetes ipv4.

Código:
# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/10-forwarding.conf

En versiones anteriores de RHEL (o CentOS), editábamos directamente el archivo /etc/sysctl.conf, sin embargo, dentro de los nuevos cambios y buenas prácticas, está el mandato de que sysctl.conf es parte del rpm, y que en una posible actualización, las configuraciones antiguas se pierdan (varios servicios incluyen esta lógica, como httpd, autofs, etc). Ojo que existe la retrocompatibilidad, por lo tanto si se edita el archivo directamente, también obtenemos los resultados deseados.

b) Firewalld

Nuestra interfaz por defecto para netfilter en RHEL 7 / CentOS 7 es firewalld. Configuraremos dos zonas, una interna (lan) y otra externa (wan), y haremos el enmascaramiento utilizando esta herramienta; si es más cómodo para alguien utilizar iptables, tan sólo desactive el servicio y active iptables (yum install iptables-services -y && systemctl stop firewalld ; systemctl disable firewalld && systemctl start iptables ; systemctl enable iptables).

Para el servicio de firewalld, utilizamos una herramienta llamada "firewall-cmd", con la cual realizamos los mandatos para configurar todo a gusto. Cuando se trata de crear reglas más complejas, existen métodos para introducir reglas de iptables sin perder las configuraciones creadas.

a) Primero, asignamos cada interfaz a una zona específica.

Código:
# firewall-cmd --change-interface=eth0 --zone=external --permanent
# firewall-cmd --change-interface=eth1 --zone=internal --permanent

Comprobamos que lo anterior esté correctamente asignado.

Código:
# firewall-cmd --get-active-zones

En caso de que las interfaces estén todavía en la zona por defecto (public), como pasa con algunas tarjetas intel, hay que editar directamente los archivos de configuración y agregar la línea de zona:

Código:
# echo "ZONE=external" >> /etc/sysconfig/network-scripts/ifcfg-eth0; echo "ZONE=internal" >> /etc/sysconfig/network-scripts/ifcfg-eth1; ifdown eth0 && ifup eth0 && ifdown eth1 && ifup eth1

b) Añadir el enmascaramiento

Para que todas las peticiones hacia la WAN sean realizadas utilizando NAT, designamos el masquerade en la zona externa.

Código:
# firewall-cmd --add-masquerade --zone=external --permanent
# firewall-cmd --query-masquerade --zone=external

5) Configurando el caché DNS

La solución recomendada por Red Hat para el servicio de DNS caché, es Unbound. Si alguien gusta de otro programa para este efecto (BIND, dnsmasq, etc), bienvenido sea.

a) Instalación y configuración del servicio

Procedemos a instalar la paquetería necesaria.

Código:
# yum install unbound -y

Configuramos el servicio para que sea iniciado durante el arranque.

Código:
# systemctl enable unbound

b) Configuración DNSSEC

Para crear de forma automática las llaves y certificados de validación DNSSEC para las peticiones/respuestas que Unbound realiza, usaremos el siguiente comando.

Código:
# unbound-control-setup

Ojo, Unbound trabaja con estándares de seguridad por encima de otro software por defecto, por lo tanto, el no realizar el paso anterior puede provocar problemas con las solicitudes DNS.

c) Editar el archivo de configuración

La configuración de Unbound está en un solo archivo, lo editaremos.

Código:
# vi /etc/unbound/unbound.conf

Añadiremos los siguientes parámetros. Considerando el NS de google como nuestro forwarder.

Código:
interface: 192.168.0.1
access-control: 192.168.0.0/24 allow
forward-zone:
   name: "."
   forward-addr: 8.8.8.8

Chequeamos la configuración.

Código:
# unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf

Iniciamos el servicio, y lo dejamos listo para iniciar en el arranque.

Código:
# systemctl start unbound
# systemctl status unbound

Añadimos las reglas en el firewall.

Código:
# firewall-cmd --add-service=dns --permanent
# firewall-cmd --reload

6) Configurando el servicio DHCP

a) Instalación de la paquetería

Código:
#yum install dhcp

b) Archivo de Configuración

Editamos manualmente el archivo de configuración.

Código:
# vi /etc/dhcp/dhcpd.conf

Ingresamos la siguientes opciones. El nombre de dominio "casa.cl" puede ser reemplazado a gusto.

Código:
authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.100 192.168.0.200;
   option domain-name-servers 192.168.0.1, 8.8.8.8;
   option domain-name "casa.cl";
   option routers 192.168.0.1;
   option broadcast-address 192.168.0.255;
   default-lease-time 600;
   max-lease-time 7200;
}

c) Inicio del servicio y reglas de firewall

Para iniciar el servicio de inmediato, y luego activar el mismo cuando arranque el sistema, ingresamos.

Código:
# systemctl start dhcpd
# systemctl enable dhcpd

Añadimos las reglas del firewall.

Código:
# firewall-cmd --add-service=dhcp --zone=internal --permanent
# firewall-cmd --reload

7) Configuración de squid (proxy)

a) Instalación del servicio

Código:
# yum install squid -y

b) Editando el archivo de configuración

Con nuestro editor favorito, ingresamos a.

Código:
# vi /etc/squid/squid.conf

Los parámetros a editar tienen directa relación con el espacio de almacenamiento de nuestra máquina, siendo, por ejemplo, la memoria caché utilizada 3/4 de la RAM de nuestro equipo.

La acl localnet viene por defecto con varias redes privadas por defecto, hacemos match en la nuestra, que posee máscara 24.

Código:
acl localnet src 192.168.0.0/24

http_access allow localnet

http_port 192.168.0.1:3128 intercept
http_port 192.168.0.1:8080

cache_dir ufs /var/spool/squid 10000 16 256

visible_hostname home-proxy.casa.cl
cache_mem 768 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 10240 KB

En esta versión de squid, para trabajar en modo transparente, incluímos dos sockets con el parámetro http_port.

c) Reglas del firewall

Para que el proxy trabaje de manera transparente (sin intervención en las máquinas de los clientes), realizamos una redirección de puertos interna con nuestro firewall.

Código:
# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=192.168.0.1 --zone=internal --permanent
# firewall-cmd --add-port=3128/tcp --zone=internal --permanent
# firewall-cmd --reload

FIN
 
Última modificación:

Cosme

Gold Member
Se incorporó
27 Febrero 2005
Mensajes
8.281
encuentro que dnsmasq es re facil de usar y permite establecer forwarders distintos para cada dominio consultado (practico cuando tienes una red interna)

todo por 8.8.8.8
santiago.local consultar a 192.168.0.1/24
antofalombia.local consultar a 192.168.1.1/24
 
Upvote 0

hpf

Lector entusiasta
Miembro del Equipo
MOD
Se incorporó
7 Mayo 2011
Mensajes
370
encuentro que dnsmasq es re facil de usar y permite establecer forwarders distintos para cada dominio consultado (practico cuando tienes una red interna)

todo por 8.8.8.8
santiago.local consultar a 192.168.0.1/24
antofalombia.local consultar a 192.168.1.1/24

Absolutamente, de hecho en casa uso dnsmasq para los entornos físicos y virtuales :risas .
Sólo quería variar un poco.


Enviado desde mi iPhone utilizando Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.601
jojo el server de la casa está cooperando con cuática (sospecho las memorias, el kernel me tira varios warnings por segundo con algo relacionado con los bancos de memoria) así que me viene de perillas esta guía, aunque ya lo tenía configurado con todo una reinstalación no es mala idea :) Ya me conseguí proce, placa y memoria, lo demás no cambia mucho xD Será buen upgrade: de pentium 4 D 3Ghz con 2GiB RAM a un i5 con 8GiB RAM :)

Aprovecho tb de formatear uno de los discos que está con exFAT y que quiero cambiarlo a uno nativo de Linux, probablemente me vaya por btrFS.

Tb aprovecharé de dejar todos los logs en /var/log como corresponde y no algunos en /home como dejé ahora a la rápida jajajajaj

Saludos.
 
Upvote 0

hpf

Lector entusiasta
Miembro del Equipo
MOD
Se incorporó
7 Mayo 2011
Mensajes
370
jojo el server de la casa está cooperando con cuática (sospecho las memorias, el kernel me tira varios warnings por segundo con algo relacionado con los bancos de memoria) así que me viene de perillas esta guía, aunque ya lo tenía configurado con todo una reinstalación no es mala idea :) Ya me conseguí proce, placa y memoria, lo demás no cambia mucho xD Será buen upgrade: de pentium 4 D 3Ghz con 2GiB RAM a un i5 con 8GiB RAM :)

Aprovecho tb de formatear uno de los discos que está con exFAT y que quiero cambiarlo a uno nativo de Linux, probablemente me vaya por btrFS.

Tb aprovecharé de dejar todos los logs en /var/log como corresponde y no algunos en /home como dejé ahora a la rápida jajajajaj

Saludos.

Haha tira logs a otro punto de montaje, y comprime el logrotate.

Con ese maquinón de upgrade puedes incluso montar unas máquinas virtuales con kvm o xen para jugar. Tambien puedes instalar transmission como servicio y bajar "isos" a diestra y siniestra :risas .


Enviado desde mi iPhone utilizando Tapatalk
 
Upvote 0

K3rnelpanic

non serviam
Miembro del Equipo
MOD
Se incorporó
1 Octubre 2007
Mensajes
6.065
Oye vikingo, pero cómo los logs al home :naster xD

Yo de momento tengo en la casa una raspberry Pi y un generoso disco de 750 GB en un case como centro de descargas :yao. Su tunel ssh y me conecto a la interfaz web del transmission :D.

Volviendo a la guía, esperamos que la completes don hpf.
 
Upvote 0

hpf

Lector entusiasta
Miembro del Equipo
MOD
Se incorporó
7 Mayo 2011
Mensajes
370
Oye vikingo, pero cómo los logs al home :naster xD

Yo de momento tengo en la casa una raspberry Pi y un generoso disco de 750 GB en un case como centro de descargas :yao. Su tunel ssh y me conecto a la interfaz web del transmission :D.

Volviendo a la guía, esperamos que la completes don hpf.

Hahaha, he visto logs en home, en plataformas antiguas hechas para Linux. Con el paso del tiempo hubo más que un problema xD.

Transmission como daemon is da best!

No me llames "don", haha, soy un cabro que está recién aprendiendo todavía.


Enviado desde mi iPhone utilizando Tapatalk
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.402
Hahaha, he visto logs en home, en plataformas antiguas hechas para Linux. Con el paso del tiempo hubo más que un problema xD.

Transmission como daemon is da best!

No me llames "don", haha, soy un cabro que está recién aprendiendo todavía.


Enviado desde mi iPhone utilizando Tapatalk
Quizas eso era cuando la instalación por si sola te dejaba todo el espacio del disco en /home :xd

Enviado desde mi HUAWEI KII-L23 mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.601
Haha tira logs a otro punto de montaje, y comprime el logrotate.

Con ese maquinón de upgrade puedes incluso montar unas máquinas virtuales con kvm o xen para jugar. Tambien puedes instalar transmission como servicio y bajar "isos" a diestra y siniestra :risas .


Enviado desde mi iPhone utilizando Tapatalk

/var/log y /home siempre los dejo como puntos de montaje, son por lo general los que tienden a quedarse chicos rápido y es fácil agregarles más disco en caso de ser necesario (viva LVM). Además dejé como puntos de montaje las series y películas, Google Drive (donde tengo el respaldo de todas las fotos alguna vez sacadas) y por supuesto la música. En total, esa máquina tiene unos 5TB de discos que le he ido agregando con el tiempo.

Por lo demás, cuando instalé ese server caché la weaita de las memorias (hará unos 9 meses atrás?) así que me dio paja instalarlo como corresponde pq sabía que no iba a durar mucho.

Actualmente el server de la casa (hacía) el ruteo de la red interna de la casa, (tenía) firewalld, nzbget, deluge, couchpotato, sickrage, headphones, plex media server, dns, dhcp, squid proxy, webserver y samba como servicios de los que me acuerdo, pero del domingo empezó a reiniciarse de la nada. Anoche ya era demasiado y la máquina + red interna ya no se podía ocupar por más de 3 minutos, así que lo desarmé y lo jubilé. Hoy voi a pasar a buscar las piezas nuevas.

Saludos.
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.601
transparente o normal?
Y solo para http, es poco lo que se gana hoy en día ya que todos se están moviendo a https, pero no quiero andar weando con certificados en cuanto dispositivo esté en la casa, a los amigos darle la clave a la Wi-Fi y que puedan navegar al toque.


Sent from my iPhone using Tapatalk
 
  • Like
Reactions: hpf
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.402
a estas alturas es mas optimo limitar bw con "tc" o algun traffic shaper , como esta todo por https y usando muchos rangos de ip diferentes (netflix, facebook, youtube, etc ), mejor limitar por un bw tope por ip
 
  • Like
Reactions: hpf
Upvote 0

K3rnelpanic

non serviam
Miembro del Equipo
MOD
Se incorporó
1 Octubre 2007
Mensajes
6.065
a estas alturas es mas optimo limitar bw con "tc" o algun traffic shaper , como esta todo por https y usando muchos rangos de ip diferentes (netflix, facebook, youtube, etc ), mejor limitar por un bw tope por ip
Con shorewall se puede hacer algo :zippy
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.601
Ya instalé el nuevo server, así que para empezar, pequeña corrección a la guía, en sección 4, activando el router:

Código:
# firewall-cmd --query-masquerade --zone=external

debería ser:

Código:
# firewall-cmd --query-masquerade --zone=external --permanent

Y no olvidar un firewall-cmd --reload dp de!

Lo otro: para que todo funcione, tb tuve que hacer lo siguiente:

Código:
[root@server ~]# cat /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
  [ <rule ipv="ipv4" table="filter" chain="FORWARD_direct" priority="0"> -i internet -o intranet -j ACCEPT </rule> ]
</direct>

Obviamente reemplazar "internet" por su interfaz que da a internet e "intranet" por la interfaz que da hacia la intranet.

De todas formas, pequeño tip: yo los nombré así, eso se hace creando un archivo:
Código:
[root@server ~]# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:64:XX:XX:XX", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="p128p1", NAME="internet"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:10:18:XX:XX:XX", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="p131p1", NAME="intranet"

La verdad es que me gusta más colocar el propósito de la nic como nombre, ya que es más rápido para saber cuál tarjeta es en alguna herramienta donde se puede monitorear tráfico (por ejemplo nload o a través de munin).

Finalmente, pequeño detalle: con esto funcionará internet en los equipos de la red interna, pero en mi caso, curiosamente no tenía internet en el server mismo. Me había equivocado con el gateway en /etc/sysconfig/network-scripts/ifcfg-intranet , así que pongan atención a eso. El gateway de esa interfaz tiene que quedar apuntando a la ip de la interfaz internet de ese equipo. Puede ser que con nmcli no tengan este problema, a mi me gusta configurar las interfaces directamente, pero obviamente uno puede cometer este tipo de errores.

Anyway, con la máquina ya andando ahora tengo que configurar todos los servicios, paja paja :p

Saludos.

PD:
Otras cosas que pueden ser útiles:

Al terminar de instalar la máquina, me di cuenta que me faltaba una unidad. Resulta que en el equipo anterior tenía espacio para 5 discos, en el nuevo sólo 4. (Gabinete server vs gabinete normal).

Como tal, me quedé corto de un disco, así que quería probar instalando la máquina no en un disco, pero en un pendrive. El truco para poder hacer esto es en la pantalla de bienvenida del sistema de instalación, customizar el booteo (apretar "e") y ponerle "expert" al final. Con eso se habilita la opción para poder instalar en otros dispositivos que no sean discos internos. Con uno de 16GiB basta, no sé si se podrá hacer en pendrives más chicos, en teoría, uno de 4 creo que ya sería suficiente.

El resultado? Pues es LENTO. Cualquier operación que tenga que ver con escritura es lento y costoso en cuanto a CPU. Lo que terminé haciendo fue crear particiones para /tmp, /var/log y /home (que son las particiones que más escritura y disco necesitan). Swap lo dejé en la misma unidad pq casi nunca se ocupa, aunque esto queda por verse todavía.

Lo otro que me tinca es que la extensión que va de la placa madre al conector usb propiamente tal es USB1.0, con iotop no vi en ningún momento una escritura superior a 1.2MBps, llegando a la casa lo voi a enchufar en los puertos USB que están soldados a la placa para ver si eso acelera un poco el bicho.

Otro dato útil: a mi me gusta mantener activado SELinux, y hasta el momento no me he topado con nada que pueda representar algún problema con SELinux. Eso si, en vez de unbound usé bind (ya tenía toda la conf. del server anterior), y squid lo dejé para dp pq de todas formas no es algo que ocupe así bruto que tanto. Instalando todo desde los repos oficiales no debería dar problema de todas formas.

Saludos.
 
Última modificación:
Upvote 0
Subir