Comment contrôler les plages IP des hotspots de Network Manager?

2

Un serveur possède deux interfaces WiFi, toutes deux configurées via Network Manager pour constituer des points d'accès.

Les clients connectés obtiennent des adresses IP dans les plages 10.42.0.0/24 et 10.42.1.0/24 (AFAICS via appelé dnsmasqpar NM). Je dois pouvoir attribuer une plage spécifique à une interface spécifique. Malheureusement, Network Manager les assigne de manière imprévisible ( wlan0peut donc obtenir 10.42.0.0 aujourd'hui et 10.42.1.0 demain; ensuite wlan1la plage restante), ce qui gâche mon problème iptablescar les règles de routage sont différentes pour ces interfaces.

J'ai essayé l' dhcp-range=option dans /etc/dnsmasq.conf(qui n'était pas présent car NM configure dnsmasqvia la ligne de commande) et quelques autres idées, mais je ne peux pas trouver de solution viable.

Avez-vous des idées sur la manière dont je peux contrôler quelle plage IP est affectée à quelle interface?

David Radu
la source
Pourquoi la gamme DHCP n'a-t-elle pas fonctionné? Juste ignoré vos paramètres?
J'ai utilisé " dhcp-range=wlan0,10.42.0.2,10.42.0.253,72h" dans dnsmasq.conf(et similaire pour wlan1). Cela n'a eu aucun effet. Je suppose que Network Manager s’exécute dnsmasqvia cmd-line, qui a priorité.
David Radu
Également essayé de placer dnsmasq.confdans /etcet dans /etc/NetworkManager/dnsmasq.dmais les plages DHCP sont toujours assignés de manière imprévisible. J'ai oublié de mentionner qu'il s'agit de 16.04.1 LTS.
David Radu
Avez-vous essayé /etc/NetworkManager/dnsmasq.d/localet ensuite sudo restart network-manager.
oui (en vain)
David Radu

Réponses:

3

Vous pouvez déterminer le sous-réseau IPv4 utilisé en configurant une adresse manuelle, telle que

nmcli connection modify $SHARED_NAME ipv4.addresses 192.168.2.5/24

C'est documenté dans man nm-settings, voir ipv4.method.

/etc/NetworkManager/dnsmasq.d permet d’utiliser Dnsmasq en tant que plug-in DNS, pas pour votre cas d'utilisation du partage de connexion. Pour cela, il s’agit plutôt de /etc/NetworkManager/dnsmasq-shared.d - du moins dans les versions récentes de NM. Mais vous ne devriez pas avoir besoin de ça.

thaller
la source
Cela ne semble pas fonctionner. Définir une adresse IP en AFAICS est incompatible avec ipv4.method shared: NM ne parvient pas à définir correctement la passerelle et le DNS dans cette situation. Et le contrôle manuel est impossible - nmclirefuse d'accepter ipv4.dnsen ipv4.method sharedmode. (Je suis assez sûr que j'essayé avant en modifiant directement address1=dans NetworkManager/system-connections- le résultat a été le même: IP pourrait être définie , mais la passerelle / DNS n'étaient pas.) Toutes les idées?
David Radu
Le lien manuel le confirme: les adresses ne peuvent pas être utilisées avec les méthodes 'shared', 'link-local' ou 'disabled', car l'adressage est automatique ou désactivé et si sharedest spécifié ... une adresse est attribuée à l'interface dans 10.42. gamme x.1 / 24 ... .
David Radu
Certes, trusty a la 0.9.8.8-0ubuntu7.1, qui est maintenant très ancienne. Fonctionne depuis la version 0.9.10 , comme indiqué dans un manuel récent . Je ne comprends pas pourquoi tu parles ipv4.dns, tu veux dire ipv4.addresses?
thaller
J'ai essayé de définir DNS via ipv4.dnscar nmcli connection modify $SHARED_NAME ipv4.addresses 192.168.2.5/24tous les clients sont connectés aux points d'accès sans passerelle ni paramètres DNS. Définir l'adresse en sharedmode ne devrait pas fonctionner du tout, mais créer des points chauds qui ne fonctionnent pas. Ce dont j'ai vraiment besoin, c’est d’un certain contrôle de "x" dans les plages 10.42.x.1 / 24 utilisées par NM (car il définit "x" de manière aléatoire).
David Radu
Comme dit, vous ne pouvez pas configurer le sous-réseau choisi avec la version 0.9.8. Cela fonctionne avec la version ultérieure en configurant une adresse manuelle. Vous dites que cela ne fonctionne pas, mais votre commentaire ne dit pas pourquoi. NM sur Ubuntu 14.04 ne vous permettrait pas de faire ce que vous voulez.
thaller
3

Après des heures à essayer différentes solutions, j'ai finalement pu spécifier un sous-réseau pour une connexion Hotspot à l'aide de Network Manager, puis définir une adresse IP manuelle sur le périphérique client pour une sorte d'adresse IP statique. Aucune des méthodes dnsmasq / dhcp ne fonctionne avec Network Manager. Vous devez éditer le fichier de connexion de Network Manager. Ces fichiers sont générés pour chaque connexion dans le répertoire suivant:

/etc/NetworkManager/system-connections

Je crois que lorsque vous créez un Hotspot, un nouveau fichier de connexion est créé et s'appelle Hotspot. Vous devez éditer ce fichier. Assurez-vous d’éditer le fichier de connexion Hotspot, sinon cela ne fonctionnera pas! Modifiez / ajoutez les lignes suivantes sous la section [ipv4]pour définir un sous-réseau. Assurez-vous qu'il a la ligne method=sharedet utilisez l'adresse IP de votre address1=choix, et NetworkManager émettra une adresse IP à tous les périphériques connectés dans le même sous-réseau. Le format de cette ligne est address1=ip/subnetmask,gateway. La passerelle devrait être la même chose que l'ip. Voici à quoi [ipv4]devrait ressembler la section:

[ipv4]
dns-search=
method=shared
address1=192.168.125.1/24,192.168.125.1

Une fois que vous avez terminé, enregistrez le fichier et exécutez la procédure suivante pour redémarrer Network Manager:

sudo service network-manager restart

Une adresse IP doit maintenant être attribuée à vos appareils connectés sous le même sous-réseau que l'adresse IP que vous avez entrée. Dans cet exemple, il s'agirait de 192.168.125.x.

Pour obtenir une adresse IP statique, faites-le sur le périphérique côté client. Définissez une adresse IP manuelle pour cette connexion de point d'accès sans fil sous le même sous-réseau, en utilisant le même masque de sous-réseau et la même passerelle que ceux entrés dans le fichier de connexion de point d'accès.

Voici tout mon fichier de connexion Hotspot comme référence:

[connection]
id=Hotspot
uuid=14032jb9-43c6-41c6-8d56-8b6b0f7xcce9
type=wifi
interface-name=wlan0
permissions=
secondaries=
timestamp=1486816539

[wifi]
mac-address=7C:84:DB:62:7B:3F
mac-address-blacklist=
mac-address-randomization=0
mode=ap
seen-bssids=7C:84:DB:62:7B:3F;
ssid=yournetworkname

[wifi-security]
group=
key-mgmt=wpa-psk
pairwise=
proto=
psk=yourpassword

[ipv4]
dns-search=
method=shared
address1=192.168.125.1/24,192.168.125.1

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore

La documentation sur ce paramètre dans Network Manager peut être lue ici:

https://people.freedesktop.org/~lkundrak/nm-docs/nm-settings.html

Tableau 36. Paramètre ipv4

Nom de la clé: méthode

Type de valeur: chaîne

Valeur par défaut:

Valeur Description: Méthode de configuration IP. NMSettingIP4Config et NMSettingIP6Config prennent en charge "auto", "manuel" et "lien local". Voir la documentation spécifique à la sous-classe pour d'autres valeurs. En général, pour la méthode "auto", des propriétés telles que "dns" et "routes" spécifient les informations ajoutées aux informations renvoyées par la configuration automatique. Les propriétés "ignore-auto-routes" et "ignore-auto-dns" modifient ce comportement. Pour les méthodes qui n'impliquent aucun réseau en amont, telles que "partagé" ou "lien local", ces propriétés doivent être vides. Pour la méthode IPv4 "partagée", le sous-réseau IP peut être configuré en ajoutant une adresse IPv4 manuelle ou dans le cas contraire, vous choisissez 10.42.x.0 / 24.

Partie la plus importante:

Pour la méthode IPv4 "partagée", le sous-réseau IP peut être configuré en ajoutant une adresse IPv4 manuelle ou dans le cas contraire, vous choisissez 10.42.x.0 / 24.

jure
la source
1

Ce qui suit semble fonctionner correctement - ces commandes forcent Network Manager à attribuer des plages DHCP sélectionnées aux points d'accès Wifi (10.42.0.x à wifiname1; 10.42.1.x à wifiname2):

nmcli connection modify wifiname1 ipv4.addresses 10.42.0.1
nmcli connection modify wifiname2 ipv4.addresses 10.42.1.1

Note: wifinameN (N=1/2)correspond aux fichiers dans /etc/NetworkManager/system-connections.

David Radu
la source