Routage d'un préfixe supplémentaire

Rézine peut router des IPv4 supplémentaires sur les abonnements de type FTTO, Radio et tunnels.  Cela permet par exemple de faire de l'auto-hébergement sans devoir se prendre la tête avec des redirections de ports, ou bien de mettre en place un réseau invité avec une IP séparée.

Demande d'IP supplémentaire

Il faut en faire la demande par courriel à adminsys chez rezine.org, en justifiant l'usage prévu.

Les adminsys répondront en précisant l'IP supplémentaire attribuée, qui sera alors routée vers le routeur abonné.

Configuration abonné OpenWrt

Il est ensuite nécessaire de faire de la configuration côté abonné : sur le routeur qui reçoit la connexion Internet Rézine, ainsi que sur l'éventuelle machine (serveur auto-hébergé) qui utilisera l'IP publique supplémentaire. On suppose ici que le routeur fonctionne avec OpenWrt.

Attention, après cette configuration, le serveur auto-hébergé sera joignable directement depuis Internet, sans pare-feu. Il est donc nécessaire de mettre un pare-feu sur la machine elle-même si cela est nécessaire.

Méthode 1 : routage de l'IP vers une machine du LAN

C'est le cas le plus courant pour un serveur auto-hébergé : l'IP supplémentaire sera routée vers une machine du réseau local (LAN). Cette machine continuera à faire partie du LAN comme avant, mais elle sera également joignable directement depuis Internet sur sa nouvelle IP publique. C'est la configuration la plus simple à mettre en place.

Sur le routeur

Le principe est de rajouter, sur le routeur, une route statique qui pointe vers la machine du LAN. Il faut également autoriser les connexions entrantes dans le pare-feu (firewall) pour que l'IP supplémentaire soit accessible depuis Internet sans filtrage.

On peut configurer le routeur OpenWrt avec l'interface web, cf. captures d'écran :

