Déclarer un VLAN sur raspberry PI OS/Debian

J’ai eu besoin récemment d’avoir plusieurs subnets sur mes petites boites. Pour ce faire, plutot que de faire du de l’IP multinetting, j’ai isolé chaque subnet sans un VLAN.

voici comment rajouter un VLAN:

  1. Installer le package “vlan”
  2. Créer une interface virtuelle sur l’interface réseau physique pour le VLAN (ici le VLAN 200 sur eth0)
  3. Configurer l’IP sur l’interface virtuelle eth0.200
  4. Démarrer l’interface virtuelle ou rebooter le serveur.
### étape 1
pi@abcd-happy-2:~ $ sudo apt-get install vlan
Reading package lists… Done
...

### étape 2
pi@abcd-happy-2:~ $ sudo vi /etc/network/interfaces.d/vlans

auto eth0.200
iface eth0.200 inet manual
vlan-raw-device eth0

### étape 3
pi@abcd-happy-2:~ $ sudo vi /etc/dhcpcd.conf
interface eth0.200
static ip_address=192.168.1.247/24
static routers=192.168.1.2
static domain_name_servers=208.67.222.222 208.67.220.220

### étape 4
pi@abcd-happy-2:~ $ sudo ifup eth0.200

Discussion sur l’étape 4:
j’ai perdu la main sur le serveur en montant l’interface. Cela dit, j’ai pu accéder à ma nouvelle IP en terminant ma configuration réseau. Depuis mon serveur, j’ai pu accéder à la gateway de mon réseau “par défaut” et après à mon IP “par défaut” depuis mon réseau… bref… je ne sais pas trop pourquoi. Un reboot aurait sans doute eu un effet plus… déterministe.

Configuration passerelle VPN

Introduction

Cet article explique comment monter une passerelle VPN PPTP (très simple à mettre en oeuvre) sur Linux Debian. Il y a pleins d’article sur le sujet sur internet. Pour une raison x ou y, il a fallu que j’en consulte beaucoup pour avoir une solution fonctionnelle de bout en bout.

Une passerelle vous permet de router le traffic de votre périphérique au travers de la passerelle. la passerelle n’est pas un point terminal. elle doit donc être capable de faire suivre (forwarder) le traffic au prochain “saut” (HOP)

Trois éléments sont importants:

  • installation et configuration du serveur de tunnel PPTP
  • configuration du serveur pour l’autoriser a forwardé le traffic entre deux interfaces réseau
  • configuration du firewall

Installation et configuration du serveur PPTP

Installez le package du serveur pptpd depuis un compte utilisateur autorisé ou depuis de compte root.

compteadmin@vps123456:~$ sudo apt-get install pptpd
....
compteadmin@vps123456:~$

Editez le fichier de configuration /etc/pptpd.conf pour ajouter la configuration réseau a appliquer. Ici, on autorise la creation de 10 tunnels. Les IP d’interconnection seront sur le reseau 192.168.5.0/25 dans notre exemple. Attention: le subnet a choisir doit etre différents de celui du reseau du PC et du réseau de la gateway. c’est une interconnection. Donc n’importe quel subnet pourrait etre mis. Cela dit, on préfere utiliser des IP dans les réseaux “brulés” 10.0.0.0/8 ou 192.168.0.0/16. Mais ils sont souvent utilisés par les box ou les réseaux d’entreprise.

compteadmin@vps123456:~$ sudo vi /etc/pptpd.conf
....

localip 192.168.5.5-14
remoteip 192.168.5.235-244

compteadmin@vps123456:~$ 

Editez le fichier de configuration /etc/ppp/pptpd-options pour modifier les options des tunnels

compteadmin@vps123456:~$ sudo vi /etc/ppp/pptpd-options
....
ms-dns 8.8.8.8
ms-dns 8.8.4.4
nobsdcomp
noipx
mtu 1490
mru 1490


compteadmin@vps123456:~$ 

Certaines configurations sur internet indiquent que l’on peut indiquer des valeurs pour mtu et mru. cela dit, en fonction des configurations des réseaux ou est configuré votre client VPN, ces valeurs ne sont pas adéquates.

