web-dev-qa-db-fra.com

Comment configurer un serveur Ubuntu comme routeur pour deux réseaux privés sur mon réseau et effectuer l'adressage DHCP?

Je souhaite utiliser mon serveur Ubuntu comme routeur pour deux réseaux privés sur mon réseau.

Je veux aussi que ce serveur serve les requêtes DHCP pour les réseaux privés.

Comment configurer un serveur Ubuntu 16.04 pour faire cela?

6
Thomas Ward

REMARQUE n ° 1: Il s'agit de la configuration la plus élémentaire possible: un routeur direct pour deux sous-réseaux ou plus, sans aucune restriction du trafic entre sous-réseaux. Cela peut être modifié avec des règles de pare-feu pour mieux gérer le contrôle de fonctions individuelles ou l'accès réseau à travers des sous-réseaux ou via Internet, mais cela sort du cadre de cette paire Q/A de base "configurez-la".

NOTE 2: Au moment où cette réponse a été écrite, Ubuntu n'utilisait pas encore Netplan pour son système de contrôle de réseau pour les configurations par défaut. Cette réponse était en tant que telle écrite sans prendre en compte Netplan.

Vous aurez besoin d'un serveur Ubuntu avec 3 interfaces réseau, bien sûr, une pour l'interface connectée à Internet et deux interfaces réseau privées.

Ensuite, suivez ce guide pour configurer ce serveur en tant que routeur:

(1) Éditez /etc/sysctl.conf. Trouvez et décommentez cette ligne:

net.ipv4.ip_forward=1

Ceci fait, exécutez la commande Sudo sysctl -p pour recharger les paramètres du noyau du système. Cela permet désormais à la machine Ubuntu de desservir le trafic sur les sous-réseaux et les VLAN via IPv4.

(2) Modifiez le /etc/network/interfaces de votre routeur afin de configurer l’adresse IP statique sur les interfaces desservant les réseaux privés. Dans cet exemple, je sais que les interfaces sont ens37 et ens38, alors que ens33 est l’interface principale connectée à Internet de ma boîte. Je laisse ens33 seul, mais j'ajoute des strophes de configuration ens37 et ens38:

# Private Subnet 1
auto ens37
iface ens37 inet static
    address 10.76.100.1
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8 8.8.4.4

# Private Subnet 2
auto ens38
iface ens38 inet static
    address 10.76.101.1
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8 8.8.4.4

Ajustez les adresses réseau et les noms d’interface en fonction de votre configuration.

** Notez que si vous utilisez VMware Workstation ou similaire et que vous avez sélectionné vmnet# périphériques dans la VM, assurez-vous que le système hôte NE dispose PAS d'un périphérique connecté à l'hôte pour ce vmnet, ou Si tel est le cas, vous utilisez une adresse différente de .1 dans le dernier octet de votre routeur.

(3) Installez le logiciel du serveur DHCP. Nous allons configurer cela dans les étapes ultérieures.

Sudo apt-get install isc-dhcp-server

Cela permettra au routeur de servir les demandes DHCP de vos sous-réseaux privés.

(4) Copiez d'abord la configuration du serveur DHCP installée automatiquement dans un fichier de sauvegarde.

Sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.dist

(5) Maintenant, nous mettons ce fichier original à blanc afin que nous puissions appliquer notre configuration.

echo "" | Sudo tee /etc/dhcp/dhcpd.conf

(6) Maintenant, utilisons notre configuration:

# DHCP Server config

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# Specify the domain name servers to specify for each subnet.
option domain-name-servers 8.8.8.8;
option domain-name-servers 8.8.4.4;


# DHCP Subnet configurations

# Subnet 1 - ens37
subnet 10.76.100.0 netmask 255.255.255.0 {
  default-lease-time 86400;
  max-lease-time 86400;

  range 10.76.100.10 10.76.100.200;
  option routers 10.76.100.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.76.100.255;
}

# Subnet 2 - ens38
subnet 10.76.101.0 netmask 255.255.255.0 {
  default-lease-time 86400;
  max-lease-time 86400;

  range 10.76.101.10 10.76.101.200;
  option routers 10.76.101.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.76.101.255;
}

Ajustez cette configuration en fonction de vos besoins et veillez à mettre à jour l'option "routeurs" en fonction de l'adresse IP que vous avez définie ci-dessus dans les paramètres de configuration de votre réseau.