Ou bien en SSH : ajouter à /etc/config/network la configuration suivante (en adaptant l'IP 193.33.56.XXX) :

config route
    option interface 'lan'
    option target '193.33.56.XXX'
    option gateway '0.0.0.0'

Et dans /etc/config/firewall :

config rule
    option name             Allow-Rezine
    option src              wan
    option dest             lan
    option dest_ip          193.33.56.XXX
    option proto            all
    option family           ipv4
    option target           ACCEPT

Il faut ensuite redémarrer ou bien seulement recharger la configuration :

# /etc/init.d/network restart
# /etc/init.d/firewall reload

Sur la machine qui utilisera l'IP supplémentaire

Sur la machine, il faut simplement ajouter l'IP publique sur son interface réseau. Cette IP vient en plus de l'IP « normale » de la machine sur le LAN, obtenue par DHCP ou configurée statiquement.

Attention : bien penser à configurer un pare-feu (firewall) sur cette machine pour la protéger des connexions entrantes, et mettre un mot de passe solide pour SSH !

Sous Linux, pour ajouter temporairement l'IP publique supplémentaire sur l'interface filaire :

# ip addr add 193.33.56.XXX/32 dev eth0

Consulter la documentation de votre OS pour configurer cette IP supplémentaire de façon permanente. Par exemple sous Debian, c'est dans /etc/network/interfaces, ici pour une interface configurée en DHCP sur le LAN :

iface eth0 inet dhcp
    up   ip addr add 193.33.56.XXX/32 dev $IFACE
    down ip addr del 193.33.56.XXX/32 dev $IFACE || true

Note pour les experts

Cette configuration fonctionne pour les cas les plus courants (service SSH ou web en écoute sur le serveur), mais elle souffre d'une limitation pour des usages avancés comme certains VPN, qui s'attendent à avoir une connectivité bidirectionnelle sur cette IP supplémentaire. En effet, avec cette configuration, les connexions sortantes sont NATées par le routeur, mais pas les connexions entrantes.

Méthode 2 : routage de l'IP sur une interface dédiée (DMZ)

Cette configuration met en place un scénario de type DMZ (zone démilitarisée, en anglais) : la machine qui utilisera l'IPv4 supplémentaire n'est pas sur le LAN, elle est connectée à une interface dédiée sur le routeur. Ainsi, elle ne peut utiliser que son IP publique, et n'a pas accès au reste du LAN.

Sur le routeur

Commencer par isoler un port physique du routeur pour le placer dans la DMZ. La configuration exacte dépend du modèle de routeur et de la version d'OpenWrt. Elle peut être faite via l'interface web ou en SSH.

Voilà un exemple de configuration via SSH, avec le VLAN 1 qui est déjà configuré pour le LAN. On rajoute un nouveau VLAN 5 pour la DMZ, configuré sur le port n°2. Les ports n°3, 4, et 5 restent dans le VLAN 1. La configuration correspondante dans /etc/config/network est la suivante :

config switch_vlan
    option device 'switch0'
    option vlan '5'
    option ports '2 0t'

config switch_vlan
    option device 'switch0'
    option vlan '1'
    option ports '3 4 5 0t'

Il faut ensuite rajouter une interface logique pour la DMZ, rattachée à l'interface eth0.5 (VLAN 5 sur eth0, à adapter selon le routeur). On lui donne une IP « semi-privée » en 100.100.100.100 pour servir de passerelle au serveur DMZ. Puis on route l'IP supplémentaire vers cette DMZ. Ça se passe de nouveau dans /etc/config/network :

config interface 'dmz'
    option proto 'static'
    option ifname 'eth0.5'
    option ipaddr '100.100.100.100'
    option netmask '255.255.255.255'

config route
    option interface 'dmz'
    option target '193.33.56.XXX'
    option gateway '0.0.0.0'

Recharger la configuration réseau :

# /etc/init.d/network reload

Enfin, il faut déclarer une nouvelle zone de pare-feu, et autoriser le trafic entre les différentes zones :

  • WAN vers DMZ : pour l'accès depuis Internet vers la DMZ ;
  • DMZ vers WAN : pour que la machine en DMZ ait accès à Internet en sortie ;
  • LAN vers DMZ : pour que les machines du LAN aient accès au serveur.

En revanche, on n'autorise pas le trafic de la DMZ vers le LAN, pour des raisons de sécurité. Techniquement, c'est bien sûr possible d'autoriser ce trafic de la même façon si désiré.

La configuration du pare-feu se fait dans /etc/config/firewall :

config zone
    option name 'dmz'
    list network 'dmz'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'ACCEPT'

config forwarding
    option src 'wan'
    option dest 'dmz'

config forwarding
    option src 'dmz'
    option dest 'wan'

config forwarding
    option src 'lan'
    option dest 'dmz'

Recharger la configuration avec :

# /etc/init.d/firewall reload

Dernier point optionnel : si le serveur en DMZ est joignable via un nom DNS toto.example.com, on peut rajouter cette entrée DNS en dur dans le routeur. Ainsi, même si on perd la connexion à Internet, le serveur sera toujours joignable avec son nom DNS depuis les machines du LAN.

Rajouter une entrée à /etc/hosts :

193.33.56.XXX toto.example.com

Puis relancer le résolveur DNS :

# /etc/init.d/dnsmasq reload

Sur la machine qui utilisera l'IP supplémentaire

Il faut configurer la machine avec une IP statique et une route par défaut via 100.100.100.100. Attention, certains systèmes ne supportent pas nativement une telle route par défaut.

Sous Debian, la configuration dans /etc/network/interfaces ressemblera à :

auto ensXX
iface ensXX inet static
    address 193.33.56.XXX/32
    up ip route add default via 100.100.100.100 dev $IFACE onlink || true
    down ip route del default via 100.100.100.100 dev $IFACE onlink || true

Configurer également le résolveur DNS dans /etc/resolv.conf :

nameserver 100.100.100.100

Test

Recharger les différentes configurations si ce n'est pas déjà fait :

# /etc/init.d/network reload
# /etc/init.d/firewall reload
# /etc/init.d/dnsmasq reload

Tester que la machine en DMZ a bien accès à Internet.

Pour tester le trafic entrant, il faut se mettre sur un autre réseau et tester par exemple de se connecter en SSH sur l'IP publique supplémentaire.

Méthode 3 : utilisation de l'IP supplémentaire directement sur le routeur

Avec cette configuration, le routeur lui-même aura deux IPv4 publiques : l'IP « normale » fournie avec l'abonnement Rézine, et l'IP supplémentaire Rézine.

L'intérêt est d'utiliser cette seconde IP publique pour un deuxième réseau local (Wi-Fi ou filaire), par exemple :

  • réseau invité ;
  • réseau type « DMZ » séparé du LAN avec sa propre IP publique, tout en gérant les redirections de ports sur le routeur.

Ajouter l'IP supplémentaire sur le WAN

Repérer l'interface wan dans /etc/config/network et ajouter une nouvelle interface avec le même paramètre ifname et l'IP supplémentaire :

config interface 'wan2'
    option ifname    'ethX'
    option proto     'static'
    option ipaddr    '193.33.56.XXX'
    option netmask   '255.255.255.255'

Grâce à cette astuce, on arrive à avoir une seule interface physique (ethX, le port WAN) qui obtient à la fois une IP publique en DHCP et une IP publique configurée statiquement.

Ajouter un nouveau réseau local

Cette partie dépend du besoin (réseau invité, DMZ, ...), donc on appellera ici ce nouveau réseau lan2.

Rajouter la configuration du nouveau réseau :

config interface 'lan2'
    option type      'bridge'
    option proto     'static'
    option ipaddr    '192.168.42.1'
    option netmask   '255.255.255.0'

Il est possible de rajouter une interface filaire à ce réseau avec l'option ifname. Pour les interfaces Wi-Fi, ça se fait plutôt dans /etc/config/wireless, par exemple :

config wifi-iface
    option device      'radio0'
    option network     'lan2'
    option mode        'ap'
    option ssid        'mon_reseau_wifi'
    option encryption  'mixed-psk'
    option key         'mon_mot_de_passe'

En outre, il faut aussi ajouter un service DHCP dans /etc/config/dhcp :

config dhcp 'lan2'
    option interface 'lan2'
    option start '10'
    option limit '200'
    option leasetime '1h'

Configuration du pare-feu

On arrive à la partie la plus importante, le pare-feu.

Il faut d'abord définir une nouvelle zone :

config zone
    option name        lan2
    list   network     lan2
    option input       ACCEPT
    option output      ACCEPT
    option forward     ACCEPT

La règle permettant d'utiliser l'IP supplémentaire en sortie est la suivante :

config redirect
    option dest         wan
    option src_ip       '192.168.42.0/24'
    option src_dip      193.33.56.XXX
    option proto        all
    option family       ipv4
    option target       SNAT

Ici, src_ip est la plage d'adresse du nouveau réseau local, et src_dip est l'IP supplémentaire Rézine.

Test

Tout relancer :

# /etc/init.d/network reload
# /etc/init.d/firewall restart
# /etc/init.d/dnsmasq reload

Normalement les appareils connectés sur le nouveau réseau devraient avoir accès à Internet avec l'IP supplémentaire ! Il est possible de vérifier avec un site comme https://ipof.me/.

Note sur les redirections de ports

Attention, avec cette configuration un peu exotique, toutes les redirections de ports s'appliquent par défaut aux deux IP publiques. Pour préciser sur quelle IP publique on veut appliquer la redirection de ports, il faut renseigner le paramètre src_ip, par exemple :

config redirect
    option name             SSH-monlaptop
    option src              wan
    option src_ip           193.33.56.XXX
    option proto            tcp
    option dest             lan
    option dest_ip          192.168.1.56
    option dest_port        22

config redirect
    option name             SSH-monserveur
    option src              wan
    option src_ip           193.33.56.YYY
    option proto            tcp
    option dest             lan2
    option dest_ip          192.168.42.100
    option dest_port        22