Les comptes utilisateurs sont créés dans le fichier /etc/ppp/chap-secrets. les droits de ce fichier sont réservés uniquement a root, sinon cela représenterait une faille de sécurité. Il est important de respecter le format: les champs doivent être séparés par un caractère de tabulation ou un/des espaces Voici un exemple de compte:

compteadmin@vps123456:~$ sudo vi chap-secrets
....
# client        server  secret                  IP addresses

nomutilisateur  *       motdepasseutilisateur   *

compteadmin@vps123456:~$ sudo pptpd restart

compteadmin@vps123456:~$

Autoriser le serveur à forwarder les données

Par défaut, un serveur ne se compte pas comme un routeur et les packets ne sont pas forwardable d’une interface vers une autre:

compteadmin@vps123456:~$ sudo cat /proc/sys/net/ipv4/ip_forward
0
compteadmin@vps123456:~$ 

Vous pouvez écrire la valeur 1 dans le fichier up_forward pour activer le routage mais cela ne sera par persistent: au prochain redémarrage du serveur, la valeur sera de nouveau écrasées. Pour cela, nous allons modifier les paramètres du serveur et les appliquer:

compteadmin@vps123456:~$ sudo vi /etc/sysctl.conf
.....
net.ipv4.ip_forward=1
compteadmin@vps123456:~$ sudo sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1
compteadmin@vps123456:~$

Configurer le firewall

Le firewall a un role essentiel: celui de natter le traffic provenant du tunnel avant d’être envoyé vers la route par defaut du serveur. Sans cela, point de salut: il serait impossible de recevoir les packets en réponse.

Voici les commandes necessaires pour la configuration du firewall dans notre exemple de configuration. Le traffic est natté vers l’interface ens3 de mon serveur. Cela pourrait être eth0. Utilisez ifconfig pour récupérer la bonne valeur.

compteadmin@vps123456:~$ sudo iptables -I INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT
compteadmin@vps123456:~$ sudo iptables -I INPUT -p gre -j ACCEPT
compteadmin@vps123456:~$ sudo iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
compteadmin@vps123456:~$ sudo iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 192.168.5.0/24 -j TCPMSS  --clamp-mss-to-pmtu

compteadmin@vps123456:~$ 

La première règle autorise le traffic entrant sur le port 1723 de pptp.

la seconde règle autorise le traffic GRE pour les tunnels.

La troisième règle natte le traffic vers l’inteface réseau ens3

La quatrième règle … mystère.

Pour les rendre persistente, ajoutez les a votre script de configuration du firewall trouvée sur internet et modifiée.

#!/bin/sh

### BEGIN INIT INFO
# Provides:          start and stop iptable
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start and stop iptable with rules
# Description:       start and stop uptables with rules
### END INIT INFO

FW_start() {
echo "[Démarrage du pare-feu]"

# Supprime tous les filtres
iptables -F
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# Ne pas casser les connexions déjà établies
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 2222 -j ACCEPT

# PPTP
iptables -I INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT
iptables -I INPUT -p gre -j ACCEPT
iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 192.168.5.0/24 -j TCPMSS  --clamp-mss-to-pmtu

echo "Filtrages [OK]"

# Attribut une politiques "ACCEPT" aux tables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

echo "Politiques [OK]"
}


FW_stop() {
echo "[Arret du pare-feu]"

# Supprime tous les filtres
iptables -F
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# Attribut une politiques "ACCEPT" aux tables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
}

W_restart() {
FW_stop;
sleep 2;
FW_start;
}


case "$1" in
'start')
FW_start
;;

'stop')
FW_stop
;;

'restart')
FW_restart
;;

'status')
iptables -L
iptables -t nat -L
iptables -t mangle -L
;;

*)
echo "Usage: firewall {start|stop|restart|status}"
;;
esac

Ma configuration de base d’un raspberry pi

Dans cet article, je rapporte mes notes de configuration pour raspberry-pi installé avec Raspbian (ie Debian pour raspberry pi) Jessie lite.

Installation

D’abord, téléchargez l’image sur le site de la fondation raspberry pi en allant dans le menu DOWLOADS puis RASPBIAN puis le bouton Download ZIP de RASPBIAN JESSIE LITE. L’image compressée fait un peu moins de 300Mo.

