Compilar Kernel Linux

10 May, 2016

Comments

En esta entrada tratare el tema de la compilación del kernel linux en un OS Debian Jessie, donde intentare explicarlo de una forma fácil, simple y rápida. Espero que os sirva como una introducción.

En primer lugar necesitaremos una serie de paquetes para poder compilar nuestro kernel: apt-get install build-essential make ncurses-dev libqt4-dev pkg-config

Podremos ver la información del kernel con: uname -r

Descargamos el codigo fuente del kernel Linux: apt-get install linux-source

El resultado es el fichero /usr/src/linux-source-3.16.tar.xz

Creamos la siguiente carpeta carpeta: mkdir ~/linux cd ~/linux

Descomprimimos el fichero anterior: tar xJf /usr/src/linux-source-3.16.tar.xz

Utilizar el fichero de configuración del núcleo actual como punto de partida. Para ello: cp /boot/config-`uname -r` ~/linux/linux-source-3.16/.config cd linux-source-3.16

Dejamos el kernel con los módulos esenciales de nuestra maquina: make localmodconfig

Especificamos la versión de la compilación que queramos realizar: nano Makefile

Con cada compilacion cambiamos la version:

EXTRAVERSION =-n0001
---
EXTRAVERSION =-n0002

También podremos configurarlo y personalizarlo con: make xconfig

Compilar con: ([-j numero_de_hilos], para forzar los cores) make -j 8 deb-pkg

Instalamos el kernel compilado con: dpkg -i linux-image-3.16.7-new0001_3.16.7-new0001-1_amd64.deb

Actualizamos grup para añadir nuestro kernel personalizado: update-grub

Para limpiar y recompilar: Simple: make clean

Profundo: make mrproper

Eliminar kernel instalado: dpkg -r linux-image-3.16.7-new0001

Intentare añadir nuevas instrucciones interesantes en la entrada a lo largo del tiempo.

Un saludo!

Conexión VPN cliente a red con OpenVPN y certificados x509

5 May, 2016

Comments

En esta entrada explicare como realizar una configuración cliente VPN a red privada (VPN host to net) con un túnel VPN con certificados x509.

En primer lugar instalamos openvpn y openssl para el certificado:

apt-get install openvpn openssl

Bajamos los script de ejemplo o lo instalamos desde repositorios: Opción 1:

apt-get install easy-rsa

Opción 2:

git clone https://github.com/OpenVPN/easy-rsa.git -b 'release/2.x'

Copiamos los script de ejemplo:

cd /etc/openvpn/
mkdir easy-rsa
cp -r /root/easy-rsa/easy-rsa/2.0/* easy-rsa

Dentro de /etc/openvpn/easy-rsa/vars podremos configurar algunas variables de entorno que cargaremos posteriormente, vamos a modificar:

export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="ES"
export KEY_PROVINCE="Sevilla"
export KEY_CITY="Dos Hermanas"
export KEY_ORG="IESGN"
export KEY_EMAIL="juanmanuel.torres@aventurabinaria.es"
export KEY_OU="Informatica"

export KEY_NAME="vpn_key"
# PKCS11 Smart Card
export PKCS11_MODULE_PATH="/usr/lib/changeme.so"
export PKCS11_PIN=1234
export KEY_CN="ServidorVPN"

Cargamos las variables de entorno anteriores:

root@servidorvpn:/etc/openvpn/easy-rsa# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

Creación del certificado:

Borramos las claves anteriores:

root@servidorvpn:/etc/openvpn/easy-rsa# ./clean-all

Creamos dh:

root@servidorvpn:/etc/openvpn/easy-rsa# ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
.............
root@servidorvpn:/etc/openvpn/easy-rsa# ./build-ca
Generating a 2048 bit RSA private key
.............
Country Name (2 letter code) [ES]:
State or Province Name (full name) [Sevilla]:
Locality Name (eg, city) [Dos Hermanas]:
Organization Name (eg, company) [IESGN]:
Organizational Unit Name (eg, section) [Informatica]:
Common Name (eg, your name or your server's hostname) [ServidorVPN]:
Name [vpn_key]:
Email Address [juanmanuel.torres@aventurabinaria.es]:

Creación del certificado para el servidor:

root@servidorvpn:/etc/openvpn/easy-rsa# ./build-key-server ServidorVPN
Generating a 2048 bit RSA private key
........+++
.............................................+++
writing new private key to 'ServidorVPN.key'
----
Country Name (2 letter code) [ES]:
State or Province Name (full name) [Sevilla]:
Locality Name (eg, city) [Dos Hermanas]:
Organization Name (eg, company) [IESGN]:
Organizational Unit Name (eg, section) [Informatica]:
Common Name (eg, your name or your server's hostname) [ServidorVPN]:
Name [vpn_key]:
Email Address [juanmanuel.torres@aventurabinaria.es]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:tu_contraseña
An optional company name []:

Creamos el certificado para el cliente:

root@servidorvpn:/etc/openvpn/easy-rsa# ./build-key cliente-vpn
Generating a 2048 bit RSA private key
...............+++
...................................................+++
writing new private key to 'cliente-vpn.key'
-----
Country Name (2 letter code) [ES]:
State or Province Name (full name) [Sevilla]:
Locality Name (eg, city) [Dos Hermanas]:
Organization Name (eg, company) [IESGN]:
Organizational Unit Name (eg, section) [Informatica]:
Common Name (eg, your name or your server's hostname) [cliente-vpn]:
Name [vpn_key]:
Email Address [juanmanuel.torres@aventurabinaria.es]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Las claves se encuentran en la carpeta: /etc/openvpn/easy-rsa/keys/

Configuración del servidor VPN:

Copiamos el paquete de ejemplo de configuración del servidor:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

Configuración del servidor:

nano server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/ServidorVPN.crt
key /etc/openvpn/easy-rsa/keys/ServidorVPN.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 10.88.88.0 255.255.255.0
push "route 10.99.99.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 4

Activamos el encaminamiento:

nano /etc/sysctl.conf
net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward

Reiniciamos el servicio:

service openvpn restart
service openvpn status

Configuración del cliente en el servidor:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

Modificamos:

nano /etc/openvpn/easy-rsa/keys/client.ovpn
remote 10.0.0.33 1194

Tranferimos los certificados al cliente,en mi caso para realizar la prueba lo pasare a otra maquina por scp:

scp /etc/openvpn/easy-rsa/keys/cliente-vpn.key debian@172.33.23.92:/home/debian/openvpn
scp /etc/openvpn/easy-rsa/keys/cliente-vpn.crt debian@172.33.23.92:/home/debian/openvpn
scp /etc/openvpn/easy-rsa/keys/ca.crt debian@172.33.23.92:/home/debian/openvpn
scp /etc/openvpn/easy-rsa/keys/client.ovpn debian@172.33.23.92:/home/debian/openvpn

Configuración del cliente:

Movemos los certificados y la configuración:

sudo mv /home/debian/openvpn/* /etc/openvpn/
sudo mv client.ovpn client.conf

Editamos la configuración del cliente:

nano /etc/openvpn/client.conf
client
dev tun
proto udp
remote 10.0.0.33 1194
keepalive 10 120
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/cliente-vpn.crt
key /etc/openvpn/cliente-vpn.key
#ns-cert-type server
comp-lzo
verb 4
log /var/log/openvpn.log

Quitamos el arranque automatico de OpenVPN:

update-rc.d -f openvpn remove

Reiniciamos el servicio:

service openvpn restart

Comprobamos el funcionamiento del tunel:

root@servidorvpn:/etc/openvpn# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.99.99.1 P-t-P:10.99.99.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:672 (672.0 B) TX bytes:0 (0.0 B)

root@clientevpn:/etc/openvpn# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.99.99.6 P-t-P:10.99.99.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:504 (504.0 B)

Añadimos una regla nat al servidor VPN:

iptables -A POSTROUTING -t nat -s 10.88.88.0/24 -o eth0 -j MASQUERADE

Nos conectamos a la maquina de la red interna:

ssh debian@10.99.99.3

Con esto ya tendríamos funcionando nuestra conexión host to network con OpenVPN.

Escalado HDMI con xrandr

5 May, 2016

Comments

En esta entrada ofrezco una solución para los que tenemos pantallas de televisión como monitores conectados por HDMI, en principio según con que resolución la configuremos podremos tener el problema de que la imagen se muestra con demasiado zoom. Para solucionar esto haremos un escalado con xrandr.

En primer lugar con xrandr vemos las salidas de vídeo de nuestra gráfica en mi caso tengo una ATI Radeon R9 270X de Gigabite y este es el resultado.

~$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 478mm x 268mm
   1366x768      59.79 +
   1920x1080     60.00    50.00    59.94* 
   1920x1080i    60.00    50.00    59.94  
   1280x1024     60.02  
   1280x720      60.00    50.00    59.94  
   1440x576i     50.00  
   1024x768      60.00  
   1440x480i     60.00    59.94  
   800x600       60.32  
   720x576       50.00  
   720x480       60.00    64.37    59.94  
   640x480       60.00    59.94    59.94  
   720x400       70.08  
DVI-0 disconnected (normal left inverted right x axis y axis)
DVI-1 disconnected (normal left inverted right x axis y axis)

El driver que utilizo actualmente es el controlador libre de Debian. AtiHowTo

En segundo lugar habilitamos underscan en nuestra salida HDMI-0

xrandr --output HDMI-0 --set underscan on

Por ultimo configuramos el borde horizontal hborder y el vertical vborder

xrandr --output HDMI-0 --set "underscan hborder" 41 --set "underscan vborder" 25

Por ultimo para guardar los cambios podemos añadir los comandos al Init de Gnome /etc/gdm3/Init/Default justo debajo de

PATH="/usr/bin:$PATH"
OLD_IFS=$IFS

Quedando así

PATH="/usr/bin:$PATH"
OLD_IFS=$IFS

xrandr --output HDMI-0 --set underscan on
xrandr --output HDMI-0 --set "underscan hborder" 41 --set "underscan vborder" 25

Con esto ya tendremos configurado el escalado HDMI.