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

Dav*_*adu 4 network-manager networking dhcp ip

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

连接的客户端获取范围为 10.42.0.0/24 和 10.42.1.0/24 的 IP(通过dnsmasqNM 调用的AFAICS )。我需要能够为特定接口分配特定范围。不幸的是,网络管理器不可预测地分配了它们(所以wlan0今天可能会得到 10.42.0.0,明天可能会得到 10.42.1.0;然后wlan1会得到剩余的范围),这搞砸了我,iptables因为这些接口的路由规则是不同的。

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

关于如何控制分配给哪个接口的 IP 范围的任何想法?

小智 6

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

/etc/NetworkManager/system-connections
Run Code Online (Sandbox Code Playgroud)

我相信当你创建一个 Hotspot 时,会创建一个新的连接文件,并命名为 Hotspot。您需要编辑此文件。确保您正在编辑热点连接文件,否则这将不起作用!在[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
Run Code Online (Sandbox Code Playgroud)

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

sudo service network-manager restart
Run Code Online (Sandbox Code Playgroud)

现在,您连接的设备应该在与您输入的 IP 相同的子网下分配一个 IP 地址。在本例中,它将是 192.168.125.x。

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

这是我的整个 Hotspot 连接文件以供参考:

[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
Run Code Online (Sandbox Code Playgroud)

可以在此处阅读有关网络管理器中此设置的文档:

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

表 36. ipv4 设置

键名:方法

值类型:字符串

默认值:

值说明:IP 配置方法。NMSettingIP4Config 和 NMSettingIP6Config 都支持“自动”、“手动”和“本地链接”。有关其他值,请参阅特定于子类的文档。通常,对于“auto”方法,诸如“dns”和“routes”之类的属性指定添加到从自动配置返回的信息上的信息。“ignore-auto-routes”和“ignore-auto-dns”属性修改了这个行为。对于暗示没有上游网络的方法,例如“共享”或“本地链接”,这些属性必须为空。对于“共享”IPv4 方法,可以通过添加一个手动 IPv4 地址来配置 IP 子网,否则选择 10.42.x.0/24。

最重要的部分:

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


tha*_*ler 4

您可以通过配置一个手动地址来确定所使用的 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 中是这样。但你不应该需要那个。


Dav*_*adu 1

以下命令似乎工作正常 - 这些命令强制网络管理器将选定的 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.