如何控制网络管理器热点的 IP 范围?

如何控制网络管理器热点的 IP 范围?

一台服务器有两个 WiFi 接口,均通过网络管理器配置为热点。

已连接的客户端获得 10.42.0.0/24 和 10.42.1.0/24 范围内的 IP(据我所知,通过dnsmasqNM 调用)。我需要能够将特定范围分配给特定接口。不幸的是,网络管理器会不可预测地分配它们(因此wlan0今天可能获得 10.42.0.0,明天获得 10.42.1.0;然后wlan1获得剩余范围),这会弄乱我的设置,iptables因为这些接口的路由规则不同。

我尝试了dhcp-range=选项/etc/dnsmasq.conf(由于 NM 通过命令行配置,因此不存在dnsmasq)和一些其他想法,但找不到可行的解决方案。

关于如何控制将哪个 IP 范围分配给哪个接口,您有什么想法吗?

答案1

经过数小时尝试不同的解决方案后,我终于能够使用网络管理器为热点连接指定子网,然后在客户端设备上为某种静态 IP 设置手动 IP。所有 dnsmasq/dhcp 方法均不适用于网络管理器。您必须编辑网络管理器连接文件。这些文件是在以下目录中为每个连接生成的:

/etc/NetworkManager/system-connections

我相信当您创建热点时,会创建一个新的连接文件,名为热点。您需要编辑此文件。确保您正在编辑热点连接文件,否则这将不起作用!更改/添加部分下的以下行[ipv4]以设置子网。确保它有行method=shared并使用您想要的任何 IP 地址address1=,NetworkManager 将为所有连接设备发出同一子网中的 IP。此行的格式为address1=ip/subnetmask,gateway。网关应与 IP 相同。以下是该[ipv4]部分应有的样子:

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

完成后,保存文件并运行以下命令重新启动网络管理器:

sudo service network-manager restart

现在,您连接的设备应该会获得与您输入的 IP 位于同一子网下的 IP 地址。在此示例中,该地址为 192.168.125.x。

要获取静态 IP,请在客户端设备上执行此操作。在同一子网下为此热点连接设置手动 IP,使用在热点连接文件中输入的相同子网掩码和网关。

以下是我的整个热点连接文件,供参考:

[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

关于网络管理器中此设置的文档可以在这里阅读:

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

表 36. ipv4 设置

密钥名称:方法

值类型:字符串

默认值:

值描述:IP 配置方法。NMSettingIP4Config 和 NMSettingIP6Config 都支持“auto”、“manual”和“link-local”。有关其他值,请参阅子类特定文档。通常,对于“auto”方法,“dns”和“routes”等属性指定添加到自动配置返回的信息中的信息。“ignore-auto-routes”和“ignore-auto-dns”属性会修改此行为。对于暗示没有上游网络的方法(例如“shared”或“link-local”),这些属性必须为空。对于 IPv4 方法“shared”,可以通过添加一个手动 IPv4 地址来配置 IP 子网,否则将选择 10.42.x.0/24。

最重要的部分:

对于 IPv4 方法“共享”,可以通过添加一个手动 IPv4 地址来配置 IP 子网,否则选择 10.42.x.0/24。

答案2

您可以通过配置一个手动地址来确定使用的 IPv4 子网,例如

nmcli connection modify $SHARED_NAME ipv4.addresses 192.168.2.5/24

其记录在 中man nm-settings,请参阅 ipv4.method。

/etc/NetworkManager/dnsmasq.d 用于将 dnsmasq 用作 DNS 插件,而不是用于您的连接共享用例。对于此,它是 /etc/NetworkManager/dnsmasq-shared.d — 至少在 NM 的最新版本中。但您不需要它。

答案3

以下操作似乎可以正常工作 - 这些命令强制网络管理器将选定的 DHCP 范围分配给 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

注:wifinameN (N=1/2)对应中的文件/etc/NetworkManager/system-connections

答案4

nm-dnsmasq-manager.c我们可以看到

listen_address = nm_ip4_config_get_first_address(ip4_config);

(大概这是ipv4.addresses在 NetworkManager 中connection

并传递给公用事业nm-dnsmasq-utils.c作为addr

我们可以看到, 使用一些默认的“智能规则”,addr强制进入一个,使用及其...这意味着如果您选择,您将获得 192.168.0.1 的服务器(它使用网络地址进行修复),然后它还会将您的掩码配对为更小的掩码。创建后,这将传递给dhcp-rangeaddrnetmask192.168.0.0/22/24firstlast

nm_strv_ptrarray_add_string_printf(cmd, "--dhcp-range=%s,%s,60m", first, last);

相关内容