Ok, je veux donc faire un routeur en utilisant Ubuntu Server 18.04 (j'ai déjà le matériel et tout fonctionne, j’ai IPfire actuellement dessus). J'ai examiné toutes les distributions de routeur et elles semblent plutôt limitées.
L'article: https://arstechnica.com/gadgets/2016/04/the-ars-guide-to-building-a-linux-router-from-scratch/
Le guide de pare-feu: https://help.ubuntu.com/lts/serverguide/firewall.html
Ubuntu Server utilise maintenant netplan. J'ai consulté la documentation et il est clair que je ne suis pas très doué pour cette utilisation du système d'exploitation. J'espérais que quelqu'un pourrait peut-être m'aider à "traduire" la façon dont cet article le fait (comme je le connais mieux) dans la mise en œuvre plus moderne.
Comment pourrais-je en faire une version netplan?
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The WAN interface, marked Lan1 on the case
auto p4p1
iface p4p1 inet dhcp
# The LAN interface, marked Lan2 on the case
auto p1p1
iface p1p1 inet static
address 192.168.99.1
netmask 255.255.255.0
De plus, je préférerais utiliser UFW plutôt que directement avec iptables, car la plupart des règles dans UFW sont également celles énoncées dans la plupart des articles. Une différence clé de l'article est qu'il a ceci pour la section NAT.
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# p4p1 is WAN interface, #p1p1 is LAN interface
-A POSTROUTING -o p4p1 -j MASQUERADE
COMMIT
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# don’t delete the ‘COMMIT’ line or these nat table rules won’t be processed
COMMIT
Mais, après avoir compris ces deux sections. Je devrais être capable de gérer le reste. Toute aide est la bienvenue!
Selon mes commentaires - je ne voudrais pas utiliser netplan
ici. C'est parfait jusqu'à ce que vous essayiez de créer un pont et que je ne puisse pas le faire fonctionner de manière fiable. L'OMI n'est pas prêt. À partir de 18.04, il est judicieux de revenir au système classique ifup
.
Je n'utilise pas ufw
dans ma propre version mais cela ne peut pas être si difficile de les traduire (derniers mots célèbres).
firewalld
utilise des commandes remarquablement similaires pour celles-ci et elles doivent être traduites directement en UFW. Les commandes sont littéralement des commandes "classiques" de pare-feu. Ils ne sont pas testés sur ufw
et peuvent nécessiter un réglage de la part de quelqu'un qui utilise ufw
.
Je n'aime pas vraiment comment les notes ufw
donnent une plage d'adresses IP sur une interface (même si vous y êtes forcé), mais cela devrait se traduire par quelque chose comme ça. enp1s0
est mon interface 'externe', et br0 est essentiellement toutes mes autres interfaces pontées
Pour référence, ma configuration firewalld
ressemble à ceci:
Sudo firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o enp1s0 -j MASQUERADE
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o enp1s0 -j ACCEPT
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Sudo firewall-cmd --runtime-to-permanent
La seconde dernière commande est critique
Et cela devrait se traduire par quelque chose comme ça.
#masquerade traffic coming out from enp1s0
-A POSTROUTING 0 -o enp1s0 -j MASQUERADE
# Forward and accept any traffic from br0 to enp1s0
-A FORWARD 0 -i br0 -o enp1s0 -j ACCEPT
#accept traffic on existing connections
-A FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
La configuration par défaut de netplan
, comme je me souviens bien, donne all les adresses IP automatiques en sortie.
Cela posera éventuellement un problème lorsque vous exécuterez un serveur DHCP. Vous voulez une adresse IP statique sur cette interface.
Si vous devez , une configuration minimale de netplan ressemble à ceci - je pense que cela a fonctionné avant que j'essaye de rapprocher les choses.
Je ne suis pas tout à fait sûr de savoir pourquoi dhcp est activé sur enp2s0 - vous pourrez peut-être supprimer cette strophe. Facultatif est utile car il est possible que quelque chose ne soit pas toujours branché sur le port.
network:
ethernets:
enp1s0:
addresses: []
dhcp4: true
enp2s0:
addresses:
- 192.168.2.1/24
dhcp4: true
optional: true
version: 2
Le crédit intégral va à: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server- 18-04-1-lts-bionic-beaver /
Je supposerai pour le suivant que vous venez d’installer Ubuntu 18.04 et que vous n’avez encore rien fait.
Sudo ufw enable
Premièrement, nous devons configurer les interfaces réseau que nous utiliserons. WAN (enp0s7) - cette interface obtiendra une adresse IP du FAI, nous la laissons donc en utilisant DHCP.
LAN (enp3s0f0) - nous configurons l'interface avec une adresse IP statique dans le sous-réseau que nous allons utiliser pour le réseau local
Juste une petite remarque, Ubuntu 18.04 n’utilise pas le fichier de configuration réseau traditionnel/etc/network/interfaces. Il utilise NETPLAN. Dans mon cas, il existe un fichier de configuration appelé 50-cloud-init.yaml dans le dossier/etc/netplan /. Dans votre cas, le fichier peut avoir un nom différent, il suffit de chercher le fichier avec l'extension .yaml dans le dossier netplan.
Ouvrons-le avec nano:
Sudo nano /etc/netplan/50-cloud-init.yaml
Modifiez-le en fonction de vos besoins réseau. Dans mon exemple, j'ai configuré comme suit:
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp0s7:
dhcp4: true
enp3s0f0:
addresses:
- 192.168.1.1/24
dhcp4: false
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
version: 2
En résumé, enp0s7, qui est le réseau WAN, obtient l’IP du modem du fournisseur Internet. enp3s0f0 est une partie LAN du routeur. Nous en avons besoin pour avoir une IP statique et des serveurs DNS (dans mon exemple, j’utilisais Google). Nous n’avons pas non plus configuré de passerelle sur enp3s0f0.
Enregistrez la configuration avec les commandes suivantes:
Sudo netplan generate
Sudo netplan apply
Ensuite, nous voulons configurer un serveur DHCP. Nous ne souhaitons vraiment pas configurer chaque client avec une adresse IP statique dans le réseau LAN. Pour cette tâche, nous devons installer le package suivant.
Sudo apt-get install isc-dhcp-server
Ensuite, nous devons éditer le fichier /etc/default/dhcpd.conf. Cela indique au serveur DHCP quelle interface réseau il doit écouter. Dans mon cas, bien sûr, enp3s0f0, l'interface LAN.
Nous entrons dans la commande:
Sudo nano /etc/default/isc-dhcp-server
Et éditez en conséquence, dans mon cas c'est:
INTERFACES="enp3s0f0"
La prochaine étape serait la configuration du serveur DHCP. Ceci est fait en éditant le fichier /etc/dhcp/dhcpd.conf
Sudo nano /etc/dhcp/dhcpd.conf
Voici un tas de paramètres différents, la plupart d'entre eux sont commentés avec # avant chaque ligne. Pour le raccourcir, je n'écrirai que les paramètres que j'ai utilisés et/ou les modifierai en fonction de mes besoins. Si vous le souhaitez, vous pouvez supprimer tout le contenu de ce fichier et simplement copier/coller le code ci-dessous. Bien sûr, vous modifiez les adresses IP, GATEWAYS, etc. en fonction de votre propre configuration de réseau.
option domain-name "whatever.you.want";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.101 192.168.1.200;
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
}
Maintenant, appliquons les paramètres et activons le serveur DHCP au démarrage avec les commandes suivantes:
Sudo systemctl restart isc-dhcp-server
Sudo systemctl enable isc-dhcp-server
Avec la commande suivante, nous vérifions le statut.
Sudo systemctl status isc-dhcp-server
Si tout est correctement configuré, il doit y avoir une ligne disant "ACTIVE". Sinon, vous avez gaché quelque chose dans le fichier /etc/dhcp/dhcpd.conf. Il manque peut-être un point-virgule ou un support.
Pour avoir un routeur fonctionnel, nous devons configurer le pare-feu correctement. Ceci est fait en écrivant quelques règles iptables. Afin de préserver les règles si le serveur est redémarré, j'ai créé un script à exécuter au moment du démarrage.
Dans Ubuntu 18.04, le fichier /etc/rc.local n’existe plus. Mais on peut toujours le créer avec:
Sudo nano /etc/rc.local
Ensuite, copiez/collez le script suivant. Il y a des commentaires expliquant chaque règle iptables. Vous pouvez les supprimer si vous le souhaitez, mais vous ne devez PAS supprimer #!/Bin/bash. Changez également enp0s7 et enp3s0f0 si vos interfaces réseau ont des noms différents.
#!/bin/bash
# /etc/rc.local
# Default policy to drop all incoming packets.
iptables -P INPUT DROP
iptables -P FORWARD DROP
# Accept incoming packets from localhost and the LAN interface.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i enp3s0f0 -j ACCEPT
# Accept incoming packets from the WAN if the router initiated the
# connection.
iptables -A INPUT -i enp0s7 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
# Forward LAN packets to the WAN.
iptables -A FORWARD -i enp3s0f0 -o enp0s7 -j ACCEPT
# Forward WAN packets to the LAN if the LAN initiated the connection.
iptables -A FORWARD -i enp0s7 -o enp3s0f0 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
# NAT traffic going out the WAN interface.
iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE
# rc.local needs to exit with 0
exit 0
Ce script doit être exécuté au démarrage, nous devons donc rendre le fichier exécutable avec la commande suivante:
Sudo chmod 755 /etc/rc.local
Les paramètres par défaut du pare-feu UFW gâchent notre configuration et, pour que notre routeur fonctionne correctement (pour transférer les paquets de WAN à un réseau local), vous devez activer le paramètre suivant dans/etc/ufw/sysctl. fichier .conf. Nous lançons la commande:
Sudo nano /etc/ufw/sysctl.conf
Maintenant, nous supprimons simplement # devant la ligne suivante:
net/ipv4/ip_forward=1
Nous y voilà! Nous avons un routeur qui fonctionne, il suffit de faire une commande de redémarrage Sudo pour redémarrer le serveur.