Une fois que vous avez fini d’ajuster le fichier selon vos besoins, enregistrez-le.

(7) Nous devons indiquer au système les interfaces à prendre en compte. Éditez /etc/default/isc-dhcp-server et spécifiez vos interfaces réseau privées (dans mon cas, ens37 et 38) dans la ligne INTERFACES="", de sorte à ressembler à ceci:

INTERFACES="ens37 ens38"

Enregistrez le fichier.

(8) Et maintenant, les règles du pare-feu. Nous devons dire au système de permettre à la chose de fonctionner en tant que routeur et configurer les contrôles et règles appropriés pour que cela soit le cas. Je suppose que vous n'avez pas configuré le pare-feu ici, car je décris une configuration à partir de zéro.

Si vous avez déjà configuré ufw sur cette machine, exécutez Sudo ufw disable, puis désinstallez ufw avec Sudo apt-get remove ufw. UFW ne fonctionne pas pour ce dont nous avons besoin, nous avons besoin directement du pouvoir avancé de iptables. Pour la plupart des routeurs, nous devrions pas utiliser UFW du tout .

Assurez-vous que nous connaissons le nom de l'interface pour votre interface réseau connectée à Internet. Sur mon exemple de système de test, il s'agissait de ens33, mais cela peut être différent sur votre système. Assurez-vous de connaître également les interfaces réseau de nos réseaux privés pour lesquels nous allons être le routeur. nous avons besoin d'eux aussi. Configurez votre iptables comme suit avec les commandes suivantes. Faites attention à mes commentaires aussi:

# Accept localhost traffic (local traffic to the system itself)
Sudo iptables -A INPUT -i lo -j ACCEPT

# Accept all traffic related to established connections
Sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Drop traffic coming from the Internet into our Internet-connected interface (except for traffic related to other established connections)
# Update this to match the interface name of your Internet-connected interface.
Sudo iptables -A INPUT -i ens33 -j DROP

# Accept traffic inbound from the local subnets we are acting as a router for.
# CHANGE THESE INTERFACE NAMES ACCORDING TO YOUR SETUP!
Sudo iptables -A INPUT -i ens37 -j ACCEPT
Sudo iptables -A INPUT -i ens38 -j ACCEPT

# Since we don't want to have our system completely open to the Internet, we need
# to drop all other traffic coming to our network.  This way, we can prevent the
# Internet at large from accessing our network directly from the Internet.
Sudo iptables -A INPUT -j DROP

# Add rules to accept forwarding on the interfaces we are doing routing for.
# CHANGE THESE INTERFACE NAMES ACCORDING TO YOUR SETUP!
Sudo iptables -A FORWARD -i ens37 -j ACCEPT
Sudo iptables -A FORWARD -o ens37 -j ACCEPT
Sudo iptables -A FORWARD -i ens38 -j ACCEPT
Sudo iptables -A FORWARD -o ens38 -j ACCEPT

# Add rules to the NAT table to allow us to actually let traffic on the interfaces
# which we are doing routing for go out to the Internet masquerade as our Internet-
# connected interface.
#
# ADJUST THE IP RANGES HERE TO MATCH THE IP RANGES AND THE SUBNETS FOR YOUR OWN
# ENVIRONMENT!  Remember that the IP address of 10.76.100.1 for the router, and
# the netmask 255.255.255.0 is equal to the network range/CIDR of 10.76.100.0/24
# for the purposes of these rules.
Sudo iptables -t nat -A POSTROUTING -s 10.76.100.0/24 ! -d 10.76.100.0/24 -j MASQUERADE
Sudo iptables -t nat -A POSTROUTING -s 10.76.101.0/24 ! -d 10.76.101.0/24 -j MASQUERADE

(9) Installez le paquetage iptables-persistent qui nous permettra de réellement nous rappeler de nos règles iptables et de les charger au redémarrage.

Sudo apt-get install iptables-persistent`

Lorsqu'il vous demande de sauvegarder les règles existantes, sélectionnez "Oui" pour IPv4 et IPv6.

(10) Testez-le! Configurez un autre système sur l’un des réseaux privés que vous avez configurés et assurez-vous qu’une fois configuré, il peut communiquer avec Internet et dispose d’une adresse DHCP configurée dans les sous-réseaux privés configurés ci-dessus!

5
Thomas Ward