Ubuntu中应用程序的静态/DHCP网络接口配置之间的更改

Ubuntu中应用程序的静态/DHCP网络接口配置之间的更改,ubuntu,networking,Ubuntu,Networking,我有一个在Ubuntu中运行的python应用程序,它需要能够动态地改变静态和动态网络配置(IP、网关、子网和DNS)之间的网络接口。应用程序未以root用户身份运行 我可以更改/etc/network/interfaces的权限以允许非root用户进行修改,但这并不可取 我可以将接口设置为始终在/etc/network/interfaces中使用DHCP,并在引导后使用ifconfig、route和写入/etc/resolvconf/resolv.conf.d/head for DNS来设置静

我有一个在Ubuntu中运行的python应用程序,它需要能够动态地改变静态和动态网络配置(IP、网关、子网和DNS)之间的网络接口。应用程序未以root用户身份运行

我可以更改/etc/network/interfaces的权限以允许非root用户进行修改,但这并不可取

我可以将接口设置为始终在/etc/network/interfaces中使用DHCP,并在引导后使用ifconfig、route和写入/etc/resolvconf/resolv.conf.d/head for DNS来设置静态配置。这种方法有两个问题:1)与DCHP协商将为我提供一个DNS服务器。我知道,通过写入/etc/resolvconf/resolv.conf.d/head,它将首先尝试这样做,但我根本不想依赖DHCP提供的DNS服务器(以便能够检测设置的静态DNS服务器的问题)。我知道我可以将/etc/dhcp/dhclient.conf设置为不请求DNS服务器,但是当用户在静态/动态(也是root所有)之间切换时,我必须修改该配置文件。2)我不希望每次启动时都使用完DHCP租约,然后更改为静态


那么……如果您正在编写一个非根应用程序,您将如何允许动态地在静态/动态配置之间进行更改?使用静态配置时的一个要求是,用户可以设置DNS服务器,并且操作系统不会使用DHCP提供的任何DNS服务器。理想情况下,root拥有的文件不会被修改

找到了解决方案。我将在/etc/network/interfaces中设置自动eth0,使用静态配置,但不使用IP/gateway/subnet/DNS。我的应用程序在启动时启动。当应用程序启动时,如果用户设置了dynamic,我将调用“dhclient-r eth0”来获取DHCP配置。如果用户设置了static,我将使用ifconfig、route和/etc/resolvconf/resolv.conf.d/head来设置配置


这允许我的应用程序配置静态/动态,而不具有根权限。不需要修改/etc/网络/接口。不需要修改/etc/dhcp/dhclient.conf。我可以使用静态DNS设置静态配置,并避免在静态模式下使用DHCP提供的DNS。无需修改任何根拥有的文件

在不以root用户身份运行的情况下,如何配置网络接口(通过dhclient或ifconfig)?这是一个好问题。答案是,这只是我们项目的设置方式。运行应用程序的用户已经拥有这些工具的sudo权限。我应该在最初的帖子中提到这一点。