Demande #4599
ferméminetest.chapril.org - Demande #3741: Configurer le routage de la VM
Ouverture de ports pour ludo
Ajouté par François Poulain il y a plus de 4 ans. Mis à jour il y a environ 4 ans.
0%
Description
cpm_screen PoluX: yop, hurdman travaille sur le Chapril PoluX: y-aurait des ports à rediriger vers la vm ludo hurdman o/ PoluX plop cpm_screen PoluX: je te laisse voir avec lui et si tu pouvais le faire, comme je sais que tu maîtrises :D <333 PoluX je suis de passage :) yep dites moi quels ports :) hurdman si possible 30000 à 30010 udp cpm_screen PoluX: merciiiiiiiiiiiiii :D hurdman je n'utiliserai que 30 000 au départ, mais en prévision
Mis à jour par François Poulain il y a plus de 4 ans
Sur maine¶
Alors la VM ludo résoud ainsi :
=(^-^)=root@maine:~# host ludo ludo.cluster.chapril.org has address 192.168.1.21 ludo.cluster.chapril.org has IPv6 address 2a01:4f8:10b:c41::21
Routage et DNAT¶
On ajoute sur maine la ligne suivante pour configurer le DNAT et le routage:
diff --git a/firehol/firehol.conf b/firehol/firehol.conf index e6a8344..72b66be 100644 --- a/firehol/firehol.conf +++ b/firehol/firehol.conf @@ -25,6 +25,7 @@ declare -A dispatching=( ["xmpp1"]='( "5222" "tcp" "192.168.1.52" "2a01:4f8:10b:c41::52" "2a01:4f8:10b:c42::52")' ["xmpp2"]='( "5223" "tcp" "192.168.1.52" "2a01:4f8:10b:c41::52" "2a01:4f8:10b:c42::52")' ["xmpp3"]='( "5269" "tcp" "192.168.1.52" "2a01:4f8:10b:c41::52" "2a01:4f8:10b:c42::52")' +["minetest"]='( "30000-30010" " udp" "192.168.1.21" "2a01:4f8:10b:c41::21" "2a01:4f8:10b:c42::21")' ["mumble"]='( "64738" "tcp udp" "192.168.1.64" "2a01:4f8:10b:c41::64" "2a01:4f8:10b:c42::64")' ["turn"]='( "3478" "tcp udp" "192.168.1.64" "2a01:4f8:10b:c41::64" "2a01:4f8:10b:c42::64")' ["jitsi"]='( "10000" "udp" "192.168.1.64" "2a01:4f8:10b:c41::64" "2a01:4f8:10b:c42::64")'
- minetest : nom du protocole, voir plus bas
- 30000-30010: ports de destination
- udp: protocole
- 192.168.1.21: ipv4 pour le dnat
- 2a01:4f8:10b:c41::64 2a01:4f8:10b:c42::64: ipv6 pour le routage
Définition du protocole¶
« minetest » doit faire référence à quelque chose de connu par firehol. Soit c'est livré avec (cf https://firehol.org/services/) soit c'est à définir. Ici on défini dans le fichier /etc/firehol/services/minetest.conf :
#FHVER: 1:213 # La premiere ligne ci dessus est nécessaire !! server_minetest_ports="udp/30000:30010" client_minetest_ports="default"
Le nom du fichier importe peu mais la présence de « minetest » dans le contenu importe fortement.
Cf https://firehol.org/guides/adding-services/
Test et chargement des regles¶
firehol try
En cas de succès il va progressivement charger les regles, vous demander une interaction, vous demander la validation. Ça évite des situations de perte de contrôle.
=(^-^)=root@maine:/etc/firehol# firehol try FireHOL: Saving active firewall to a temporary file... OK FireHOL: Processing file '/etc/firehol/firehol.conf'... OK (4792 iptables rules) Your firewall is ready to be fast-activated... If you don't continue, no changes will have been made to your firewall. Activate the firewall? (just press enter to confirm or Control-C to stop) : FireHOL: Fast activating new firewall... OK Keep the firewall? (type 'commit' to accept - 30 seconds timeout) : commit Successfull activation of FireHOL firewall. FireHOL: Saving activated firewall to '/var/spool/firehol'... OK
En cas d'échec ça se passe differemment. Exemple :
=(^-^)=root@maine:/etc/firehol# firehol try FireHOL: Saving active firewall to a temporary file... OK FireHOL: Processing file '/etc/firehol/firehol.conf'... /usr/sbin/firehol: line 9705: rules_minetest: command not found -------------------------------------------------------------------------------- ERROR : # 1 WHEN : Complex rules for rules_minetest() for server 'minetest' WHY : There is no service 'minetest' defined. COMMAND: server minetest accept MODE : ipv4 SOURCE : 183@/etc/firehol/firehol.conf: server: /usr/sbin/firehol: line 9705: rules_minetest: command not found -------------------------------------------------------------------------------- ERROR : # 2 WHEN : Complex rules for rules_minetest() for server 'minetest' WHY : There is no service 'minetest' defined. COMMAND: server minetest accept MODE : ipv6 SOURCE : 199@/etc/firehol/firehol.conf: server: FAILED NOTICE: No changes made to your firewall. FireHOL: Restoring old firewall... OK Message from syslogd@maine at Jul 14 10:37:18 ... FireHOL[7129]: FAILED to activate the firewall from /etc/firehol/firehol.conf. Last good firewall restoration: OK.
Sur coon¶
On veillera à dupliquer la configuration précédente sur coon
Sur la VM (reste à faire)¶
Après avoir installé la VM et suivi https://admin.chapril.org/doku.php?id=admin:procedures:configuration-firewall-guest vous allez avoir un firewall local quasiment tout fermé.
Pour l'ouvrir il va falloir :
- reprendre le fichier de définition de service
- déclarer le service ouvert, par exemple avec la conf suivante dans /etc/firehol/firehol-ext2me.conf
# Services acceptés server minetest accept
Mis à jour par Christian P. Momon il y a plus de 4 ans
- Statut changé de Nouveau à En cours de traitement
- Assigné à mis à François Poulain
- Tâche parente mis à #3741
Mis à jour par François Poulain il y a plus de 4 ans
- Assigné à changé de François Poulain à Yves-Gaël Chény
- % réalisé changé de 0 à 100
Mis à jour par Christian P. Momon il y a plus de 4 ans
- Assigné à changé de Yves-Gaël Chény à François Poulain
- % réalisé changé de 100 à 0
Hurdman ne gère pas encore les tickets d'infra. Et il y a déjà un ticket pour le routage de la vm : #3741.
Donc si ticket ok alors le passer à résolu :D
Question subsidiaire :
["minetest"]='( "30000" " udp" "192.168.1.21" "2a01:4f8:10b:c41::21" "2a01:4f8:10b:c42::21")'
Confirmes-tu qu'il faut rajouter une ligne pour chaque port de 30001 à 30010 ?
Mis à jour par François Poulain il y a plus de 4 ans
Confirmes-tu qu'il faut rajouter une ligne pour chaque port de 30001 à 30010 ?
Bonne question. :) J'avais pensé que non, mais en regardant le code iptable engendré je dubite. Peut être il faut 30000:30010 à la place de 30000. Il faudrait mettre en place une façon de tester (pour tcp je sais faire, pour udp je ne sais pas).
Mis à jour par François Poulain il y a plus de 4 ans
Bon ça s'apprend.
Sur ludo :
# netcat -lup 30000
Sur ma machine:
netcat -u fip.chapril.org 30000
Ensuite ce que je tape apparait coté ludo. \o/
Par contre ça pas marche en 30001. Je corrige le fw.
Mis à jour par François Poulain il y a plus de 4 ans
Ça marche coté ludo.
=(^-^)=root@ludo:~# netcat -lup 30001 plouf sdmlfk ^C =(^-^)=root@ludo:~# netcat -lup 30010 dsqmfkj ^C
Mis à jour par François Poulain il y a plus de 4 ans
J'ai amendé plus haut pour backporter dans un howto sur le wiki.
Mis à jour par Christian P. Momon il y a plus de 4 ans
Excellent le coup du netcat !
Alors, oui ça fonctionne en ipv4 mais :
- ça ne fonctionne pas en ipv6 ;
- ça fait planter le reboot du SI Chapril.
On y est presque :D
Mis à jour par François Poulain il y a plus de 4 ans
ça ne fonctionne pas en ipv6
Je ne vois pas le rapport. :)
ça fait planter le reboot du SI Chapril.
Non plus. :)
Mis à jour par Christian P. Momon il y a plus de 4 ans
Voici quelques traces :
=(^-^)=root@coon:/etc/libvirt/qemu# for host in $(ls *xml | sed -e 's/.xml//g'| grep -v modele) ; do virsh start $host ; done error: Failed to start domain admin error: Requested operation is not valid: network 'default' is not active error: Failed to start domain allo error: Requested operation is not valid: network 'default' is not active error: Failed to start domain bastion error: Requested operation is not valid: network 'default' is not active error: Failed to start domain bla error: Requested operation is not valid: network 'default' is not active error: Failed to start domain dns error: Requested operation is not valid: network 'default' is not active error: Failed to start domain drop error: Requested operation is not valid: network 'default' is not active error: Failed to start domain lamp error: Requested operation is not valid: network 'default' is not active error: Failed to start domain libreoffice error: Requested operation is not valid: network 'default' is not active error: Failed to start domain ludo error: Requested operation is not valid: network 'default' is not active error: Failed to start domain mail error: Requested operation is not valid: network 'default' is not active error: Failed to start domain pad error: Requested operation is not valid: network 'default' is not active error: Failed to start domain pouet error: Requested operation is not valid: network 'default' is not active error: Failed to start domain sympa error: Requested operation is not valid: network 'default' is not active error: Failed to start domain valise error: Requested operation is not valid: network 'default' is not active error: Failed to start domain xmpp error: Requested operation is not valid: network 'default' is not active ================================================================================================= En regardant Virtmanager > coon > réseaux virtuels > default > État, il est indiqué « inactif ». Si activation alors : Erreur lors du démarrage du réseau « default »: internal error: Network is already in use by interface virbr0 Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 75, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/asyncjob.py", line 111, in tmpcb callback(*args, **kwargs) File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 66, in newfn ret = fn(self, *args, **kwargs) File "/usr/share/virt-manager/virtManager/network.py", line 76, in start self._backend.create() File "/usr/lib/python3/dist-packages/libvirt.py", line 2996, in create if ret == -1: raise libvirtError ('virNetworkCreate() failed', net=self) libvirt.libvirtError: internal error: Network is already in use by interface virbr0 ================================================================================================= juil. 15 00:57:44 coon.chapril.org icinga2[1305]: [2020-07-15 00:57:44 +0200] information/ApiListener: Finished reconnecting to endpoint 'admin.cluster.chapril.org' via host 'admin.cluster.chapril.org' and port '5665' juil. 15 00:57:44 coon.chapril.org systemd[1]: Reloading Postfix Mail Transport Agent. juil. 15 00:57:44 coon.chapril.org systemd[1]: Reloaded Postfix Mail Transport Agent. juil. 15 00:57:44 coon.chapril.org kernel: e1000e: enp1s0 NIC Link is Down juil. 15 00:57:44 coon.chapril.org kernel: virbr0: port 2(enp1s0) entered disabled state juil. 15 00:57:44 coon.chapril.org libvirtd[2697]: libvirt version: 5.0.0, package: 4+deb10u1 (Guido Günther <agx@sigxcpu.org> Thu, 05 Dec 2019 00:22:14 +0100) juil. 15 00:57:44 coon.chapril.org libvirtd[2697]: hostname: coon.chapril.org juil. 15 00:57:44 coon.chapril.org libvirtd[2697]: Network name='default' uuid=0f6e21a4-a6e3-45fe-af5b-3af5361ec327 is tainted: hook-script juil. 15 00:57:44 coon.chapril.org libvirtd[2697]: internal error: Network is already in use by interface virbr0 juil. 15 00:57:45 coon.chapril.org kernel: drop UNMATCHED IN-external_trIN=enp0s31f6 OUT= MAC=90:1b:0e:cb:cd:12:40:71:83:a5:f1:d0:08:00 SRC=185.39.11.32 DST=94.130.8.3 LEN=40 TOS=0x00 PREC=0x00 TTL=250 ID=60789 PROTO=TCP SPT=41728 DPT=622 WINDOW=1024 RES=0x00 SYN URGP=0 juil. 15 00:57:52 coon.chapril.org sshd[2762]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.173.226 user=root juil. 15 00:57:52 coon.chapril.org systemd[1]: systemd-fsckd.service: Succeeded. juil. 15 00:57:52 coon.chapril.org kernel: drbd coon: bind before connect failed, err = -99 juil. 15 00:57:52 coon.chapril.org kernel: drbd coon: conn( WFConnection -> Disconnecting ) juil. 15 00:57:53 coon.chapril.org kernel: drop UNMATCHED IN-external_trIN=enp0s31f6 OUT= MAC=90:1b:0e:cb:cd:12:40:71:83:a5:f1:d0:08:00 SRC=93.174.93.123 DST=94.130.8.3 LEN=40 TOS=0x00 PREC=0x00 TTL=250 ID=57905 PROTO=TCP SPT=43411 DPT=11395 WINDOW=1024 RES=0x00 SYN URGP=0 juil. 15 00:57:54 coon.chapril.org sshd[2762]: Failed password for root from 222.186.173.226 port 62800 ssh2 juil. 15 00:57:54 coon.chapril.org icinga2[1305]: [2020-07-15 00:57:54 +0200] information/ApiListener: Reconnecting to endpoint 'admin.cluster.chapril.org' via host 'admin.cluster.chapril.org' and port '5665' juil. 15 00:57:54 coon.chapril.org FireHOL[2965]: FireHOL started from '/' with: /usr/sbin/firehol start juil. 15 00:57:54 coon.chapril.org FireHOL[2967]: Saving active firewall to a temporary file started juil. 15 00:57:54 coon.chapril.org delayed_fw_reload[2714]: FireHOL: Saving active firewall to a temporary file... OK juil. 15 00:57:54 coon.chapril.org FireHOL[2979]: Saving active firewall to a temporary file succeeded juil. 15 00:57:54 coon.chapril.org FireHOL[2980]: Processing file '/etc/firehol/firehol.conf' started juil. 15 00:57:55 coon.chapril.org drbd[1324]: WARN: stdin/stdout is not a TTY; using /dev/console juil. 15 00:57:55 coon.chapril.org drbd[1324]: . juil. 15 00:57:55 coon.chapril.org systemd[1]: Started LSB: Control DRBD resources.. juil. 15 00:57:55 coon.chapril.org kernel: drbd maine: bind before connect failed, err = -99 juil. 15 00:57:55 coon.chapril.org kernel: drbd maine: conn( WFConnection -> Disconnecting )
Mis à jour par François Poulain il y a plus de 4 ans
Après une longue investigation avec Christian, on a tiqué sur :
Jul 15 00:01:20 coon delayed_fw_reload[1616]: ERROR: FireHOL is already running. Exiting...
On soupçonne une race condition qui apparait du fait que les regles iptables deviennent nombreuses (4000).
En regardant la conf systemd de libvirtd sur coon on tombe sur :
Drop-In: /etc/systemd/system/libvirtd.service.d └─override.conf [...] Process: 1441 ExecStartPost=/usr/local/bin/delayed_fw_reload (code=exited, status=0/SUCCESS)
Ça ressemble à une cochonceté oubliée, datant des premiers jours du cluster. Depuis, les hooks network on rendu ça inutiles.
Par ailleurs le code impliqué est plus que naïf.
# cat /usr/local/bin/delayed_fw_reload #!/bin/bash sleep 10 && firehol start
Je dégage tout ça de coon. Maine en est exempt.
Mis à jour par Christian P. Momon il y a plus de 4 ans
- Statut changé de En cours de traitement à Résolu
Redémarrage fait nominalement avec les modifs minetest. Donc nous validons que ça venait de ça \o/
Et les tests d'ouverture de port du range pour minetest sont OK. Fermeture du ticket :D
Mis à jour par Christian P. Momon il y a plus de 4 ans
- Lié à Anomalie #4601: Redémarrage difficile des vm coon ajouté
Mis à jour par Christian P. Momon il y a plus de 4 ans
Pour des raisons de simplicité, le domaine minetest n'est configuré que pour ipv4.
Mis à jour par Christian P. Momon il y a environ 4 ans
- Version cible changé de Backlog à Sprint 2020 été