Une petite remarque en passant: si vous revenez souvent, nous verrez la version de l’image être mise à jour.

Vous pouvez aller lire la release note qui va vous indiquer ce qui change. Et la, oh joie, il y a pour les notes du 25 novembre 2016:

2016-11-25:
  * SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
  * Prompt for password change at boot when SSH enabled with default password unchanged

Chic! Nous allons pouvoir installer Raspbian sans devoir passer par la case connexion d’un clavier, d’un écran HDMI…

Pour installer Raspbian sur une carte SD j’utilise “rufus” depuis Windows. Mon lecteur de carte micro-SD est soit un clef USB ou alors le lecteur de carte SD avec l’adaptateur livré avec la micro SD. D’ailleurs… pas mal de PC portables ont des lecteurs de carte. Ils sont si discrets qu’on passe à coté de leur existence.

une fois que l’image est copiée, créez un fichier s’appelant “ssh” vide et sans extension depuis Windows explorer.

Éjectez proprement le lecteur SD avant de retirer la carte. Puis insérez la carte Micro-SD dans le raspberry-pi et allumez!

pour trouver l’adresse IP du raspberry, j’utilise nmap et je scanne mon sous réseau

C:\Program Files (x86)\Nmap>nmap -sn 192.168.0.0/24

Et je cherche le périphérique dont l’adresse MAC est reconnue comme étant de la Raspberry PI Foundation (OUI  B8-27-EB)

Nmap scan report for 192.168.0.36 
Host is up (0.0010s latency). 
MAC Address: B8:27:EB:A0:B0:DC (Raspberry Pi Foundation)

Configuration initiale

Je me connecte avec putty, login pi, password raspberry.  Raspbian est prévenant et à la connexion vous indique le premier pas: changer le mot de passe.

pi@raspberrypi:~ $ passwd
Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

je procède ensuite à des configuration supplémentaires avec raspi-config:

pi@raspberrypi:/boot $ sudo raspi-config

1 - Expand file system
3 - Boot option > B1 Desktop / CLI > Console
7 - Advanced Options > A2 Hostname

Pour un pur serveur, je configure également:

5 - Enable Camera > disable camera
7 - Advanced Options > A3 Memory Split > 16
7 - Advanced Options > A5 VNC > disable
7 - Advanced Options > A6 SPI > disable
7 - Advanced Options > A7 I2C > disable
7 - Advanced Options > AA 1-Wire > disable
7 - Advanced Options > AB GPIO Server > disable

En quittant raspi-config, je redémarre mon raspberry

Mise à jour du raspberry

Pour mettre à jour raspberry pi, il faut procéder en deux étapes:

  • mise a jour des packets et versions disponible dans le dépot Raspian
  • mise à jour des packets installés
pi@raspberrypi:~ $ sudo apt-get update
...
pi@raspberrypi:~ $ sudo apt-get update
...
real 12m58.480s
user 1m52.860s
sys 0m48.510s

pi@raspberrypi:~ $ sudo shutdown -r now

L’opération aura pris sur un raspberry pi avec une carte SD class 10 sandisk un peu moins de 15 minutes.

Configurer une adresse IP fixe

Editer le fichier /etc/dhcpcd.conf et ajouter à fin du fichier les paramètre comme indiqués dans les lignes suivantes:

pi@raspberrypi:~ sudo vi /etc/dhcpcd.conf

# configuration de l'adresse IP statique
interface eth0
static ip_address=192.168.0.247/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.249 192.168.0.248
# fin de la configuration

l’adresse IP et le masque du réseau sont indiqués sous la forme a.b.c.d/CIDR. Pour les box des fournisseurs Internet, c’est généralement /24 (ie masque 255.255.255.0).

On indique aussi le routeur et un ou deux serveurs de noms ou DNS. Pour rappel, les serveurs de noms de Google bien connus sont 8.8.8.8 et 8.8.4.4

En conclusion

Chacun a ses petites habitudes pour configurer un système après l’installation. C’est une brique de base sur laquelle je construits mes essais et tests.

Et pour aller plus loin… j’aimerai savoir comment toutes ces actions peuvent être automatisée lors du premier démarrage… et hop, un brouillon de plus dans WordPress.